C ++对象列表无法正常工作

时间:2012-05-03 20:16:12

标签: c++ oop casting

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];
        }

我希望我提供足够的信息(这是我的第一个问题)。 提前谢谢!

2 个答案:

答案 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