Access overloaded base class method with same name as derived method
我正试图从与派生类中的方法同名的基类中调用方法。下面是一个简单的例子:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 | #include <iostream> using namespace std; class Base { public: void print() { cout <<"Printing from base" << endl; } void print(int num) { cout <<"Printing number from base:" << num << endl; } }; class Derived : public Base { using Base::print; public: void print() { cout <<"Printing from derived" << endl; } }; int main() { Derived x; x.print(); x.Base::print(1); //x.print(1); // Gives a compilation error return 0; } |
基本上,我希望能够调用x.print(1)并获得"printing number from base:1",即自动调用与签名匹配的方法,即使它位于基类中。
没有了
因此,我增加了这一行,但现在错误是
为什么会这样?我使用公共继承,所以我会认为它是现成的?
如示例中所示,手动调用
我很抱歉,如果前面的一个问题已经涉及到这一点,我读了很多类似的案例,但没有任何帮助。
使用指令的位置决定了可见性。只要把它放在公共区域就可以了:
1 2 3 4 5 6 7 8 9 10 11 12 | //... class Derived : public Base { public: using Base::print; void print() { cout <<"Printing from base" << endl; } }; //... |
http://ideone.com/06nnk
您可以使您的功能虚拟化。从基类继承的任何未重载的虚拟函数都将通过派生类调用。
1 2 3 4 5 6 7 8 9 10 11 12 | class base { public: virtual void Foo() {} } class Derived { } Derived d; d.foo(); // calls base::foo() |
号