【发布时间】:2015-06-11 06:24:16
【问题描述】:
我有一个基类
class Shape{
public:
virtual int getArea()=0;
}
我想在overriding这样更改签名:
class Rectangle : class Shape{
public:
int getArea(int someParameter = 0){
return 0;
}
}
是否有可能以某种方式实现这一点,因为我正在为新添加的参数使用默认值?
【问题讨论】:
-
如果你改变了你不再覆盖的签名,你就是超载了。不,不再可能使用多态性,因为
Shape::getArea和Rectangle::getArea是两个不同的函数。 -
@JoachimPileborg:我明白,但有什么出路吗?
-
@Abhinav :这是不可能的。你可以在这里得到一些信息stackoverflow.com/questions/411103/…
-
您可以通过定义一个单独的“AreaParameter”层次结构、声明虚拟获取指针或对此类参数的引用 (
virtual int getArea(const AreaParameter &p = AreaParameter()))、在子类和那里向下转换参数类型。 (或者通常使用任何双重调度技术......)
标签: c++ default-value overriding method-signature