C ++继承,怎么解决这个?

时间:2013-07-16 16:59:07

标签: c++ inheritance

我该如何解决这个问题?我想执行适当的方法。有什么方法可以解决这个问题吗? 我想在一个循环中执行方法。

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();
}

当我有很多基类的孩子时,我不知道如何施放类型。

3 个答案:

答案 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