嗯..为什么它不能这样做?成员变量在整个类中都是可见的,无论它们是在哪里定义的:
class Foo{
public:
Foo(int i) : _i(i) {}
private:
int _i;
};
如果您的意思是在冒号之后初始化的事情是如何工作的:
,如果您想要标准措辞,请搜索“initializer list”/“ctor initializer”。
编辑:考虑这个类:
class Foo{
public:
Foo(int i, float f) : _i(i), _f(f) {}
private:
int _i;
float _f;
};
现在考虑这个函数和其他类:
int random(){
return 4;
}
class Bar{
public:
Bar() : _f(random(), 3.14159f) {}
private:
const Foo _f;
};
您可以根据需要在初始化器列表中初始化一个成员,假设该成员具有合适的构造函数。现在,对于const
成员,您只能以这种方式初始化它们,因为在 ctor 主体内部,它不能再被分配了。您只能使用非常量和非引用变量来做到这一点:
class Bar{
public:
Bar(){
_f = Foo(random(), 3.14159f); // invoke copy assignment operator
}
private:
Foo _f; // non-const
};
如果这没有任何帮助,我猜你真的没有表达你不明白的东西。