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

Объявление конструктора - C++

Восстановить пароль Регистрация
 
kia001
0 / 0 / 0
Регистрация: 24.07.2012
Сообщений: 9
14.03.2013, 14:59     Объявление конструктора #1
Изучаю книгу Джосьютиса по STL и столкнулся с немного непонятным объявлением конструктора.

Помогите разобраться, правильно ли я его понимаю:

C++
1
2
3
4
5
6
7
8
9
10
11
class AddValue {
private:
int theValue;
public:
AddValue(int v) : theValue(v) {
}
 
void operator() (int& elem) const {
elem += theValue;
}
};
Конкретно вот эта строка мне неясна: AddValue(int v) : theValue(v) {}

Правильно ли я понимаю, что здесь вызывается конструктор базового класса int со значением, передаваемым от конструктора AddValue? И фактически эту же строку можно заменить на

C++
1
2
3
AddValue(int v) {
theValue = v;
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
14.03.2013, 14:59     Объявление конструктора
Посмотрите здесь:

2 Конструктора в Классе C++
Странное объявление конструктора C++
Использование конструктора C++
вызов конструктора C++
Построение конструктора C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
hofmn
Helter Skelter
 Аватар для hofmn
61 / 61 / 1
Регистрация: 19.09.2012
Сообщений: 133
14.03.2013, 15:15     Объявление конструктора #2
Цитата Сообщение от kia001 Посмотреть сообщение
И фактически эту же строку можно заменить на
Можно заменить, но так не принято.
Croessmah
Модератор
Эксперт С++
 Аватар для Croessmah
11809 / 6788 / 767
Регистрация: 27.09.2012
Сообщений: 16,840
Записей в блоге: 2
Завершенные тесты: 1
14.03.2013, 15:25     Объявление конструктора #3
Цитата Сообщение от kia001 Посмотреть сообщение
фактически эту же строку можно заменить на
В данном случае можно, но не всегда
kia001
0 / 0 / 0
Регистрация: 24.07.2012
Сообщений: 9
14.03.2013, 15:30  [ТС]     Объявление конструктора #4
А можете более подробно объяснить в чем преимущество именно такого подхода?
aLarman
636 / 557 / 89
Регистрация: 13.12.2012
Сообщений: 2,109
14.03.2013, 15:43     Объявление конструктора #5
об этом написано в книге Майерса "Эффективное использование С++" а вообще говоря
Цитата Сообщение от kia001 Посмотреть сообщение
C++
1
AddValue(int v) { theValue = v; }
и так тоже правильно

Цитата Сообщение от kia001 Посмотреть сообщение
C++
1
AddValue(int v) : theValue(v) {}
а так можно писать только если для переменной есть конструктор копирования(хотя даже для классов компилятор его сам сгенерит - но может не правильно сгенерить), ну и естественно для встроеных типов оно всегда работает
Croessmah
Модератор
Эксперт С++
 Аватар для Croessmah
11809 / 6788 / 767
Регистрация: 27.09.2012
Сообщений: 16,840
Записей в блоге: 2
Завершенные тесты: 1
14.03.2013, 16:00     Объявление конструктора #6
Цитата Сообщение от kia001 Посмотреть сообщение
А можете более подробно объяснить в чем преимущество именно такого подхода?
Это инициализация:
Цитата Сообщение от kia001 Посмотреть сообщение
C++
1
AddValue(int v) : theValue(v) { }
А это присваивание:
C++
1
2
3
AddValue(int v) {
   theValue = v;
}
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
14.03.2013, 17:12     Объявление конструктора
Еще ссылки по теме:

C++ Использование конструктора на С++
Перегрузка конструктора C++
C++ Вызов конструктора

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

Или воспользуйтесь поиском по форуму:
Tulosba
:)
Эксперт C++
4378 / 3221 / 297
Регистрация: 19.02.2013
Сообщений: 9,044
14.03.2013, 17:12     Объявление конструктора #7
А еще инициализатор конструктора используется для установки const полей. Просто в теле конструктора не получится задать.
Yandex
Объявления
14.03.2013, 17:12     Объявление конструктора
Ответ Создать тему
Опции темы

Текущее время: 20:56. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru