1

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

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
}

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

4

3 回答 3

1

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

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
}

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

于 2012-12-07T12:04:52.177 回答
1

如果要显式初始化一个对象,只需将其添加到构造函数初始化器列表中:

struct Foo
{
    Foo(int arg) { ... }
};

struct Bar
{
    Foo foo;

    Bar()
        : foo(123)  // Initialize `foo` with an argument
    { ... }
};
于 2012-12-07T12:05:02.867 回答
1

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

于 2012-12-07T12:12:37.890 回答