请耐心等待,我是 C++ 的新手。
这是我的项目。我想从本质上创建一个简单的国际象棋游戏。
我有一个基类 gamePiece,我认为它最终会成为一个抽象类(但现在不是)
基类 gamePiece 中有一堆数据成员:colorOfPiece、rankOfPiece、fileOfPiece 等。它还有一个函数 void displayPieceInfo(),它通过 cout 在控制台上简单地显示所有这些值。
我计划从这个派生类中获取一些派生类。现在我有一个“车”子类。
我想在单个 vector 中添加各种类型的片段,以便稍后可以使用迭代器遍历它。
这是我遇到的问题。
vector<gamePiece> vectorOfAllGamePieces;
vector<gamePiece>::iterator itGamePieces;
我将 Rook 作为第一个元素 push_back 到 vector 中。所有的构造函数看起来都运行良好,正在初始化变量。然而,当我尝试在第一个元素上运行显示函数时,字符串为空/未初始化。
itGamePieces=vectorOfAllGamePieces.begin();
itGamePieces->displayPieceInfo();
如果我改为将通用 gamePiece 插入 vector ,一切都会正确显示。
我是否可以使用混合类型对象的这种 vector ——例如,派生类的对象、父类的对象、从同一父类派生的第二类的对象
如果是这样,为什么你认为数据成员的值没有正确显示,即使我已经在构造函数中设置了它们?
最佳答案
不是真的,因为切片。当您将派生对象添加到 vector<gamePiece>
, 它被切成薄片并且 gamePiece
对象实际上被添加到 vector 中。
您需要使用(智能)指针 vector 。
关于c++ - 我有一个基类对象和派生类对象的 vector ,但我无法访问存储在 vector 中的派生对象继承的数据成员,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14925164/