Accessing base class's method with derived class's object which has a method of same name
当使用派生类的对象访问"base"的foo()时。
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 | #include <iostream> class base { public: void foo() { std::cout<<" Hello from foo "; } }; class derived : public base { public: void foo(int k) { std::cout<<" Hello from foo with value ="<<k<<" "; } }; int main() { derived d; d.foo();//error:no matching for derived::foo() d.foo(10); } |
如何访问派生类中同名方法的基类方法。已显示生成的错误。如果我不清楚,我道歉,但我觉得我已经把自己弄清楚了。事先谢谢。
您可以将
1 2 3 4 5 6 7 8 9 10 11 | class derived : public base { public: using base::foo; void foo(int k) { std::cout<<" Hello from foo with value ="<<k<<" "; } }; |
编辑:这个问题的答案解释了为什么没有
1 | d.base::foo(); |
向派生类添加以下语句:
1 | using Base::foo ; |
这应该符合目的。
当派生类中有一个函数与基类中的一个函数同名时,基类的所有函数都将被隐藏,并且您必须将它们显式地放在派生类的范围内,如前所述。
我们可以使用派生类对象调用基类方法。按照下面的代码。
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 | #include<iostream.h> class base { public: void fun() { cout<<"base class "; } }; class der : public base { public: void fun() { cout<<"derived class "; } }; int main() { der d1; d1.base::fun(); return 0; } |
输出将是基类。