Наиболее распространенный случай:
class foo{
private:
int x;
int y;
public:
foo(int _x, int _y) : x(_x), y(_y) {}
}
Это установит x
и y
в значения, заданные в _x
и _y
в параметрах конструктора. Зачастую это лучший способ создания любых объектов, которые объявлены как члены данных.
Также возможно, что вы просматривали цепочку конструктора:
class foo : public bar{
foo(int x, int y) : bar(x, y) {}
};
В этом случае конструктор класса вызовет конструктор своего базового класса и передаст значения x
и y
.
Чтобы разобрать функцию еще дальше:
TransparentObject::TransparentObject( int w, int x, int y, int z ) :
_someMethod( 0 ),
_someOtherMethod( 0 ),
_someOtherOtherMethod( 0 ),
_someMethodX( 0 )
{
int bla;
int bla;
}
Оператор ::
называется оператором разрешения области видимости. В основном это просто означает, что TransparentObject
является членом TransparentObject
. Во-вторых, вы правы, предполагая, что тело конструктора находится в фигурных скобках.
ОБНОВЛЕНИЕ: Спасибо за ответы. Можно ли эти методы называть методами? (Наверное нет) и в чем разница их вызова в теле конструктора
Существует гораздо больше информации по этому вопросу, чем я мог бы вам дать здесь . Самая распространенная область, в которой вы должны использовать списки инициализаторов, - это когда вы инициализируете ссылку или const
, поскольку этим переменным должно быть присвоено значение сразу после создания.