运行超类重写函数

时间:2013-08-27 19:04:31

标签: c++ inheritance subclass super

如何从覆盖在sublcass中的函数调用超类中的重写函数?

ex:class super有一个名为foo的函数,它在一个名为sub的子类中重写,如何让subs foo调用supers foo?

3 个答案:

答案 0 :(得分: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( );
}

答案 1 :(得分: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
};

答案 2 :(得分:0)

你可以使用super :: foo。例如:

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