具有纯虚函数的父类的指针数组和指针数组的对象类型

Posted

技术标签:

【中文标题】具有纯虚函数的父类的指针数组和指针数组的对象类型【英文标题】:pointer array of parent class having a pure virtual function and object type of pointer array 【发布时间】:2019-11-27 19:29:46 【问题描述】:

在主函数中,我想创建一个指针数组。对象类型应该每次都改变。 像这样的东西。 shape* a[10]=新矩形; 但我想制作一个 [0] 矩形类型。 a[1] 圆形等。

class shape

    public:
        virtual float boundary_length()=0;
;
class rectangle: public shape

    public:
        float boundary_length()
        
            cout<<"Boundary length of rectangle"<<endl;
            return 2*(length+width);
        
;
class circle: public shape


    public:
        float boundary_length()
        
            return 2*(3.14*radius);
           
;
class triangle: public shape

        float boundary_length()
        
            return (base+perp+hyp);
        
;
int main()

    shape* a=new rectangle;
    return 0;

【问题讨论】:

【参考方案1】:

如果我的理解正确,您需要类似以下内容

#include <iostream>

class shape

    public:
        virtual float boundary_length() const = 0;
        virtual ~shape() = default;
;

class rectangle: public shape

    public:
        rectangle( float length, float width ) : length( length ), width( width )
        
        
        float boundary_length() const override
        
            return 2*(length+width);
        
    protected:
        float length, width;
;

class circle: public shape

    public:
        circle( float radius ) : radius( radius )
        
        
        float boundary_length() const override
        
            return 2*(3.14*radius);
        

    private:
        float radius;
;

//...

int main(void) 

    const size_t N = 10;    
    shape * a[N] =
    
        new rectangle( 10.0f, 10.0f ), new circle( 5.0f )
    ;

    for ( auto s = a; *s != nullptr; ++s )
    
        std::cout << ( *s )->boundary_length() << '\n';
            

    for ( auto s = a; *s != nullptr; ++s )
    
        delete *s;
            

程序输出是

40
31.4

【讨论】:

以上是关于具有纯虚函数的父类的指针数组和指针数组的对象类型的主要内容,如果未能解决你的问题,请参考以下文章

虚函数本质

C++学习笔记11--纯虚函数和抽象类

父类子类指针相互转换问题

使用具有指向派生类对象的指针的基类指针数组调用派生类方法

当在声明它的父类的实例上调用纯虚函数时会发生啥?

008 纯虚函数