2013-08-27 3 views
0

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

ex: класс super имеет функцию foo, которая переопределяется в подклассе под названием sub, как можно сделать subs foo call supers foo?

ответ

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

Я не хочу, чтобы просто быть в состоянии запустить Релевент Foo, я хочу, чтобы запустить супер, а затем другие вещи в смежном классе – user2673108

+0

Я обновил свой пост, чтобы включить базовый класс вызов метода , что позволяет делать то, что вы описываете. Надеюсь это поможет! –