2012-04-11 4 views
0

に入力引数である基底クラスの仮想関数を呼び出す方法を、私はこのシナリオでは機能C++を使用して

struct Base { 
    virtual void stuff(/*base stuff*/); 
}; 

struct Derived : public Base { 
    void stuff(/*derived stuff*/); 
}; 

void function1(Derived& obj){ 
    obj.stuff(); 
} 

を持って、関数1は、の派生DO()関数を使用します。 function1で、代わりにBaseクラスのdo()関数を呼び出したいのですが? function1を function1(dynamic_cast<Base*>(derived_obj_ptr))と呼んでも機能しますか?

+3

'this'と' do'ある(http://ideone.com/FKFj8を参照してください)非常に残念な識別子の名前... –

+0

良い質問ですが、私はそれは可能だとは思いません。 –

答えて

7

あなたのコード内のエラーを多数修正した後、これは確かに達成可能である:

#include <iostream> 

class Base { 
public: 
    virtual void foo() { std::cout << "Base\n"; } 
}; 

class Derived : public Base { 
public: 
    void foo() { std::cout << "Derived\n"; } 
}; 

void function1(Derived *p) { 
    p->Base::foo(); // <<<<< Here is the magic >>>>> 
} 

int main() { 
    Derived d; 
    function1(&d); 
} 

出力:

Base 

関連する問題