我如何调用父函数从一个派生类使用c++ ?例如,我有一个类叫parent,还有一个类叫child,它是从parent派生的。在 每个类都有一个打印函数。在child的print函数的定义中,我想调用parents的print函数。我该怎么做呢?


当前回答

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();
}

参考例子。

其他回答

在MSVC中,有一个微软特定的关键字:__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)
   }
};

如果你的基类叫base,你的函数叫FooBar(),你可以直接使用base::FooBar()调用它

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

void ChildOfBase::FooBar()
{
  Base::FooBar();
}

我冒着风险说一句显而易见的话:你调用函数,如果它是在基类中定义的,它就会自动在派生类中可用(除非它是私有的)。

如果在派生类中存在具有相同签名的函数,可以通过在基类的名称后面加上两个冒号base_class::foo(…)来消除歧义。您应该注意到,与Java和c#不同,c++没有“基类”(super或base)的关键字,因为c++支持多重继承,这可能会导致歧义。

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
};
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();
}

参考例子。

使用父范围解析操作符调用父方法。

父::方法()

class Primate {
public:
    void whatAmI(){
        cout << "I am of Primate order";
    }
};

class Human : public Primate{
public:
    void whatAmI(){
        cout << "I am of Human species";
    }
    void whatIsMyOrder(){
        Primate::whatAmI(); // <-- SCOPE RESOLUTION OPERATOR
    }
};