类默认构造函数中的 C++ 类

c++ class in a class default constructor

本文关键字:C++ 构造函数 默认      更新时间:2023-10-16

我关心的是默认构造函数及其初始化列表。在一个简单的例子中,它很清楚,比如:

class A
{
  protected:
       double d1;
       //classB obj1; //how to initialize this one in a default constructor?
  public:
       A (double x = 0.0): d1(x){} //constructor
       virtual ~A(void) {};
  //something
}

但是如何初始化具有大量成员的类B的对象呢?或者通常如何在默认构造函数中初始化某种具有大量或未知参数要初始化的类型?

您可以通过调用其默认构造函数或其他构造函数来初始化 obj1 member initializer list

class A
{
  protected:
       double d1;
       classB obj1; 
       pthread_mutex_t m_mutex;
  public:
       A (double x = 0.0): d1(x), obj1(), m_mutex(PTHREAD_MUTEX_INITIALIZER) {} 
       virtual ~A(void) {}
       //something
}

如果类B有你描述的大成员,你可能会打破类设计的规则 - one class does one thing。您可能希望将类 B 分解为小型独立类。

如果要

显式初始化对象,只需将其添加到构造函数初始值设定项列表中:

struct Foo
{
    Foo(int arg) { ... }
};
struct Bar
{
    Foo foo;
    Bar()
        : foo(123)  // Initialize `foo` with an argument
    { ... }
};

如果成员可以通过其默认构造函数初始化,那么它甚至不必在初始化列表中,因为默认构造函数没有参数。 将调用默认构造函数。 基元没有默认构造函数,因此如果要初始化它们,它们必须位于初始化列表中。