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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
kia001
0 / 0 / 0
Регистрация: 24.07.2012
Сообщений: 9
#1

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

14.03.2013, 14:59. Просмотров 636. Ответов 6
Метки нет (Все метки)

Изучаю книгу Джосьютиса по 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;
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
14.03.2013, 14:59
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Объявление конструктора (C++):

Странное объявление конструктора - C++
Всем привет! Читаю Дейтела и увидел вот такое объявление конструктора. class Exceptions: public runtime_error { public: ...

Объявление класса без дефолтного конструктора - C++
Имею некий класс, у которого нет конструктора по умолчанию. Class abc { abc(int){} } Как мне объявить переменную этого...

В чём отличия конструктора копирования и конструктора перемещения? Где и как их нужно использовать? - C++
Помогите разобраться в копирующем и перемещающем конструкторах. В чём их существенное отличие и какой плюс от использования перемещающего...

Построение конструктора - C++
Дан класс: class type { private: int ***p; int x, y, z; //.......

вызов конструктора - C++
Здарова! Есть допустим класс: class Str { Str(); Str(Str&); Str(char*); };

Параметр конструктора - C++
Ребята, помогите. Как создать конструктор, который принимает символ в качестве параметра? Заранее благодарен.

6
hofmn
Helter Skelter
61 / 61 / 1
Регистрация: 19.09.2012
Сообщений: 133
14.03.2013, 15:15 #2
Цитата Сообщение от kia001 Посмотреть сообщение
И фактически эту же строку можно заменить на
Можно заменить, но так не принято.
1
Croessmah
Эксперт CЭксперт С++
13430 / 7585 / 857
Регистрация: 27.09.2012
Сообщений: 18,677
Записей в блоге: 3
Завершенные тесты: 1
14.03.2013, 15:25 #3
Цитата Сообщение от kia001 Посмотреть сообщение
фактически эту же строку можно заменить на
В данном случае можно, но не всегда
1
kia001
0 / 0 / 0
Регистрация: 24.07.2012
Сообщений: 9
14.03.2013, 15:30  [ТС] #4
А можете более подробно объяснить в чем преимущество именно такого подхода?
0
aLarman
642 / 563 / 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) {}
а так можно писать только если для переменной есть конструктор копирования(хотя даже для классов компилятор его сам сгенерит - но может не правильно сгенерить), ну и естественно для встроеных типов оно всегда работает
1
Croessmah
Эксперт CЭксперт С++
13430 / 7585 / 857
Регистрация: 27.09.2012
Сообщений: 18,677
Записей в блоге: 3
Завершенные тесты: 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;
}
1
Tulosba
:)
Эксперт С++
4396 / 3232 / 297
Регистрация: 19.02.2013
Сообщений: 9,045
14.03.2013, 17:12 #7
А еще инициализатор конструктора используется для установки const полей. Просто в теле конструктора не получится задать.
1
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
14.03.2013, 17:12
Привет! Вот еще темы с ответами:

вызов конструктора - C++
Почему при повторном вызове конструктора выбивает ошибку ?Вот здесь ObjX(INUSE); no match for call to `(aClass) (int&)' #include...

Скобки у конструктора - C++
Задавал подобный вопрос, однако следующий код все равно ставит меня в тупик. Почему такой код нормально компилируется и работает: ...

Перегрузка конструктора - C++
как можно перегрузить еще 1 конструктор, но уже в Char* название месяца Data(int Day = 0 , int Month = 0, int Year = 0) { ...

2 Конструктора в Классе - C++
Мой класс: class zdanie { int plosh, obm, e; char *adres, *vladelec; public: zdanie(int pl, int ob, char adr, char vlad); ...


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

Или воспользуйтесь поиском по форуму:
7
Yandex
Объявления
14.03.2013, 17:12
Ответ Создать тему
Опции темы

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