0

サブクラスでオーバーライドされている関数からスーパークラスでオーバーライドされた関数を呼び出すにはどうすればよいですか?

例: クラス super には foo という関数があり、これは sub というサブクラスでオーバーライドされます。

4

3 に答える 3

1

継承を活用できます!

class A
{
public:
    virtual void Foo()
    {
        // do some base class foo-ing
    }
};

class B : public A
{
public:
    virtual void Foo()
    {
        // do some subclass foo-ing

        // to call the super-class foo:
        A::Foo( );
    }
};

void main()
{
    B obj;
    obj.Foo( );

    // This is if you want to call the base class Foo directly using the instance obj
    A* handle = &obj;
    handle->Foo( );
}
于 2013-08-27T20:40:22.670 に答える
0

オーバーロードではなく、オーバーライドについて話していると思います。関数への修飾された呼び出しは、動的ディスパッチ メカニズムを使用せず、どのオーバーライドを選択するかを制御できます。

struct base {
   virtual void foo() {...}
};
struct derived : base {
   virtual void foo() {
      base::foo();           // call the override at 'base' level
      ...
   }
};

本当にオーバーロードについて話している場合は、同じメカニズムを使用するか、オーバーロードを派生型のスコープに入れることができます。

struct base {
   void foo(int);
};
struct derived : base {
   using base::foo;           // make all overloads of base::foo available here
   void foo(double);
   void f() { base::foo(1); } // alternatively qualify the function call
};
于 2013-08-27T19:07:31.767 に答える
0

You can use super::foo. For example:

#include <stdio.h>

class A
{
public:
    void foo(void)
    {
        printf("Class A\n");
    }
};

class B : public A
{
public:
    void foo(void)
    {
        printf("Class B\n");
        A::foo();
    }
};

int main ()
{
    B b;
    b.foo();
}
于 2013-08-27T19:08:30.943 に答える