首页 > 解决方案 > 具有基类参数的派生类的复制构造函数的排序

问题描述

所以我想为我的派生类创建一个构造函数,我给它一个基类的实例,这样我的基类就使用输入参数进行初始化,而我的派生类遵循默认构造函数。我想出了这个(MWE):

class Derived : public Base {
Derived(){a = 0; b=3;};
Derived(Base * base): Base(*base),Derived(){};
int a;
int b;
}

但这给了我错误error: constructor delegation follows mem-initializer for 'Base'

那么我该怎么做呢?我知道一种可行的方法,但我想问是否有更好的方法,这样我在默认构造函数和另一个构造函数中没有相同的代码。

所以我知道这有效:

class Derived : public Base {
Derived(){a = 0; b=3;};
Derived(Base * base): Base(*base){a = 0; b=3;};
int a;
int b;
}

标签: c++constructorderived-class

解决方案


事情是,Derived(...):Derived(){}; 调用默认Base构造函数。因此,添加对构造函数的额外调用会Base混淆编译器——它应该如何知道你想要什么?

如果你想避免代码重复,你可以这样写:

     class Derived : public Base 
     {
        public:
        Derived()=default;
        Derived(Base * base): Base(*base){};
        int a = 0;
        int b = 3;
      }

推荐阅读