我是新来的,希望您能帮助我! :)
我的问题如下:
首先,我有这个类图:
diagram
此外,我还有另一个类Rocket
,其中有一个vector
,其中应包含所有火箭零件作为生成的指针。
我的问题是Rocket
类包含3种计算方法,例如:
template<typename T>
double Rocket<T>::calcTWR(){
double thrust = 0;
for (int i = 0; i < m_parts.size();i++){
thrust += m_parts[i]->getThrust();
}
return thrust;
}
是的,我使用了模板,因为我不确定如何处理所有这些子类,因此我认为模板可能适合此处。另外,这就是问题所在,调用
rocket.calcTWR();
可以处理它似乎不起作用:编译器说getThrust()不是'RocketPart'的成员
我很了解,但是如何解决呢?我如何在
Rocket
中声明一个向量,该向量能够包含RocketPart
的所有子类,并且在main
中如何调用calcTWR()
,以便实际上返回总的thrust
,而无论vector
的内容?请保持简单,我仍然是初学者! ;)
最佳答案
我假设m_parts
是指向通用基类的指针的向量?
然后您需要downcast到正确的类,例如
static_cast<ActualClassThisIs*>(m_parts[i])->getThrust();
请注意,这仅在类从基类继承时才有效。另请注意,如果实际的类不是您要强制转换的类,则它将不起作用。然后,您可能必须使用
dynamic_cast
并检查nullptr
:if (dynamic_cast<ActualClassThisIs*>(m_parts[i]) != nullptr)
dynamic_cast<ActualClassThisIs*>(m_parts[i])->getThrust();
关于c++ - 访问其对象在模板类 vector 中的特定子类函数,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/30547632/