2012-04-11 37 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()函數。如果在函數1中,我想調用基類的do()函數呢?如果我將function1稱爲 function1(dynamic_cast<Base*>(derived_obj_ptr)),它會起作用嗎?

+3

'this'和'do'是相當不幸的名字標識... – 2012-04-11 00:19:37

+0

好問題,我不認爲這是可能的。 – 2012-04-11 00:19:53

回答

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 

(見http://ideone.com/FKFj8

相關問題