我一直在尝试更好地理解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(),而不必进行强制转换。有可能吗?
谢谢。