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