默认构造函数由派生类调用
Default constructor being called by derived class
假设我正在实现两人国际象棋的游戏。这是为简单起见的我实施的缩短版本,省略了任何无关的细节。我有一个Piece
类,从中得出各种零件。在此示例中,我只包括King
件。
extern enum piece_t;
extern enum color_t;
class Piece
{
public:
Piece() {}
Piece(piece_t t, char r, color_t c)
: type(t), representation(r), color(white)
{}
char getRepresentation()
{ return representation; }
protected:
piece_t type;
color_t color;
char representation;
};
class King : public Piece
{
public:
King() {}
King(color_t color) { Piece(K,'K',color); }
};
在另一个类中,Board
我定义了成员来实例King
class Board
{
public:
Board() { king = King(white); }
friend ostream& operator<<(ostream&, const Board&);
private:
King king;
};
这是主要的示例:
int main(void)
{
Board game;
std::cout << game;
return 0;
}
问题是默认构造函数正在调用。我知道这发生了,因为我的king
对象是用垃圾初始化的。
我的意图是要在Board
的构造函数中初始化king
:
Board() { king = King(white); }
从这里我想要King的构造函数,该构造函数将调用color_t
参数,从而将Piece
的构造函数称为So:
King(color_t color) { Piece(K, 'K', color); }
这不是发生的事情。默认构造函数(King
或Piece
或两者都)。king
的默认构造函数是否在Board
的私有字段中声明?如果是这种情况,我该如何更改代码以使king
调用适当的构造函数?
您的语法错误(这是合法的,但没有您的想法)。您需要在 initizaton list 中调用基类构造函数:
King(color_t color) : Piece(K,'K',color) {}
当您进入构造函数时,所有基类和数据成员已经初始化。如果您不明确初始化它们,则将获得默认初始化(这意味着在基类中调用默认构造函数)。
在您的代码中,您正在实例化本地的匿名Piece
对象。
相关文章:
- 为什么使用 "this" 指针调用派生成员函数?
- 调用派生类成员函数
- 从基类实例调用派生类方法而不进行强制转换
- 从基类 (C++) 调用派生类中的非虚函数
- 在将派生类指针类型转换为派生类指针后,从基类指针调用派生类函数
- 如何从 Gtk::窗口调用派生对象的析构函数
- 在dynamic_pointer_cast后调用派生类的构造函数
- 从 Base 引用对象调用派生类的成员
- 有没有办法在没有虚拟的情况下使用基类指针调用派生类函数
- 在 c++ 中,如何使用向量调用派生类?
- C++通过 const 引用传递时不调用派生类函数
- 哪个基类调用派生重写的方法?
- 如何从包含基类指针的容器中调用派生类函数(基于其类型)?
- 如何调用派生类之一
- 从基类数组调用派生函数
- 从具有泛型返回类型的 crtp 基类调用派生类中的函数
- 基类如何调用派生类在 c++ 中传递的闭包?
- 通过在基类中虚拟调用派生类中的函数来访问派生类中的函数
- 如何在另一个类的向量中调用派生类的析构函数
- 通过reinterpret_casting方法指针从指针调用派生类的方法。这是 UB 吗?