声明与实例化

use*_*652 2 c++ oop

来自Java,我对下面的代码有困难.在我的理解中,b仅在第3行声明但未实例化.

什么是在A类中创建B实例的教科书方式?

class A {
  private:
    B b;
  public:
    A() { 
      //instantiate b here?
    }
};
Run Code Online (Sandbox Code Playgroud)

编辑:如果B没有默认构造函数怎么办?

jua*_*nza 9

例如,您可以bA构造函数的初始化列表中显式初始化

class A {
  B b; // private
 public:
  A : b() {} // the compiler provides the equivalent of this if you don't
}; 
Run Code Online (Sandbox Code Playgroud)

但是,b无论如何都会自动实例化.如果你需要B使用非默认构造函数构建一个,或者如果B不能默认初始化,则上述内容是有意义的:

class A {
  B b; // private
 public:
  A : b(someParam) {}
};
Run Code Online (Sandbox Code Playgroud)

在构造函数的初始化列表中正确初始化可能是不可能的,在这种情况下,可以在构造函数的主体中完成赋值:

class A {
  B b; // private
 public:
  A {
    b = somethingComplicated...; // assigns new value to default constructed B.
  }
};
Run Code Online (Sandbox Code Playgroud)