我正在进行一个需要派生类向量的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
调用中崩溃。难道我做错了什么?我在另一个例子中寻找了一些答案,但它们或多或少都是这样的,我甚至尝试使用迭代器而没有任何东西。谢谢!
答案 0 :(得分:0)
代码不完整,远远没有按照你描述的方式编译,也许你最好发布完整的代码,而不仅仅是没有显示问题的代码段。
我看到的是,您只重写部分虚函数(使用基类实现导致派生类) VirtualMethod(),例如返回一个浮点数,std :: string没有virtualMethod()。 请记住,“int foo()”和“std :: string foo()”是两个完全不同的函数,“std :: string getter1()”不会“覆盖float getter1()”
也许您的virtualMethod可以使用模板更好地实现?