我必须在c++中为派生类编写相同的构造函数吗?

Do I have to write the same constructor for derived classes in C++?

本文关键字:构造函数 c++ 派生      更新时间:2023-10-16

我正在制作一个国际象棋游戏,我正在布局类。有一个基本的棋子职业,以及独立的车、主教、骑士、兵、国王和王后职业来继承它是有意义的。构造函数需要的唯一参数是一个布尔值"所有者"(这将是基类的成员):玩家为true, AI为false。我认为对象应该这样实例化:

//create a Rook owned by the player
Rook exampleRook = new Rook(true);
//create a Knight owned by the AI
Knight exampleKnight = new Knight(false);
似乎我必须在每个派生类中做这样的事情:
Rook(bool owner) {
    this->owner = owner;
}

似乎违反了继承的整个原则:在基类中编写一次代码,然后继承。我可能不得不在基类中编写setOwner()函数,但在构造函数中设置所有者似乎比在单独的函数(可以再次调用)中设置所有者更有意义。

可以将成员初始化放在基类构造函数的初始化列表中

Piece(bool _owner) : owner(_owner) {}

然后在派生类中直接传递给基类构造函数

Rook(bool owner) : Piece(owner) {}