在C ++中覆盖时更改签名

时间:2015-06-11 06:24:17

标签: c++ default-value override method-overriding method-signature

我有一个基类

class Shape{
    public:
        virtual int getArea()=0;
}

我想在overriding这样改变签名:

class Rectangle : class Shape{
    public:
        int getArea(int someParameter = 0){
            return 0;
        }
}

有可能以某种方式实现这一点,因为我使用新增参数的默认值吗?

2 个答案:

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