在我的程序中,我有一个抽象类,几个类继承自该抽象类。每个子类都会引入一个成员变量来存储数据。我注意到,当尝试初始化子类时,无论是使用聚合初始化还是初始值设定项列表,都会出现错误,如下所示。
struct FooBase {};
struct Foo : FooBase { int value; };
int main()
{
Foo f = {8}; // "initializer for aggregate with no elements requires explicit braces"
Foo f{8}; // same error as above
}
Run Code Online (Sandbox Code Playgroud)
我认为这是因为 Foo 继承了 FooBase 的构造函数,但我对此行为有几个问题。
Foo优先?据我了解,选项将是在初始化后设置数据(或创建 setter 方法)或显式定义Foo. 然而,特别是在最后一个问题的背景下,移动和复制构造函数会发生什么?(是否有良好的实践来确保类在继承下表现良好?)