#3783. [GESP202503 六级 C++] 第 15 题
[GESP202503 六级 C++] 第 15 题
关于下面代码,说法错误的是( )。
class Shape {
protected:
string name;
public:
Shape(const string& n) : name(n) {}
virtual double area() const {
return 0.0;
}
};
class Circle : public Shape {
private:
double radius; // 半径
public:
Circle(const string& n, double r) : Shape(n), radius(r) {}
double area() const override {
return 3.14159 * radius * radius;
}
};
class Rectangle : public Shape {
private:
double width; // 宽度
double height; // 高度
public:
Rectangle(const string& n, double w, double h) : Shape(n), width(w), height(h)
{}
double area() const override {
return width * height;
}
};
int main() {
Circle circle("MyCircle", 5.0);
Rectangle rectangle("MyRectangle", 4.0, 6.0);
Shape* shapePtr = &circle;
cout << "Area: " << shapePtr->area() << endl;
shapePtr = &rectangle;
cout << "Area: " << shapePtr->area() << endl;
return 0;
}
{{ select(1) }}
- 语句
Shape* shapePtr = &circle;和shapePtr = &rectangle;出现编译错误 Shape为基类,Circle和Rectangle是派生类- 通过继承,
Circle和Rectangle复用了Shape的属性和方法,并扩展了新的功能 Circle和Rectangle通过重写(override)基类的虚函数area和基类指针,实现了运行时多态