小编Emm*_*mme的帖子

C++:继承具有相同名称的重载非虚方法和虚方法会导致问题

我试图将两个具有不同参数列表的同名方法继承到派生类.其中一个是派生类中的虚拟和重写,另一个是非虚​​拟的.这样做,我在尝试从派生类对象访问基类的非虚方法时遇到编译错误.

这是代码片段

class Base {
public: 
    void f() {
        cout << "[Base::f()]" << endl;
    }

    virtual void f(int arg) {
        cout << "[Base::f(" << arg << ")]" << endl;
    }
};


class Deriv : public Base {
public:
    virtual void f(int arg) {
        cout << "[Deriv::f(" << arg << ")]" << endl;
    }
};


int main() {
    Deriv d;
    d.f(-1);    
    d.f();  // <<-- compile error   
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

这会产生以下编译错误:

错误:没有匹配函数调用'Deriv :: f()'
注意:候选者是:virtual void Deriv :: f(int)

我不是C++专家,但直到现在我才认为成员方法可以通过签名完全区分.因此,不应该重写非虚方法Base :: f()并且应该仍然可以访问它.我错了吗? …

c++ overloading virtual-inheritance method-signature

7
推荐指数
1
解决办法
3625
查看次数