第21055题 单选
关于给定的C++继承多态相关代码,下列说法错误的是?
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; 
}
A

语句Shape* shapePtr = &circle;和shapePtr = &rectangle;出现编译错误

B

Shape为基类,Circle和Rectangle是派生类

C

通过继承,Circle和Rectangle复用了Shape的属性和方法,并扩展了新的功能

D

Circle和Rectangle通过重写(override)基类的虚函数area和基类指针,实现了运行时多态