也许我误解了继承是如何在这里工作的,但这是我的问题:
我有一个类 Option 和一个派生自它的类 RoomOption。我有另一个类 Room,其中包含一个 shared_ptrs 向量。在 main 中,我向该向量添加了 RoomOption。然后,使用 typeid() 检查类型,它告诉我它是一个选项。根据我的阅读, typeid 应该返回派生类型,并且 shared_ptrs 不会导致切片,所以我不确定我做错了什么。
这是代码:
房间.h:
vector<shared_ptr<Option> > options;
void addOption(shared_ptr<Option>);
shared_ptr<Option> getOption(int);
房间.cpp:
void Room::addOption(shared_ptr<Option> option){
options.push_back(option);
}
shared_ptr<Option> Room::getOption(int i){
return options[i];
}
主要的:
shared_ptr<Room> outside(new Room(0, "", ""));
outside->addOption(shared_ptr<RoomOption>(new RoomOption(0, "Go inside", hallway)));
cout<<typeid(player->getRoom()->getOption(0)).name().get()<<endl;
//This line prints "class std::tr1::shared_ptr<class Option>
我突然想到,可能在添加或获取选项时,由于返回/参数类型, RoomOption 被强制转换为选项。如果是这种情况,那么我应该如何存储一种以上类型的向量?还是我把这一切都弄错了?=\