【发布时间】:2015-01-17 13:32:01
【问题描述】:
我正在做一个 Shape 类,它允许您获取某个形状的位置 X、位置 Y 和区域。派生类是一个Circle,它增加了一个半径变量。
class Shape
{
public:
Shape( double positionX, double positionY );
virtual double getPositionX() = 0;
virtual double getPositionY() = 0;
virtual double area() = 0;
class Circle : public Shape
{
public:
Circle( double positionX, double positionY, double radius );
virtual double getPositionX();
virtual double getPositionY();
virtual double area();
virtual double getRadius();
在我的 main 中,我有一个 Shapes 数组,其中第一个对象是一个新的 Circle,并且正在这个 Circle 上调用方法。
int main()
{
Shape* s[2];
s[0] = new Circle( 2.0, 3.0, 4.0 );
cout << s[0]->getPositionX() << endl; // Works fine.
cout << s[0]->getPositionY() << endl; // Works fine.
cout << s[0]->getRadius() << endl; // Doesn't work because s is a shape and my shape class has
// no getRadius() method.
如何调用 getRadius() 方法?
【问题讨论】:
-
如果都是圆圈,为什么不创建一个圆圈数组呢?如果数组可以包含任何形状,那么在非圆上调用 getRadius 应该做什么?要回答您的问题,
dynamic_cast<Circle&>(*s[0]).getRadius()
标签: c++ inheritance