Хм .. почему он не может это сделать? Переменные-члены видны во всем классе, независимо от того, где они определены:
class Foo{
public:
Foo(int i) : _i(i) {}
private:
int _i;
};
Если вы имели в виду, как при инициализации работает после двоеточия :
, поищите «список инициализатора» / «инициализатор ctor», если вам нужна стандартная формулировка.
Редактировать : Рассмотрим этот класс:
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
};
Если это не поможет, я думаю, вы действительно не выражаете то, что не понимаете.