c++ - 我有一个基类对象和派生类对象的 vector ,但我无法访问存储在 vector 中的派生对象继承的数据成员

标签 c++ inheritance vector

请耐心等待,我是 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/

相关文章:

c++ - JNI - 返回在 native 函数中创建并由另一个 native 函数使用的 jobject

python - Python中的继承和内部类?

matrix - 使用向量作为列索引到矩阵的行中,在 Octave 中

r - 向量,其元素之和等于 R 中的值

c++ - 将对象从 vector 传递到另一个类

c++ - std::set 删除复杂性异常?

c++ - 带有模板叶类的奇怪的重复模板

c++ - 递归函数破坏一般树c++

c++ - 基于继承的类型参数更改父虚函数的行为

java - Java 面试后的反射(reflection) : Inheritance and polymorphism