Я нахожусь в проекте C++, которому нужен вектор классов Derived, чтобы перебрать его и вызвать метод из базового класса. Для этого я сделал:Программа сбоев с вектором производных классов в C++
--edit:
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();
}
Производные классы только имеют свои собственные атрибуты и методы получения:
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.
Желаемое поведение: когда я создаю объект из Производные классы я даю им некоторые значения. Интересными являются 2 последних поплавка в этом случае. Виртуальный метод вызывает их значения и завершает операцию: firstfloat + secondfloat*firstfloat
и показывает возвращаемое значение.
Когда я пытаюсь запустить его, программа выходит из строя в вызове virtualMethod
. Я делаю что-то неправильно? Я искал некоторые ответы в других примерах, но они более или менее похожи на это, и я даже пытаюсь использовать итератор и ничего. Благодаря!
Я думаю, что ключ к решению здесь ... исправьте меня, если я ошибаюсь ... в коде, который вы не показываете (virtualMethod()). – Robinson
Измените свой вопрос с помощью определений 'virtualMethod' в' BaseClass', 'DerivedClassA' и' DerivedClassB'. – TartanLlama
Код virtualMethod только: return (getatribute1() + getatribute2() * getatribute3()), но это не имеет значения. Я заменил «return (0.2)» и ничего –