我有一个基类
class Shape{
public:
virtual int getArea()=0;
}
我想在overriding
这样改变签名:
class Rectangle : class Shape{
public:
int getArea(int someParameter = 0){
return 0;
}
}
有可能以某种方式实现这一点,因为我使用新增参数的默认值吗?
答案 0 :(得分:3)
我能看到的唯一解决方案是您同时实现int getArea()
和 int getArea(int)
,其中一个函数可以调用另一个函数(例如int getArea() { return getArea(0); }
)。你不能让带参数的重载具有默认参数。
答案 1 :(得分:0)
您需要重载虚拟功能。但是,如果您重载了虚拟函数,则会收到警告“隐藏重载的虚拟函数”
解决方案是具有本机签名的替代功能,并使用虚拟前缀重载它。
示例:
class A {
virtual void foo(int) {...}
};
class B: public A {
void foo(int i) override {
A::foo(i);
}
virtual void foo(const std::string& str) {
...
}
};