在 C++ 中覆盖时更改签名
Changing signature while Overriding in C++
我有基地class
class Shape{
public:
virtual int getArea()=0;
}
我想在 overriding
时更改签名,如下所示:
class Rectangle : class Shape{
public:
int getArea(int someParameter = 0){
return 0;
}
}
是否有可能以某种方式实现这一点,因为我对新添加的参数使用默认值?
我能看到的唯一解决方案是同时实现 int getArea()
和 int getArea(int)
,其中一个函数可以调用另一个函数(例如 int getArea() { return getArea(0); }
).你不能让带参数的重载有默认参数。
您需要重载您的虚函数。但是如果你重载了虚函数,你会得到一个警告“hides overloaded virtual function”
解决方案是使用本机签名覆盖函数并使用虚拟前缀重载它。
示例:
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) {
...
}
};
我有基地class
class Shape{
public:
virtual int getArea()=0;
}
我想在 overriding
时更改签名,如下所示:
class Rectangle : class Shape{
public:
int getArea(int someParameter = 0){
return 0;
}
}
是否有可能以某种方式实现这一点,因为我对新添加的参数使用默认值?
我能看到的唯一解决方案是同时实现 int getArea()
和 int getArea(int)
,其中一个函数可以调用另一个函数(例如 int getArea() { return getArea(0); }
).你不能让带参数的重载有默认参数。
您需要重载您的虚函数。但是如果你重载了虚函数,你会得到一个警告“hides overloaded virtual function”
解决方案是使用本机签名覆盖函数并使用虚拟前缀重载它。
示例:
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) {
...
}
};