Я столкнулся с проблемой, когда перегруженная функция не вызывается, а вместо нее вызывается базовая функция. Я подозреваю, что это связано с тем, как вещи распределяются между файлами проекта.
В файлах obj1.h / obj1.cpp у меня что-то вроде этого
class obj1{
public:
void print();
};
void obj1::print(){
cout << "obj1::print()";
}
В файлах obj2.h / obj2.cpp у меня что-то вроде этого:
#include "obj1.h"
class obj2 : public obj1{
public:
void print();
};
void obj2::print(){
cout << "obj2::print()";
}
В отдельных файлах делаю примерно так:
#include "obj1.h"
class obj3{
public:
vector<obj1*> objlist;
void printobjs();
void addobj(obj1* o);
};
void obj3::printobjs(){
vector<obj1*>::iterator it;
for (it=objList.begin(); it < objList.end(); it++)
(*it)->print();
void obj3::addobj(obj1* o){
objlist.push_back(o);
}
Затем в другом файле:
#include "obj2.h"
obj3 o3;
main(){
obj2* newobj2;
newobj2 = new obj2();
o3.addobj(newobj2);
o3.printobjs();
Моя проблема в том, что printobjs () вызывает вызов obj1.print (). (Я немного поискал и прочитал несколько десятков сообщений с проблемами перегрузки, но не нашел похожей проблемы)
Может ли кто-нибудь указать мне в этом правильном направлении? Спасибо!
virtual
для того, что вы хотите. - person πάντα ῥεῖ   schedule 26.11.2015