2012-09-21 20 views
2

我有以下問題。我忙於在C++中編寫繼承結構。簡而言之,這就是我想要做的。 A類是基類,B類和C類是繼承類。 B類和C類分別具有不同且獨特的成員功能。現在中調用繼承的類特定功能在C++

,使用升壓智能指針庫我使類類型A的共享指針的向量如下:

class A{ 
    A(); 
    virtual print(); 
} 

class B : public A{ 
    B(); 
    virtual print(); 
} 

class C{ 
    C(); 
    virtual print(); 
    void uniqueFunc(); 
} 

int main(){ 

    vector<shared_ptr<A> > myA; 
    shared_ptr<B> myB; 
    shared_ptr<C> myC; 

    myA.push_back(myB); 
    myA.push_back(myC); 

} 

現在我有用於檢查部件的載體內的類型的方法。這不是問題。我的問題是,我該怎麼稱呼uniqueFunc爲載體中的一類C類的成員。我必須沮喪嗎?或者我必須創建虛擬功能。不過,我確實需要uniqueFunc是唯一的C類。我想,以避免創建成員的副本,而是直接更改成員的載體。

+0

我假設你的意思中,然後從A或B繼承在你的例子? –

回答

3

您可能需要向下轉換boost::shared_ptr<C>A創建一個虛擬功能。

假設你想垂頭喪氣,你可以使用Boost的pointer cast functions

boost::static_pointer_cast<C>(myA.back())->uniqueFunc(); 

(或使用dynamic_pointer_cast<C>如果你需要動態類型檢查。)

+0

謝謝!工作很棒! :) – rameezk