如何从派生类函数调用父类函数?

我如何使用C ++从派生类调用父函数? 例如,我有一个名为parent的类和一个从父类派生的称为child的类。 每class有一个printfunction。 在定义孩子的打印function时,我想打电话给家长打印function。 我怎么去做这个?

我将冒风险说明这个显而易见的事情:你调用函数,如果它在基类中被定义,它就会在派生类中自动提供(除非它是private )。

如果在派生类中有一个具有相同签名的函数,则可以通过添加基类名称和两个冒号base_class::foo(...)来消除歧义。 您应该注意,与Java和C#不同,C ++没有“基类”( superbase )的关键字,因为C ++支持多重inheritance ,这可能会导致歧义。

 class left { public: void foo(); }; class right { public: void foo(); }; class bottom : public left, public right { public: void foo() { //base::foo();// ambiguous left::foo(); right::foo(); // and when foo() is not called for 'this': bottom b; b.left::foo(); // calls b.foo() from 'left' b.right::foo(); // call b.foo() from 'right' } }; 

顺便说一句,你不能直接从同一个类派生两次,因为没有办法引用另一个基类。

 class bottom : public left, public left { // Illegal }; 

做这样的事情:

 void child::print(int x) { parent::print(x); } 

如果你的基类叫Base ,而你的函数叫做FooBar()你可以直接使用Base::FooBar()

 void Base::FooBar() { printf("in Base\n"); } void ChildOfBase::FooBar() { Base::FooBar(); } 

在MSVC中有一个Microsoft特定的关键字: __super


MSDN:允许你明确声明你正在调用一个你正在重写的函数的基类实现。

 // deriv_super.cpp // compile with: /c struct B1 { void mf(int) {} }; struct B2 { void mf(short) {} void mf(char) {} }; struct D : B1, B2 { void mf(short) { __super::mf(1); // Calls B1::mf(int) __super::mf('s'); // Calls B2::mf(char) } }; 

如果基类成员函数的访问修饰符被保护或公开,您可以从派生类中调用基类的成员函数。 可以从派生成员函数调用基类非虚拟和虚拟成员函数。 请参阅该程序。

 #include<iostream> using namespace std; class Parent { protected: virtual void fun(int i) { cout<<"Parent::fun functionality write here"<<endl; } void fun1(int i) { cout<<"Parent::fun1 functionality write here"<<endl; } void fun2() { cout<<"Parent::fun3 functionality write here"<<endl; } }; class Child:public Parent { public: virtual void fun(int i) { cout<<"Child::fun partial functionality write here"<<endl; Parent::fun(++i); Parent::fun2(); } void fun1(int i) { cout<<"Child::fun1 partial functionality write here"<<endl; Parent::fun1(++i); } }; int main() { Child d1; d1.fun(1); d1.fun1(2); return 0; } 

输出:

 $ g++ base_function_call_from_derived.cpp $ ./a.out Child::fun partial functionality write here Parent::fun functionality write here Parent::fun3 functionality write here Child::fun1 partial functionality write here Parent::fun1 functionality write here 
 struct a{ int x; struct son{ a* _parent; void test(){ _parent->x=1; //success } }_son; }_a; int main(){ _a._son._parent=&_a; _a._son.test(); } 

参考例子。