抽象类的成员函数是另一个抽象类的派生类

问题描述 投票:0回答:0

我想在两个抽象类

area()
volume()
中分别定义成员函数
Shapes_2D
Shapes_3D
,它们是另一个抽象基类
Shapes
的派生类。但是我得到了错误:

no member named 'area' in 'Shapes'

这是我的代码:

class Shapes
{
protected:
    unsigned int dim;       
public:
    virtual ~Shapes() {}
    Shapes(unsigned int x) : dim{x} {}
    unsigned int getDim() { return dim; }
};

class Shapes_2D : public Shapes
{
public:
    Shapes_2D() : Shapes{2} {}
    virtual double area() = 0;  
};

class Shapes_3D : public Shapes
{
public:
    Shapes_3D() : Shapes{3} {}
    virtual double volume() = 0;
};

class Rectangle : public Shapes_2D
{
private:
    double width;
    double height;
public:
    Rectangle(double w, double h) : width{w}, height{h} {}
    double area() {return width * height;};
};

这是我尝试使用的方法

area()

Shapes *rectangle = new Rectangle(2, 3);
rectangle->area();

我可以通过在 2D 基类中定义

volume()
来解决这个问题:

class Shapes
{
public:
    // ...
    virtual double area() = 0;
    virtual double volume() = 0;
};
class Shapes_2D : public Shapes
{
public:
    // ...
    double area() { return 0; }  
    double volume() { return 0; }
};

有没有办法避免在二维类中定义

volume()
,因为它没有意义。

c++ abstract-class
© www.soinside.com 2019 - 2024. All rights reserved.