如何避免在C ++中显式构造在初始化列表中继承的所有内容?

极地企鹅

当我构造对象DI时,需要在初始化列表中包括A,B和C的构造函数。有没有什么办法可以使我不需要初始化列表中的全部三个?

如果我尝试仅使用BI的构造函数来初始化D,则会因为我没有A或C的默认构造函数而出错。如果我为A和CI添加了默认的构造函数,则会出现“ i”被重新初始化而没有值的问题。

#include <iostream>
using namespace std;

class A 
{
    int i;
public:
    A(int ii) :
        i(ii)
    {}

    ~A() { }

    int getI() { return i; }
};

class B : public virtual A
{
public:
    B(int ii) :
        A(ii)
    { }

    ~B() { }
};

class C : public virtual A 
{
public:
    C(int ii) :
        A(ii)
    { }

    ~C() { }
};

class D : public B, public C 
{
public:
    D(int ii) :
        A(ii), B(ii), C(ii)
    { }
    ~D() { }

 };

int main() 
{
    D d(45);
    cout << d.getI() << endl;
}
萨胡

如果您向AB添加默认构造函数C,则的实现D会更简单。

#include <iostream>
using namespace std;

class A 
{
   int i;
   public:
   A() : i(0) {}
   A(int ii) : i(ii) {}

   ~A() { }

   int getI() { return i; }
};

class B : public virtual A
{
   public:
      B() { }
      B(int ii) : A(ii) { }

      ~B() { }
};

class C : public virtual A 
{
   public:
      C() { }
      C(int ii) : A(ii) { }

      ~C() { }
};

class D : public B, public C 
{
   public:

      // Relies on default constructors of the other classes.
      D() { }

      // Relies on the default constructors of B and C.
      D(int ii) : A(ii) { }
      ~D() { }

};

int main() 
{
   D d1(45);
   D d2;
   cout << d1.getI() << endl;
   cout << d2.getI() << endl;
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

为什么C#编译器强制在构造函数中显式初始化所有值类型的字段?

来自分类Dev

为什么显式声明的构造函数阻止使用C ++ 11初始化列表进行成员初始化?

来自分类Dev

如何在 g++-10 中结合基类显式构造函数和指定初始化?

来自分类Dev

如何在不显式调用显式构造函数的情况下初始化映射?

来自分类Dev

C ++中的初始化程序列表和类初始化。我有无参数构造函数,但仍必须使用初始化列表?

来自分类Dev

c++ 继承(无基构造函数)没有初始化列表(低于 c++ 11)?

来自分类Dev

如何在Scala中继承相同特征的两个对象中初始化val?

来自分类Dev

如何为显式重载的构造函数启用副本初始化?

来自分类Dev

C ++ 11:带“ = {}”的类内初始化不适用于显式构造函数

来自分类Dev

C ++:具有初始化列表的默认构造函数

来自分类Dev

如何避免C ++中的算术溢出?

来自分类Dev

如何避免在C ++中重复删除变量?

来自分类Dev

如何避免在C中嵌套ifs?

来自分类Dev

如何避免在C ++对象中填充?

来自分类Dev

如何避免C ++中的这种for循环混乱?

来自分类Dev

如何在C ++中避免NaN

来自分类Dev

如何在C ++ 11中初始化未初始化其构造函数中所有成员的类

来自分类Java

如何在构造函数中初始化列表?

来自分类Dev

如何避免C ++中的琐碎函子出现“无效的引用初始化”错误

来自分类Dev

如何在C ++中查找和避免未初始化的原始成员?

来自分类Dev

如何在C中初始化常量结构-避免QAC警告

来自分类Dev

我如何在初始化列表中的构造函数之后初始化变量/对象?

来自分类Dev

C ++初始化构造函数初始化器列表中的模板数组

来自分类Dev

C ++初始化字段直接与默认构造函数中的初始化列表

来自分类Dev

C ++:显式vs隐式默认初始化

来自分类Python

如何在python中获取所有已初始化对象和函数定义的列表?

来自分类Dev

C ++:如何通过初始化列表进行构造?

来自分类Dev

如何避免在c ++ 11中触发这种复制构造函数?

来自分类Dev

在类的构造函数中初始化映射时,如何避免内存泄漏?

Related 相关文章

  1. 1

    为什么C#编译器强制在构造函数中显式初始化所有值类型的字段?

  2. 2

    为什么显式声明的构造函数阻止使用C ++ 11初始化列表进行成员初始化?

  3. 3

    如何在 g++-10 中结合基类显式构造函数和指定初始化?

  4. 4

    如何在不显式调用显式构造函数的情况下初始化映射?

  5. 5

    C ++中的初始化程序列表和类初始化。我有无参数构造函数,但仍必须使用初始化列表?

  6. 6

    c++ 继承(无基构造函数)没有初始化列表(低于 c++ 11)?

  7. 7

    如何在Scala中继承相同特征的两个对象中初始化val?

  8. 8

    如何为显式重载的构造函数启用副本初始化?

  9. 9

    C ++ 11:带“ = {}”的类内初始化不适用于显式构造函数

  10. 10

    C ++:具有初始化列表的默认构造函数

  11. 11

    如何避免C ++中的算术溢出?

  12. 12

    如何避免在C ++中重复删除变量?

  13. 13

    如何避免在C中嵌套ifs?

  14. 14

    如何避免在C ++对象中填充?

  15. 15

    如何避免C ++中的这种for循环混乱?

  16. 16

    如何在C ++中避免NaN

  17. 17

    如何在C ++ 11中初始化未初始化其构造函数中所有成员的类

  18. 18

    如何在构造函数中初始化列表?

  19. 19

    如何避免C ++中的琐碎函子出现“无效的引用初始化”错误

  20. 20

    如何在C ++中查找和避免未初始化的原始成员?

  21. 21

    如何在C中初始化常量结构-避免QAC警告

  22. 22

    我如何在初始化列表中的构造函数之后初始化变量/对象?

  23. 23

    C ++初始化构造函数初始化器列表中的模板数组

  24. 24

    C ++初始化字段直接与默认构造函数中的初始化列表

  25. 25

    C ++:显式vs隐式默认初始化

  26. 26

    如何在python中获取所有已初始化对象和函数定义的列表?

  27. 27

    C ++:如何通过初始化列表进行构造?

  28. 28

    如何避免在c ++ 11中触发这种复制构造函数?

  29. 29

    在类的构造函数中初始化映射时,如何避免内存泄漏?

热门标签

归档