Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Общие вопросы > Все ли свойства класса, должны инициализироваться


Автор: boostcoder 30.7.2010, 08:49
всем привет.
вопрос в теме.

аргументы за, и против?

Автор: Alca 30.7.2010, 09:35
Цитата

 Все ли свойства класса

все ли члены класса?

Автор: Fazil6 30.7.2010, 09:37
Цитата(boostcoder @  30.7.2010,  08:49 Найти цитируемый пост)
аргументы за, и против? 

а что, есть аргументы против?

Автор: Abyx 30.7.2010, 09:49
зачем спрашивать одно и то же на разных форумах %)

то что инициализировать не обязательно - инициализировать не обязательно %)

Автор: Earnest 30.7.2010, 09:51
Все члены должны инициализироваться в конструкторе. А в списке инициализации или в "теле" - не так важно в общем случае. Например сложные выражения я предпочитаю писать в "теле", если, конечно, можно оставить член без инициализации. Кроме того, если член класса имеет конструктор по-умолчанию, то упоминать его не стоит, это только засоряет код.

Автор: boostcoder 30.7.2010, 09:55
Цитата(Abyx @  30.7.2010,  09:49 Найти цитируемый пост)
зачем спрашивать одно и то же на разных форумах %)

пример?

Автор: mrbrooks 30.7.2010, 10:07
честно говоря не совсем ясна проблема. в чем соль то ТС? что мешает жить?  smile 

Автор: Abyx 30.7.2010, 10:16
Цитата(Earnest @  30.7.2010,  10:51 Найти цитируемый пост)
Все члены должны инициализироваться в конструкторе. (...) если член класса имеет конструктор по-умолчанию, то упоминать его не стоит, это только засоряет код. 

вы сами себе противоречите

Автор: Earnest 30.7.2010, 13:12
Почему же? Я ведь не написала - инициализироваться явно. Просто "инициализироваться". 
Собственно, речь может идти в основном о встроенных типах, которые по-умолчанию не инициализируются. 

Автор: boostcoder 30.7.2010, 13:32
Цитата(Fazil6 @  30.7.2010,  09:37 Найти цитируемый пост)
а что, есть аргументы против? 

да. к примеру:
Цитата

а зачем? все равно конструктор по умолчанию есть.



Цитата(mrbrooks @  30.7.2010,  10:07 Найти цитируемый пост)
честно говоря не совсем ясна проблема. в чем соль то ТС? что мешает жить?

а нет проблемы.
просто меня часто критикуют коллеги за придирчивость к коду. вот сегодня с утра спорили об этом smile 


Цитата(Earnest @  30.7.2010,  13:12 Найти цитируемый пост)
Собственно, речь может идти в основном о встроенных типах

с этим все понятно.
но спор возник из-за переменных классового типа.

Автор: Abyx 30.7.2010, 13:47
Цитата(boostcoder @  30.7.2010,  10:55 Найти цитируемый пост)
Цитата(Abyx @  30.7.2010,  09:49 Найти цитируемый пост)
зачем спрашивать одно и то же на разных форумах %)

пример?

http://wasm.ru/forum/viewtopic.php?id=38086

странно видеть темы про инициализацию членов класса каждые два дня smile

Автор: Earnest 30.7.2010, 13:47
Цитата(boostcoder @  30.7.2010,  14:32 Найти цитируемый пост)
но спор возник из-за переменных классового типа. 


В смысле, инициализировать ли явно члены, имеющие нормальные конструкторы по-умолчанию? Тогда я просто не поняла, пардон. Считаю, что не надо. Код типа:
CMyCompounClass::CMyCompoundClass():
   m_FirstMember (CFirstMember()),
   m_SecondMember (CSecondMember()),
   ...

смотрится на редкость уродливо. И никакой новой информации не сообщает. Ну есть у члена конструктор по-умолчанию. Так если бы его не было, компилятор орал бы как резаный.


Автор: boostcoder 30.7.2010, 13:52
Цитата(Abyx @ 30.7.2010,  13:47)
Цитата(boostcoder @  30.7.2010,  10:55 Найти цитируемый пост)
Цитата(Abyx @  30.7.2010,  09:49 Найти цитируемый пост)
зачем спрашивать одно и то же на разных форумах %)

пример?

http://wasm.ru/forum/viewtopic.php?id=38086

странно видеть темы про инициализацию членов класса каждые два дня smile

я на том форуме не реган. так что хз о чем вы.

Добавлено @ 13:54
Earnest, какой-то не правильный у вас пример.
полагаю так:
Код

CMyCompounClass::CMyCompoundClass():
   m_FirstMember(),
   m_SecondMember(),
   ...



Цитата(Earnest @  30.7.2010,  13:47 Найти цитируемый пост)
И никакой новой информации не сообщает.

по моему наоборот.

Автор: mes 30.7.2010, 13:56
Цитата(Earnest @  30.7.2010,  12:47 Найти цитируемый пост)
m_FirstMember (CFirstMember()),

имхо имелось ввиду чуть _проще_:  m_FirstMember (), 

 smile

Добавлено @ 13:58
boostcoder, имхо  писать нужно минимум, но так чтоб был ясен смысл происходящего..
Если в конкретном случае необходимо явно указать, то указывайте, иначе поберегите клавиатуру smile



Автор: boostcoder 30.7.2010, 14:14
мнение большинства понятно. всем спасибо.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)