为什么不能覆盖继承的类虚拟函数?

时间:2020-10-17 20:31:34

标签: c++ inheritance polymorphism overriding

我一直在尝试更好地理解C ++继承和多态性。但是我很难让它正常工作。

我有一个名为 Shape 的基类。 我有矩形,它是形状的子代。而平方矩形的子代。

形状没有区域矩形平方的面积等于宽度*高度

矩形设置宽度高度是独立的。对于平方,当设置宽度高度时,该功能会将两个属性设置为相同的值。不幸的是,如果我尝试通过在矩形上创建 Square 来使用多态性,那就不是这种情况。


shapes.hpp:

for x in range(100):
    if x % 3 != 0 and x % 5 != 0:
        continue
    print(x)

shapes.cpp:

#ifndef SHAPES_H
#define SHAPES_H

// Base class
class Shape {
    public:
        virtual void setWidth(int w);
        virtual void setHeight(int h);
    protected:
        int width;
        int height;
};

// Derived class
class Rectangle: public Shape {
   public:
      int getArea();
};

class Square: public Rectangle {
   public:
      void setWidth(int w) override;
      void setHeight(int h) override;
};

#endif /* SHAPES_H */

测试getArea()函数:

#include "shapes.hpp"

// Base class
void Shape::setWidth(int w) {
    width = w;
}
void Shape::setHeight(int h) {
    height = h;
}

// Derived class
int Rectangle::getArea() { 
    return (width * height); 
}

// Overloading
void Square::setWidth(int w) {
    width = w;
    height = w;
}
void Square::setHeight(int h) {
    width = h;
    height = h;
}

我必须投射矩形,这样它才能调用 getArea()。 我希望能够调用 Square的 getArea(),而不必进行强制转换。有可能吗?

谢谢。

0 个答案:

没有答案