【发布时间】:2016-02-29 09:54:46
【问题描述】:
我遇到了一个问题,即不调用重载函数,而是调用基函数。我怀疑这与项目文件之间的拆分方式有关。
在文件 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才能满足你的需求。
标签: c++ inheritance polymorphism overriding dynamic-binding