Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 18.03.2012, 20:50   #1
t2skler
Форумчанин
 
Аватар для t2skler
 
Регистрация: 25.11.2010
Сообщений: 164
По умолчанию Инициализация в классе

Объясните, пожалуйста, зачем инициализацию в классе производить при помощи ":", а не внутри функции?

Код:
     Array() : 
            len(0),
            val(NULL)
        {}
Возможно Я Быдлокодер ©.
t2skler вне форума Ответить с цитированием
Старый 18.03.2012, 20:53   #2
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

так удобнее(ну на вкус и цвет), и я считаю правильнее.
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 18.03.2012, 21:05   #3
t2skler
Форумчанин
 
Аватар для t2skler
 
Регистрация: 25.11.2010
Сообщений: 164
По умолчанию

Ясненько, спасибо.
Возможно Я Быдлокодер ©.
t2skler вне форума Ответить с цитированием
Старый 18.03.2012, 21:22   #4
pproger
C++ hater
СтарожилДжуниор
 
Аватар для pproger
 
Регистрация: 19.07.2009
Сообщений: 3,336
По умолчанию

2Пепел Феникса
да нет, удобство тут ни при чем

2t2skler
а другого способа ИНИЦИАЛИЗИРОВАТЬ (именно инициализировать) переменную-член в С++ просто нет
I invented the term Object-Oriented, and I can tell you I did not have C++ in mind. (c)Alan Kay

My other car is cdr.

Q: Whats the object-oriented way to become wealthy?
A: Inheritance
pproger вне форума Ответить с цитированием
Старый 18.03.2012, 21:25   #5
netrino
Участник клуба
 
Аватар для netrino
 
Регистрация: 15.07.2008
Сообщений: 1,933
По умолчанию

Основная разница проявляется при работе с не-POD типами данных (то бишь, которые имеют сложную структуру, конструкторы и деструкторы). В приведённом примере будет вызван конструктор, а не operator=. Кроме того, это единственный способ инициализировать ссылку в классе или вызывать конструктор базового класса.
Код:
class Class : public BaseClass {
public:
  Class (int& link, const char * str)
    : BaseClass (link) // Вызываем конструктор базового класса
    , m_link (link)      // инициализируем ссылку
    , m_str (str)       // Вызываем конструктор, вместо оператора присваивания
  { }
private:
  int & m_link;
  std::string m_str;
};
netrino вне форума Ответить с цитированием
Старый 18.03.2012, 21:41   #6
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

ну спасибо за ликбез, но все равно так правильнее
и мне лично удобнее.
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 19.03.2012, 21:54   #7
_Bers
Старожил
 
Регистрация: 16.12.2011
Сообщений: 2,329
По умолчанию

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

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

Непосредственно, захват ресурсов должен выполняться уже после конструктора, например в методе Init(const Param& param);
_Bers вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Инициализация Aleksey1989 Общие вопросы Delphi 10 11.09.2010 21:50
Инициализация Krumyura Общие вопросы C/C++ 5 20.03.2010 23:37
Инициализация DirectX Pedro Gamedev - cоздание игр: Unity, OpenGL, DirectX 2 30.09.2009 21:06
инициализация массива Arcueid1691 Паскаль, Turbo Pascal, PascalABC.NET 2 01.06.2009 02:36
Инициализация TListView Oburec Компоненты Delphi 0 04.05.2009 00:30