也许我对继承的工作方式有所误解,但这是我的问题:
我有一个Option类,以及从它派生的RoomOption类。我还有另一个Room类,它包含一个shared_ptr的向量。在main函数中,我将一个RoomOption添加到该向量中。然后,使用typeid()检查类型,它告诉我它是一个Option。根据我所读的,typeid应该返回派生类型,并且shared_ptr不会导致切片,所以我不知道自己做错了什么。
下面是代码:
Room.h:
我有一个Option类,以及从它派生的RoomOption类。我还有另一个Room类,它包含一个shared_ptr的向量。在main函数中,我将一个RoomOption添加到该向量中。然后,使用typeid()检查类型,它告诉我它是一个Option。根据我所读的,typeid应该返回派生类型,并且shared_ptr不会导致切片,所以我不知道自己做错了什么。
下面是代码:
Room.h:
vector<shared_ptr<Option> > options;
void addOption(shared_ptr<Option>);
shared_ptr<Option> getOption(int);
Room.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被转换为Option。如果是这样,那么我该如何存储多种类型的向量呢?还是我理解错了? =\