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

Конструктор - C++

Восстановить пароль Регистрация
 
bigar
 Аватар для bigar
53 / 53 / 23
Регистрация: 18.02.2011
Сообщений: 146
09.04.2011, 20:19     Конструктор #1
скажите пожалуйста
зачем в конструкторе мы переменным присваиваем 0?
Complex(double r=0,double i=0)
{
real=r;
im=i;
}
если записать

Complex(double r,double i)
{
real=r;
im=i;
}
Complex d(2,3);
будет ошибка. Почему???
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
09.04.2011, 20:19     Конструктор
Посмотрите здесь:

this(Всегда ли вызывается конструктор при не явной передачи объекта в конструктор) C++
C++ Не могу сделать чтобы класс содержал основной конструктор и конструктор копирования
C++ Не могу правильно сделать конструктор и конструктор копирования и принадлежность точки с заданными координатами треугольнику
Конструктор инициализации, конструктор копирования, деструктор C++
C++ Конструктор производного класса требует конструктор предка
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
silent_1991
Эксперт C++
4938 / 3014 / 149
Регистрация: 11.11.2009
Сообщений: 7,024
Завершенные тесты: 1
09.04.2011, 20:29     Конструктор #2
Хм... Вообще не должно быть ошибки. Попробуйте создавать объект так (для верности):
C++
1
Complex d(2.0, 3.0);
Хотя в теории типы должны бы приводиться автоматически.
А "присваиваем 0" - на самом деле задаём аргументы по-умолчанию. Т.е. если вы напишите так:
C++
1
Complex v;
то это будет эквивалентно
C++
1
Complex v(0.0, 0.0);
т.е. нули присвоятся по-умолчанию.
bigar
 Аватар для bigar
53 / 53 / 23
Регистрация: 18.02.2011
Сообщений: 146
09.04.2011, 20:42  [ТС]     Конструктор #3
C++
1
2
3
4
5
6
7
complex operator+(complex& t)
{
complex ob; // тут ошибочка нет подходящего конструктора по умолчанию
ob.real=real +t.real;
ob.im=im+t.im;
return ob;
}
silent_1991
Эксперт C++
4938 / 3014 / 149
Регистрация: 11.11.2009
Сообщений: 7,024
Завершенные тесты: 1
09.04.2011, 20:45     Конструктор #4
Ну это понятно, если вы убрали = 0 в конструкторе. Можно ещё использовать такую конструкцию:
C++
1
2
3
4
5
6
7
8
9
10
11
Complex():
real(0.0),
im(0.0)
{
}
 
Complex(double r, double i):
real(r),
im(i)
{
}
Т.е. есть конструктор по-умолчанию и конструктор с параметрами. Но вариант с аргументами по-умолчанию компактнее.
vitaska
 Аватар для vitaska
83 / 83 / 2
Регистрация: 04.02.2010
Сообщений: 162
09.04.2011, 20:50     Конструктор #5
либо так
C++
1
2
3
4
5
6
7
8
9
10
11
Complex()
{
  real=0.0;
  im=0.0;
}
 
Complex(double r, double i)
{
  real=r;
  im=i;
}
silent_1991
Эксперт C++
4938 / 3014 / 149
Регистрация: 11.11.2009
Сообщений: 7,024
Завершенные тесты: 1
09.04.2011, 20:52     Конструктор #6
И всё-таки лучше первый вариант. Всю инициализацию, какую только можно, лучше проводить через списки инициализации. Тело конструктора - более сложная работа.
bigar
 Аватар для bigar
53 / 53 / 23
Регистрация: 18.02.2011
Сообщений: 146
09.04.2011, 20:55  [ТС]     Конструктор #7
Т. Е. я должен задать параметры по -умолчанию обязательно (могу любые а процессе работы могу их изменять), а если не задать то получается не правильная сама конструкция????
vitaska
 Аватар для vitaska
83 / 83 / 2
Регистрация: 04.02.2010
Сообщений: 162
09.04.2011, 20:56     Конструктор #8
Цитата Сообщение от silent_1991 Посмотреть сообщение
И всё-таки лучше первый вариант. Всю инициализацию, какую только можно, лучше проводить через списки инициализации. Тело конструктора - более сложная работа.
я еще не большой спец по классам, просто написал как знаю.
silent_1991
Эксперт C++
4938 / 3014 / 149
Регистрация: 11.11.2009
Сообщений: 7,024
Завершенные тесты: 1
09.04.2011, 20:58     Конструктор #9
bigar, если у вас нет конструктора по-умолчанию (но есть конструктор с параметрами или копии, т.е. в случае, когда компилятор автоматически не создаст конструктор по-умолчанию), то вы не можете просто написать Complex v;, поскольку компилятор просто не знает, как создавать объект по-умолчанию. Я показал два вариант, как можно сделать - либо использовать параметры по-умолчанию в конструкторе с параметрами и, таким образом, обойтись одним конструктором, либо создать два конструктора - по-умолчанию и с параметрами.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
09.04.2011, 21:04     Конструктор
Еще ссылки по теме:

Конструктор класса не видит конструктор по умолчанию другого класса C++
C++ Создать класс. Написать конструктор по умолчанию, конструктор с параметрами. Перегрузить операции «меньше» и «равно»
C++ Будет ли определен компилятором конструктор по умолчанию, если есть конструктор с дефолтным параметром?

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

Или воспользуйтесь поиском по форуму:
bigar
 Аватар для bigar
53 / 53 / 23
Регистрация: 18.02.2011
Сообщений: 146
09.04.2011, 21:04  [ТС]     Конструктор #10
все понял)) СПС))
Yandex
Объявления
09.04.2011, 21:04     Конструктор
Ответ Создать тему
Опции темы

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