默认值-在c++中重写签名时更改签名

default value - Changing signature while Overriding in C++

本文关键字:重写 c++ 默认值      更新时间:2023-10-16

我有一个基类

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); })。

你需要重载你的虚函数。但是如果你重载了虚函数,你会得到一个警告"隐藏了重载的虚函数"

解决方案是用本地签名覆盖函数,用虚前缀重载。

的例子:

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) {
       ...
   }
};