如何在不同类的容器上使用多态方法

时间:2013-08-03 22:47:53

标签: c++ polymorphism

我有两个类,如下所示:

class Plot
{
protected:
    virtual void plot() = 0;
}

class DynamicPlot : public Plot
{
public:
    virtual void update_real_time();
    virtual void plot();
}

class StaticPlot : public Plot
{
public:
    virtual void plot();
}

像这样的容器:

std::vector<Plot*> plot_vector;

plot_vector.append(new DynamicPlot());
plot_vector.append(new DynamicPlot());
plot_vector.append(new StaticPlot());
plot_vector.append(new StaticPlot());

如果实例的类型是DynamicPlot,我想调用update_real_time()。

foreach(Plot *plot, plot_vector)
{
    if(/* plot type == DynamicPlot */)
    { 
        plot->update_real_time();
    }
    plot->plot();
}

我应该在这里使用哪种模式?将一个空的update_real_time()方法添加到StaticPlot类中似乎不是一个好的解决方案。

编辑:上面的代码不是真的。我只是写它是为了告诉我的问题,认为这是一个伪代码。我没有费心去编写访问限定符。在我的真实代码中,我没有私有继承或切片问题。我在向量中保留实例的指针。抱歉,误解了。无论如何我正在修理它。

1 个答案:

答案 0 :(得分:1)

您需要使用dynamic_cast

foreach(Plot *plot, plot_vector)
{
    DynamicPlot* p = dynamic_cast<DynamicPlot*>(plot);
    if(p)
    { 
        p->update_real_time();
    }
    plot->plot();
}

除了foreach不是C ++之外,所以你也必须使用实际代码。