我在这里面临一个相对棘手的情况,乍一看似乎很容易。在将这三个成员从父类移动Parent
到其子类Child
之后,我似乎不再能够利用默认构造函数。
为什么?有没有一种方法可以不用专门实现 Child(...) 构造函数。一开始似乎违反直觉...实际上我会认为第一个示例是它失败的地方(认为 Child 类的构造函数会掩盖其父类的构造函数)。
struct Parent
{
std::string mText;
int mInt;
bool mBool;
};
struct Child : public Parent
{
};
Child test{ "", 0, false}; // Compiles
但是在后一种情况下,如果成员在子类中定义,则不会创建默认构造函数。
struct Parent
{
};
struct Child : public Parent
{
std::string mText;
int mInt;
bool mBool;
};
Child test{ "", 0, false}; // error C2078: too many initializers
聚合初始化中的基本子对象需要空括号。(在这种情况下,默认构造函数无关紧要,两者都是聚合Parent
和Child
聚合初始化。)
但是,如果对象有一个没有任何成员的子聚合(一个空结构,或一个只包含静态成员的结构),则不允许大括号省略,并且
{}
必须使用空的嵌套列表。
Child test{ {}, "", 0, false};
// ^^
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句