gpt4 book ai didi

c++ - 访问其对象位于模板类 vector 中的特定子类函数

转载 作者:行者123 更新时间:2023-11-28 06:14:49 29 4
gpt4 key购买 nike

我是新来的,希望你能帮助我! :)

我的问题如下:

首先,我有这个类图:

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(); 似乎无法处理它:Compiler says that

getThrust() is not a member of 'RocketPart'

我明白了,但是怎么解决呢?如何在 Rocket 中声明一个 vector ,它能够包含 RocketPart 的所有子类,在 main 中如何调用 calcTWR (),以便它实际上返回总的推力,而不管 vector 的内容如何?

请保持简单,我还是个初学者! ;)

最佳答案

我假设 m_parts 是指向公共(public)基类的指针 vector ?

然后你需要downcast到正确的类(class),比如

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/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com