запустить переопределенную функцию суперкласса

Как вызвать переопределенную функцию в суперклассе из функции, которая переопределяется в подклассе?

Например, в классе super есть функция с именем foo, которая переопределена в подклассе, называемом sub. Как можно заставить sub foo вызывать supers foo?

0

Решение

Вы можете использовать наследство!

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

Другие решения

Я полагаю, вы говорите о переопределениях, а не перегрузках. Квалифицированный вызов функции не будет использовать механизм динамической отправки, и вы можете контролировать, какое переопределение выбрать:

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
};
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();
}
0
По вопросам рекламы [email protected]