使用扩展类和派生类的方法

时间:2013-12-03 13:37:01

标签: c++

假设我有一个名为Foo的类和一个名为Bar的类,它扩展了Foo。 我通过指针将它们存储在矢量中:

class Foo {

    void draw() {
        // stuff
    }   

};

class Bar() : public Foo {

    void draw() {
        // stuff
    }

}


vector<Foo*> someVector;
// put types of Foo and Bar in the vector

for (int i = 0; i < someVector.size(); i++) {
    Foo &f = someVector[i];
    // if it's of type bar it should
    // use that draw method
    f.draw();
}

现在它将始终使用Foo的draw方法。但是,如果它是Bar类型的话,我怎么能让它使用Bar的draw方法呢?

编辑: 感谢Joe Z,我知道现在可以通过虚拟完成。但是,如果它是'Bar'类型并且我想使用'Foo'的绘制方法呢?现在有了虚拟,它总是选择'Bar'方法。

1 个答案:

答案 0 :(得分:4)

您需要使用virtual方法。这告诉编译器使用多态调度(即在运行时查找正确的调用方法)。

class Foo {

    virtual void draw() {
        // stuff
    }   

};

class Bar : public Foo {

    virtual void draw() {
        // stuff
    }
};

这看起来像是一个解释概念的合理教程:http://www.learncpp.com/cpp-tutorial/122-virtual-functions/