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

Значение по умолчанию - C++

Восстановить пароль Регистрация
 
BigLow
55 / 55 / 2
Регистрация: 07.07.2013
Сообщений: 345
20.08.2013, 18:30     Значение по умолчанию #1
В C++ можно устанавливать встроенным типам данных значения по умолчанию вот таким способом:
C++
1
int i = int();
Здесь в переменной i будет записано 0

А если это использовать для пользовательских типов, то как так получается, что все переменные-члены устанавливаются в 0?

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
#include <iostream>
 
struct Point
{
    int x, y;
 
    friend std::ostream &operator<<(std::ostream &out, const Point &point);
};
 
std::ostream &operator<<(std::ostream &out, const Point &point)
{
    out << "[" << point.x << ", " << point.y << "]";
    return out;
}
 
 
int main()
{
    Point       point = Point();
    std::cout << point;         // [0, 0]
 
    system("pause");
    return 0;
}
Конструкторов никаких нет
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Dekio
Фрилансер
Эксперт C++
 Аватар для Dekio
5816 / 1214 / 214
Регистрация: 23.11.2010
Сообщений: 3,378
Записей в блоге: 1
20.08.2013, 18:35     Значение по умолчанию #2
Цитата Сообщение от BigLow Посмотреть сообщение
Конструкторов никаких нет
А как же конструктор по умолчанию?
ViktorKozlov
133 / 125 / 2
Регистрация: 13.12.2012
Сообщений: 293
20.08.2013, 18:36     Значение по умолчанию #3
Тогда это будет явный вызов конструктора по умолчанию, который вызывает конструкторы по умолчанию для всех элементов-объектов и устанавливает 0 у встроенных типов
BigLow
55 / 55 / 2
Регистрация: 07.07.2013
Сообщений: 345
20.08.2013, 18:47  [ТС]     Значение по умолчанию #4
Цитата Сообщение от ViktorKozlov Посмотреть сообщение
который вызывает конструкторы по умолчанию для всех элементов-объектов
т.е вызовится конструктор по умолчанию для переменной x запишет 0, потом вызовит конструктор по умолчанию для переменной y и тоже запишет 0.

Просто непонятно откуда Point знает для каких переменных надо вызывать конструкторы
Croessmah
Модератор
Эксперт С++
 Аватар для Croessmah
11827 / 6806 / 769
Регистрация: 27.09.2012
Сообщений: 16,878
Записей в блоге: 2
Завершенные тесты: 1
20.08.2013, 18:50     Значение по умолчанию #5
А если добавить такой конструктор?
C++
1
2
Point():x(),y(){
}
BigLow
55 / 55 / 2
Регистрация: 07.07.2013
Сообщений: 345
20.08.2013, 19:09  [ТС]     Значение по умолчанию #6
Цитата Сообщение от Croessmah Посмотреть сообщение
А если добавить такой конструктор?
это уже мы сами написали и как хотим, так и устанавливаем значения для всех переменных в структуре

Croessmah, Получается, если в классе не будет конструктора по умолчанию, то будет вот такой автоматически создан?

C++
1
2
3
4
5
6
struct Point
{
    int x, y;
 
    Point() : x(), y()  {}
};
Добавлено через 14 минут
Наверно ViktorKozlov все таки прав. Вызываются конструкторы по умолчанию для всех переменных в структруре
Тут опять вопросы. В каком порядке они вызываются. Сначала для x а потом для y или наоборот?
Хотя это неважно
Issues
429 / 364 / 37
Регистрация: 06.08.2012
Сообщений: 961
20.08.2013, 19:30     Значение по умолчанию #7
В случае для пользовательских типов, вызывается конструктор по умолчанию, если он переопеределен пользователем, то выполняет заданную им задачу, если его предоставляет компилятор, он просто создает обьект.
Croessmah
Модератор
Эксперт С++
 Аватар для Croessmah
11827 / 6806 / 769
Регистрация: 27.09.2012
Сообщений: 16,878
Записей в блоге: 2
Завершенные тесты: 1
20.08.2013, 19:40     Значение по умолчанию #8
Цитата Сообщение от BigLow Посмотреть сообщение
Croessmah, Получается, если в классе не будет конструктора по умолчанию, то будет вот такой автоматически создан?
Копайте в сторону default-initialized и value-initialized
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
20.08.2013, 19:46     Значение по умолчанию
Еще ссылки по теме:

Ошибка: отсутствует значение, используемое по умолчанию C++
Значение по умолчанию передаваемое в функцию C++
Перегрузка функций. Значение по умолчанию C++

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

Или воспользуйтесь поиском по форуму:
Croessmah
Модератор
Эксперт С++
 Аватар для Croessmah
11827 / 6806 / 769
Регистрация: 27.09.2012
Сообщений: 16,878
Записей в блоге: 2
Завершенные тесты: 1
20.08.2013, 19:46     Значение по умолчанию #9
Значение по умолчанию
Yandex
Объявления
20.08.2013, 19:46     Значение по умолчанию
Ответ Создать тему
Опции темы

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