我该如何解决这个问题?我想执行适当的方法。有什么方法可以解决这个问题吗? 我想在一个循环中执行方法。
class Base
{
public:
void something() {}
};
class Child : public Base
{
public:
void something() {}
};
class SecondChild : public Base
{
public:
void something() {}
};
std::vector<Base*> vbase;
Child * tmp = new Child();
vbase.push_back((Base*) tmp);
SecondChild * tmp2 = new SecondChild();
vbase.push_back((Base*) tmp);
for (std::vector<Base*>::iterator it = vbase.begin(); it != vbase.end(); it++)
{
//here's problem, I want to execute proper method "something", but only I can do is execute Base::something;
(*it)->something();
}
当我有很多基类的孩子时,我不知道如何施放类型。
答案 0 :(得分:10)
有几件事。
一,你不需要把东西投射到(Base*)
。隐式转换将为您完成此操作。其次,如果您将函数定义为virtual
,它将为您调用适当的函数。
答案 1 :(得分:4)
您需要在基类中将方法声明为virtual
。
答案 2 :(得分:3)
解决方案是让something()
成为virtual
函数。
class Base {
public:
virtual void something() {}
};
...
[in a function]
Base *p = new Child;
p->something(); //calls Child's something