2012-01-22 39 views
2

我在C++中有一個小的問題,我不能完全弄清楚。傳遞繼承類來在c + +中的功能

所以,說我有STL列表派生一些類,即:

class Class1: public list<T>{ 
     virtual func1(); 

} 

class Class2 : public Class1<w/e>{ 
     func1(); 
} 

我遇到的問題是這些傳遞給函數時。我如何正確地將其中一個實例傳遞給一個函數,以便它可以使用適當的虛函數,如果可以傳遞任一類型的實例?我有一段時間沒有繼承和虛擬功能,所以我在這裏有點生疏。 (假設該函數不是類的成員函數)。

回答

6

你需要將它們傳遞給函數作爲參考

int function(Class1& obj); 

或作爲指針;

int function(Class1* obj); 

它應該只是簡單地調用正確版本的虛擬方法。

如果你通過他們沒有任何的那些

int function(Class1 obj); 

對象將被複制構造始終處於功能的Class1,並且總是會調用的Class1 :: FUNC1()

+0

所以在函數調用我認爲它是基類,並且在運行時它將決定它實際上是哪個? – Glem

+0

確切地說,因爲這兩個類都至少是一個Class1,它將允許傳入並且它決定運行時調用哪個虛擬方法。 –

+0

它總是基類。類**的每個實例都是**派生它的每個類的實例。虛擬函數的目的是允許代碼調用基類實例上的函數並調用該函數的正確版本。 –