Форум программистов, компьютерный форум, киберфорум
C++
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.86/7: Рейтинг темы: голосов - 7, средняя оценка - 4.86
19 / 19 / 2
Регистрация: 29.11.2009
Сообщений: 224
1

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

20.01.2010, 15:50. Показов 1341. Ответов 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

Помощь в написании контрольных, курсовых и дипломных работ здесь.

Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
20.01.2010, 15:50
Ответы с готовыми решениями:

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

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

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

Ошибка во время инициализации полей класса
Здравствуйте. Имеется класс: namespace MyApplication { public class Engineer:...

2
Автор FAQ
3684 / 961 / 114
Регистрация: 10.01.2010
Сообщений: 2,550
20.01.2010, 15:54 2
Я читал недавно про это - не создается лишней копии для x
1
Эксперт С++
2921 / 1270 / 114
Регистрация: 27.05.2008
Сообщений: 3,465
20.01.2010, 16:30 3
Если x у тебя - сложный объект с нетривиальным конструктором, то разницу ты почувствуешь - во втором варианте сначала будет вызван конструктор по умолчанию, а только потом оператор= для объекта x. Это могут оказаться "дорогие" по времени операции. В первом же случае будет вызван только нужный конструктор для объекта x.
1
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
20.01.2010, 16:30

Помощь в написании контрольных, курсовых и дипломных работ здесь.

Почему в начале класса нельзя инициализировать переменную?
public partial class Winter : Form { List<string> list = new List<string>; ...

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

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

Почему если в классе реализован метод __eq__, то объекты класса становятся некэшируемыми?
То есть к ним нельзя применить функцию hash ()? ++++++++++++++++++++++++++++++++++++ ...


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

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

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