Свойства, объявленные рядом с конструктором - PullRequest
3 голосов
/ 14 апреля 2010

Я очень плохо знаком с C / C ++ и не уверен, как вызывается метод. Но вот почему я здесь пытаюсь найти ответ. позвольте мне показать вам пример

MyClass::MyClass() : valueOne(1), valueTwo(2)
{
      //code
}

Где valueOne и valueTwo - свойства класса, которым присваиваются значения вне тела, какой метод вызывается и почему это делается таким образом. Почему бы не сделать это так

MyClass::MyClass()
{
      valueOne = 1;
      valueTwo = 2
      //code
}

Если кто-нибудь может мне помочь, это будет здорово.

Ответы [ 5 ]

7 голосов
/ 14 апреля 2010

Это список инициализаторов . Вы можете инициализировать переменные-члены, используя список инициализаторов после конструктора.

По умолчанию конструктор автоматически создает объекты, которые являются переменными-членами, вызывая их конструкторы по умолчанию. Используя список инициализаторов, вы можете указать, использовать ли другие конструкторы. Иногда, если ваша переменная-член не имеет конструктора без аргументов, вы должны использовать список инициализаторов.

2 голосов
/ 14 апреля 2010

Списки инициализации (прежний стиль) обычно предпочтительнее по соображениям эффективности и производительности. Лично я предпочитаю их также из-за читабельности кода, поскольку он отделяет простую инициализацию от любой сложной логики в самом конструкторе.

1 голос
/ 14 апреля 2010

Желательно инициализировать элементы в списке инициализатора. В вашем случае это не имеет значения, но невозможно инициализировать int так, как вы это делали во втором фрагменте кода. Это единственное место, где вы также можете передавать аргументы конструктору базового класса.

1 голос
/ 14 апреля 2010

Это называется список инициализации . Это сделано главным образом для производительности (с большими объектами) или согласованности (со встроенными типами, такими как int).

0 голосов
/ 14 апреля 2010

Также обратите внимание, что указатель this доступен в списке инициализатора, если используется для ссылки на поля данных или функции-члены только в классах BASE.

...