1

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

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

4

2 回答 2

3

由于您返回的是Obj按值,我猜在内部您持有Obj对象集合,而不是指针。

这是错误的。您遇到了对象切片

首先,您应该在内部保留指针或智能指针,并返回 anObj*或 a 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
于 2012-05-03T20:19:19.923 回答
0

只需让您的函数返回一个Book.

于 2012-05-03T20:19:27.207 回答