0 / 0 / 0
Регистрация: 24.07.2012
Сообщений: 9
1

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

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

Author24 — интернет-сервис помощи студентам
Изучаю книгу Джосьютиса по 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
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
14.03.2013, 14:59
Ответы с готовыми решениями:

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

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

Как разнести в коде объявление объекта и вызов конструктора?
Есть обьект который создает масив, размер передается в коструктор. В другом класе должен быть...

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

6
Helter Skelter
64 / 64 / 19
Регистрация: 19.09.2012
Сообщений: 133
14.03.2013, 15:15 2
Цитата Сообщение от kia001 Посмотреть сообщение
И фактически эту же строку можно заменить на
Можно заменить, но так не принято.
1
Неэпический
18109 / 10696 / 2062
Регистрация: 27.09.2012
Сообщений: 26,939
Записей в блоге: 1
14.03.2013, 15:25 3
Цитата Сообщение от kia001 Посмотреть сообщение
фактически эту же строку можно заменить на
В данном случае можно, но не всегда
1
0 / 0 / 0
Регистрация: 24.07.2012
Сообщений: 9
14.03.2013, 15:30  [ТС] 4
А можете более подробно объяснить в чем преимущество именно такого подхода?
0
654 / 575 / 164
Регистрация: 13.12.2012
Сообщений: 2,124
14.03.2013, 15:43 5
об этом написано в книге Майерса "Эффективное использование С++" а вообще говоря
Цитата Сообщение от kia001 Посмотреть сообщение
C++
1
AddValue(int v) { theValue = v; }
и так тоже правильно

Цитата Сообщение от kia001 Посмотреть сообщение
C++
1
AddValue(int v) : theValue(v) {}
а так можно писать только если для переменной есть конструктор копирования(хотя даже для классов компилятор его сам сгенерит - но может не правильно сгенерить), ну и естественно для встроеных типов оно всегда работает
1
Неэпический
18109 / 10696 / 2062
Регистрация: 27.09.2012
Сообщений: 26,939
Записей в блоге: 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
:)
Эксперт С++
4773 / 3267 / 497
Регистрация: 19.02.2013
Сообщений: 9,046
14.03.2013, 17:12 7
А еще инициализатор конструктора используется для установки const полей. Просто в теле конструктора не получится задать.
1
14.03.2013, 17:12
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
14.03.2013, 17:12
Помогаю со студенческими работами здесь

Объявление конструктора в WinForms
суть в том. у меня есть класс с .h и .cpp файлами. Где надо объявить конструктор чтобы методы были...

Объявление экземпляра конструктора
Приветствую! Помогите решить проблему. Хочу создать экземпляр конструктора через вторую форму. ...

Создание класса и объявление конструктора
Доброе время суток! Используя в качестве примера http://www.delphibasics.ru/TList.php пытаюсь...

Почему при вызове конструктора из конструктора нельзя передавать this как аргумент?
Есть такой код: public class Order { { } Order(){ ...


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru