我想在两个抽象类
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()
,因为它没有意义。