gpt4 book ai didi

c++ - 如何初始化作为另一个类的成员变量的基类对象?

转载 作者:行者123 更新时间:2023-11-28 04:10:44 25 4
gpt4 key购买 nike

我想不出一个不言自明的简短标题,这是我的问题。我有一个基类(Piece)和派生类(Pawn)。为了创建 Piece 对象,我使用参数调用派生类的构造函数。它工作正常。但是现在,我正在定义另一个名为 Board 的类,这个类将包含 Piece 对象数组。 问题是,我想创建一个 Board 对象,但不知道如何在其中正确初始化 Base 类对象。因为我曾经使用派生类构造函数初始化基类对象,但现在我没有那个选项。我将如何编写 Board 类的构造函数?

class Piece {
public:
Coordinates coor;
whose color;
Piece(Coordinates a, enum whose c, char n);
};

class Pawn : public Piece {
public:
Pawn(Coordinates a, enum whose c, char n) :Piece(a, c, n){}
};

class Board {
private:
Piece node[32];

public:
Board(); //How to write the constructor?
void show_board();

};

最佳答案

首先,如果要存储派生对象,则不得声明基类型对象数组。你最终会得到 Object Slicing .

要解决这个问题,您需要存储指向基类对象的指针数组:

Piece *board[9][9]; 

并在构造函数中初始化,例如:

Board::Board() : board() // this initializes all slots of "board" to nullptr.
{
// create new Piece or derived objects in the array slots you want
board[4][2] = new Pawn(x1, y1, z1);
board[7][0] = new Pawn(x2, y2, z2);
...
}

关于c++ - 如何初始化作为另一个类的成员变量的基类对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57841427/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com