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

C++ list of objects not working properly

本文关键字:工作 常工作 对象 列表 C++      更新时间:2023-10-16

UML Diagram : https://i.stack.imgur.com/ajsVQ.png

我的OOP老师说我们可以在C++中实现上图中类似的东西(用于实验室作业)。她说我们可以做这样的事情,这样我们就不需要两个列表类(一个用于书籍,一个用于客户)。

我开始实现它,但我被困在getFromPosition(int)(它应该在列表中的某个位置返回对象)。我正在尝试做的是将 Book 对象保存在 List 对象中(这工作正常),我以后希望能够返回/读取/修改这些保存的 Book 对象。它返回对象,但是我(可能)应该制作某种强制转换,以便我可以使用Book的方法。这可能吗?这是该方法的代码:

   Obj List::getFromPosition(int i){
            return list[i];
        }

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

由于您按值返回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

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