UML图:http://i.imgur.com/en0Nf.png
我的OOP老师说我们可以在C ++中实现类似于上图的那样(用于实验室分配)。她说我们可以这样做,所以我们不需要两个List类(一个用于Books,一个用于Clients)。
我开始实现它并且我坚持使用getFromPosition(int)(它应该返回列表中某个位置的对象)。我想要做的是将一个Book对象保存在List对象中(这很好),我后来希望能够返回/读取/修改这些保存的Book对象。它返回对象,但后来我(可能) )应该制作某种类型的演员表,以便我可以使用本书的方法。这甚至可能吗? 这是方法的代码:
Obj List::getFromPosition(int i){
return list[i];
}
我希望我提供足够的信息(这是我的第一个问题)。 提前谢谢!
答案 0 :(得分:3)
由于你按值返回Obj
,我猜你在内部持有Obj
个对象的集合,而不是指针。
哪个错了。您遇到对象切片。
首先,您应该在内部保留指针或智能指针,并返回Obj*
或SmartPtr<Obj>
。
其次,是否需要演员取决于。
如果在派生类之间有一个通用方法,它应该可以放在基类中。如果没有,你可能需要演员。
以下是我如何做粗剪:
class List
{
std::vector<Obj*> _objects;
public:
Obj* getFromPosition(int i)
{
return _objects[i];
}
};
//...
List list;
//...
Obj* obj = list.getFromPosition(0);
obj->commonMethod(); //common method is virtual and a member of Obj
(dynamic_cast<Book*>(obj))->bookMethod(); //book method is only available for Book class
答案 1 :(得分:0)
只需让您的函数返回Book
。