-2
對於我的項目,我有這樣的階級結構:C++矢量基類和繼承
class Base
{
enum class type
{
Derived1,
Derived2
}
int getType() {return type;};
type type;
//general methods & attributes
}
class Derived1 : public Base
{
//specific methods & attributes
void uniqueSpecificMethodOfDerived1();
}
class Derived2 : public Base
{
//specific methods & attributes
void uniqueSpecificMethodOfDerived2();
}
class Core
{
vector<unique_ptr<Base>> tab;
void iterate();
}
void Core::iterate()
{
tab.emplace_back(new Derived1());
tab.emplace_back(new Derived2());
vector<unique_ptr<Base>>::iterator it;
for (it = tab.begin(); it != tab.end(); ++it)
{
if ((*it)->getType())
(*it)->uniqueSpecificMethodOfDerived1(); //unknow function Can't resolve 'uniqueSpecificMethodOfDerived1()'
if ((*it)->getType())
(*it)->uniqueSpecificMethodOfDerived2(); //unknow function Can't resolve 'uniqueSpecificMethodOfDerived1()'
}
}
我的問題是我不能達到這個矢量派生類的具體方法。我不想使用多態,因爲這個函數是完全不同的,而其他派生類不需要。
我該怎麼做?
如果這些函數完全不同,爲什麼你將這些不同的對象填充到同一個向量中? – Quentin
你至少需要將指針向下轉換爲正確的類型(使用'dynamic_cast') - 'Base'類顯然對它的子類的方法一無所知(因爲它們不是虛擬的)[我假設你有實際的繼承 - 也是這種做法的方式有損於繼承的目的] – UnholySheep
因爲這些派生類共享主類給出的許多方法和屬性。真的,他們是同一類型的對象。 Entity是我的基類,Enemy/Player/Shot是派生類Entity –