【发布时间】:2013-12-28 14:05:41
【问题描述】:
被这个问题困扰了一段时间,似乎找不到任何答案!
我想要基类(图)和一些子类(圆形、三角形等)。然后我想要一个向量包含不同种类的子类。
问题是,我所有的子类都有大小,但它们的描述方式不同。
圆形只需要半径,三角形需要底边和高度,正方形需要宽度和高度。
这是我的超类
class Figure {
public:
//This function should take diffrent amount of values
virtual void setSize();
//More awesome stuff here
}
这些是示例子类
class Circle {
public:
//This is a circle, only needs radius as size
void setSize( int _radius ) { radius = _radius; }
};
class Triangle {
public:
//This is a triangle, it needs both a base and height
void setSize( int _base, int _height ) { base = _base; height = _height; }
};
所以现在如果我从我的 Figure* 调用 getSize() 并且它指向一个 Circle 对象,是否有办法让我的超类知道它应该调用的 Circle 类中的 setSize(double)?
【问题讨论】:
-
如果它们没有相同的参数类型,则不是 - 这是实际代码吗?因为如果是这样,您将永远不会从 Figure 类中获得多态行为 - 没有
setSize()的覆盖,因为它们都有不同的参数。 -
你应该尝试找到另一个属性来描述你的多态对象:
virtual void Figure::setScale(double);和virtual void setXYRatio(double,double)怎么样 -
您可以使用默认参数作为 hack,而忽略其他参数。
标签: c++ polymorphism subclass conditional-statements superclass