У меня есть три класса, которые наследуются от компонента класса. В классе Компьютер Я хочу хранить объекты этих трех классов в векторе.Как хранить объекты с разными типами в векторе
class Component {
public:
double price;
virtual void show() {
std::cout << "Price: " << this->price << std::endl;
}
};
class CPU : public Component {
public:
double price;
CPU(double price){ this->price = price; }
void show() {
std::cout << "CPU Price: " << this->price << std::endl;
}
};
class RAM : public Component {
public:
double price;
RAM(double price){ this->price = price; }
void show() {
std::cout << "RAM Price: " << this->price << std::endl;
}
};
class SSD : public Component {
public:
double price;
SSD(double price){ this->price = price; }
virtual void show() {
std::cout << "RAM Price: " << this->price << std::endl;
}
};
class Computer : public Component {
public:
std::vector<Component*> vec;
void show() {
for (auto el: vec) {
std::cout << el->price << std::endl;
}
}
};
Но когда я пытаюсь сделать это, я вижу мусор там:
Computer c;
c.vec.push_back((Component*)new RAM(10));
c.show(); // garbage
std::cout << c.vec[0]->price << std::endl; // garbage
Я прочитал несколько вопросов об этом на StackOverflow, но до сих пор не понимаю, что я делаю неправильно ,
Ваш базовый класс 'Компонент' должен иметь виртуальный деструктор. Если нет, вызов 'delete' на этих указателях внутри вашего вектора приведет к неопределенному поведению. – PaulMcKenzie