Почему вызывается метод родителя?
#include <iostream>
#include <vector>
using namespace std;
class rod{
public:
virtual void get_name(){
cout << "rod" << endl;
}
void del(){
cout << "rod" << endl;
}
void getChild(){
}
void add_child(rod r){
childs.push_back(r);
}
vector <rod> childs;
};
class child : public rod{
public:
void get_name(){
cout << "child" << endl;
}
void del(){
cout << "child" << endl;
}
};
int main()
{
rod rod;
rod.get_name();
child child;
child.get_name();
rod.add_child(child);
rod.childs[0].get_name();
return 0;
}
Классы в разных файлах
Ответы (1 шт):
Автор решения: Harry
→ Ссылка
У вас
vector <rod> childs;
т.е. элементы класса - rod. Когда вы добавляете child -- это уже некорректно, так как происходит срезка. И добавляется именно rod. Кстати, срезка происходит уже при вызове void add_child(rod r) - так как передача выполняется по значению...
Как вариант - вектор указателей
void add_child(rod& r)
{
childs.push_back(&r);
}
vector<rod*> childs;
...
rod.add_child(child);
rod.childs[0]->get_name();
Ну, или через обертку ссылки:
void add_child(rod& r)
{
childs.push_back(r);
}
vector<reference_wrapper<rod>> childs;
...
rod.add_child(child);
rod.childs[0].get().get_name();