c ++如何编写构造函数?

Dam*_*ian 2 c++ constructor

我不习惯c ++而且我在编写构造函数时遇到了问题.
看到这个例子,是我正在处理的代码的简短版本:

class B {
public:
  B(int x);
}

class A {
public:
  B b;
  A(){
    // here I have to initialize b
  }
}
Run Code Online (Sandbox Code Playgroud)

抛出编译器错误,因为我需要在A的构造函数中初始化b,因为B没有默认构造函数.

我想我已经在初始化列表中做了,但是B(int x)参数是我必须用某种算法计算的值,所以我不知道应该如何正确完成,或者如果我遗漏了某些东西或做错了.

在像java这样的其他语言中,我会引用B并在A的构造函数中初始化它之后需要获取初始化值的其他代码.

在这种情况下,初始化b的正确方法是什么?

谢谢!

Joh*_*itb 11

您可以在构造函数初始化列表中调用函数

class B {
public:
  B(int x);
}; // note semicolon

class A {
public:
  B b;

  A()
  :b(calculateValue()) {
    // here I have to initialize b
  }

  static int calculateValue() {
    /* ... */
  }
}; // note semicolon
Run Code Online (Sandbox Code Playgroud)

请注意,在初始化列表中,该类被视为已完全定义,因此您也可以看到稍后声明的成员.最好不要在构造函数初始化列表中使用非静态函数,因为此时尚未初始化所有成员.静态成员函数调用很好.