C++对象列表无法正常工作
C++ list of objects not working properly
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
。
相关文章:
- QSqlquery prepare()和bindvalue()不工作
- 导入库可以跨dll版本工作吗
- 以螺旋方式打印矩阵的程序.(工作不好)
- 对象指针在c++中是如何工作的
- 为什么在Windows上的VS 2019和Clang 9中"size_t"在没有标题的情况下工作
- VSOMEIP-2个设备之间的通信(TCP/UDP)不工作
- 为字符串中每 N 个字符插入空格的函数没有按照我认为的方式工作?
- C++为线程工作动态地分割例程
- 为什么我的 std::ref 无法按预期工作?
- 布尔比较运算符是如何在C++中工作的
- SampleConsensusPrerejective(ext.RANSAC)是如何真正工作的
- 不确定要在我的main中放入什么才能使我的代码正常工作
- 为什么std::condition_variable notify_all的工作速度比notify_one快(对于随机请
- <<操作员在下面的行中工作
- 有人能解释一下为什么下界是这样工作的吗C++的
- ExtractIconEx:可以工作,但偶尔会崩溃
- C++中的memset函数工作不正常
- 为什么STD ::计数将常数传递给Lambda,而不是在弦上工作时而不是字符
- sdl软件渲染器不工作,工作在硬件加速的一个
- C++程序已停止工作-求解常微分方程