Только статические и константные переменные могут быть назначены классу? - PullRequest
0 голосов
/ 27 апреля 2010

Я изучаю C ++. Просто любопытно, могут ли только статические и постоянные переменные присваиваться значения из объявления класса? Это в основном то, почему когда вы присваиваете значения нормальным членам, у них есть особый способ сделать это

void myClass::Init() : member1(0), member2(1)
{
}

Ответы [ 2 ]

5 голосов
/ 27 апреля 2010

Похоже, это должен быть конструктор; если это так, у него не должно быть возвращаемого типа, и оно должно иметь то же имя, что и класс, например,

myClass::myClass()
    : member1(0), member2(1)
{

}

Только конструктор может иметь список инициализатора; Вы не можете делегировать этот тип инициализации функции Init.

Любые нестатические члены могут быть инициализированы в списке инициализатора конструктора. Все члены const и reference должны быть инициализированы в списке инициализатора конструктора.

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

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

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

Теперь возникает вопрос, почему только статические const члены класса могут бытьинициализируется в самом классе.Причина в том, что класс, скорее всего, находится в заголовке, и этот заголовок включен в несколько единиц перевода.Это вызывает проблему для компилятора.В какую единицу перевода (т. Е. В каком объектном файле) она должна поставить фактическую инициализацию?Но для простых минусов это не имеет значения.int const TWO = 2; не требует фактической инициализации в модуле перевода, компилятор просто запоминает это.

...