2017-01-24 122 views
0

想象我有一個類A,B & C均從A,B繼承」從B.C++調用子功能上父的矢量對象

乙繼承」具有一個成員變量,其是A的指針的矢量 我創建了一個名爲bP的新B,並在其中存儲了一個新的C,名爲c。 現在我想打電話給c.f(),這個函數只適用於C類型。 我打電話給bP[0]->f()。 我得到的錯誤是「f():不是'A'的成員」。 我可以從父對象的矢量調用子函數嗎?

+1

請提供[mcve];這樣我們不必「想象」,我們可以看看實際的代碼。 –

+0

如果指針指向子對象,是的。你可以做'static_cast (bP [0]) - > f'。但是請下次嘗試包含一些代碼,這會讓您更容易理解您正在嘗試執行的操作。 – George

+0

什麼是B''?請提供代碼 – instance

回答

0
I believe your code structure is something like this : 

class A 
{ 
}; 

class B: public A 
{ 
}; 

class C: public A 
{ 
}; 

class B': public B 
{ 
    public: 
      vector<A*> vec; 
      B(class C* c) 
      { 
       vec.push_back(c); 
      } 
}; 

int main() 
{ 
    C *c = new C(); 
    B'* b = B'(c); 
    C* c = static_cast<C*>(((b->vec).front())->f()); //Downcasting 
    return; 
}