Форум программистов, компьютерный форум CyberForum.ru
Наши страницы

C++

Войти
Регистрация
Восстановить пароль
 
OVERPOWER8
19 / 19 / 1
Регистрация: 29.11.2009
Сообщений: 224
#1

Почему лучше инициализировать объекты класса во время инициализации конструктора? - C++

20.01.2010, 15:50. Просмотров 1005. Ответов 2
Метки нет (Все метки)

Имеется класс Rnd:

C++
1
2
3
4
5
6
7
class Rnd
{
    public:
        Rnd::Rnd(int x);
    private:
        int val;
};
Чем эта запись:

C++
1
2
3
Rnd::Rnd(int x):
    val(x)
{}
Лучше чем эта:

C++
1
Rnd::Rnd(int x) {   val=x;  }
Я не вижу никакой разницы, однако товарищ Страуструп утверждает, что первая запись лучше
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
20.01.2010, 15:50
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Почему лучше инициализировать объекты класса во время инициализации конструктора? (C++):

Можно ли объявлять в описании одного класса объекты другого класса - C++ Builder
Здравствуйте! Помогите, пожалуйста, разобраться: я описал класс SignalZakon, а теперь хочу создать объекты этого класса (k, T1 и Т2) в...

Где правильно объявлять и инициализировать объекты/ MFC - Visual C++
Добрый день. Допустим у меня есть два обработчика событий (две функции). Обе функции используют один и тот же объект. К моменту первого...

Реализация класса (конструктора и деструктора) - Visual C++
Нужна помощь в исправлении программы (в Dev c++ компилируется и работает, а в Visual Studio - нет) #include <iostream.h> #include...

Почему в списке инициализации конструктора дочернего класса нельзя вызывать конструктор родительского через его пространство имён? - C++
Есть класс D и от него порождён класс Wd Тут вот например всё работает корректно (использую обращение ч/з пространство имён класса "D::" ...

Реализовать класс «Проект» и создать объекты данного класса с разными способами инициализации - C++
 -Объявить класс «Проект» с данными номер проекта, сумма, дата исполнения и определить для него конструктор по умолчанию, конструктор...

Почему после конструктора первого класса стоит двоеточие и имя переменной, а не инициализация? - C++
#include <iostream> template <typename T> class first { public: T value; first (T n) : value(n) {} virtual...

2
insideone
Модератор
Автор FAQ
3642 / 921 / 50
Регистрация: 10.01.2010
Сообщений: 2,477
20.01.2010, 15:54 #2
Я читал недавно про это - не создается лишней копии для x
1
CheshireCat
Эксперт С++
2893 / 1242 / 78
Регистрация: 27.05.2008
Сообщений: 3,389
20.01.2010, 16:30 #3
Если x у тебя - сложный объект с нетривиальным конструктором, то разницу ты почувствуешь - во втором варианте сначала будет вызван конструктор по умолчанию, а только потом оператор= для объекта x. Это могут оказаться "дорогие" по времени операции. В первом же случае будет вызван только нужный конструктор для объекта x.
1
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
20.01.2010, 16:30
Привет! Вот еще темы с ответами:

Параметр конструктора класса нигде не задействован, но его отсутствие влияет на компиляцию, почему так? - C++
#include <string> #include <vector> using namespace std; ////////////////////////////////////////// class kl { ...

Список инициализации конструктора - C++
Можно ли воспользоваться списком инициализации конструктора класса потомка, для того чтобы инициализировать члены базового класса который...

Список инициализации конструктора - C++
Всем привет. У меня есть некоторые вопросы насчет списка инициализации конструктора. Да и вообще не понимаю отличия от инициализации в теле...

Напишите конструктор для инициализации объекта класса Time, который может использовать текущее время, возвращаемое функцией time (). - C++
Помогите пожалуйста написать программу на С++. Просто скоро курсовую сдавать, а классы мы еще не разобрали и не успеваем. Поэтому не знаю...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru