程序在C ++中使用Vector of Derived Classes崩溃

时间:2016-01-19 10:41:52

标签: c++ vector base derived

我正在进行一个需要派生类向量的C ++项目,来检查它并从基类调用一个方法。为此,我做了:

- 编辑:

class BaseClass {
    private:
        float  attribute1;
        float  attribute2;

    public:
        constructor;
        virtual destructor;
        virtual float virtualMethod() { return (getter1() + getter2()*getter1());}

    protected:
        virtual float getter1();
        virtual float getter2();
}

派生类只有自己的属性和getter:

DerivedClassA : public BaseClass {
    private:
        std::string att1A;
        std::string att2A;
        int att3A;
    public:
        constructor;
        virtual destructor;
    protected:
        //getters for att1,att2 and att3;
}

DerivedClassB : public BaseClass {
    private:
        std::string att1B;
        std::float att2B;
        int att3B;
    public:
        constructor;
        virtual destructor;
    protected:
        //getters for att1,att2 and att3;
}

vector<BaseClass*> vector;
BaseClass *object1 = new DerivedClassA(string, string, int, float, float);
BaseClass *object2 = new DerivedClassB(string, float, float, float);
vector.push_back(object1);
vector.push_back(object2);

for (int i=0; i<vector.size(); i++) { cout << vector[i]->virtualMethod() << endl; } //virtualMethod returns a float.

期望的行为是:当我从派生类创建对象时,我给它们一些值。感兴趣的是这种情况下的最后两个浮点数。 virtualMethod调用它们的值并完成操作:firstfloat + secondfloat*firstfloat并显示返回值。

当我尝试运行它时,程序在virtualMethod调用中崩溃。难道我做错了什么?我在另一个例子中寻找了一些答案,但它们或多或少都是这样的,我甚至尝试使用迭代器而没有任何东西。谢谢!

1 个答案:

答案 0 :(得分:0)

代码不完整,远远没有按照你描述的方式编译,也许你最好发布完整的代码,而不仅仅是没有显示问题的代码段。

我看到的是,您只重写部分虚函数(使用基类实现导致派生类) VirtualMethod(),例如返回一个浮点数,std :: string没有virtualMethod()。 请记住,“int foo()”和“std :: string foo()”是两个完全不同的函数,“std :: string getter1()”不会“覆盖float getter1()”

也许您的virtualMethod可以使用模板更好地实现?