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

Конструктор преобразования. - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 39, средняя оценка - 4.77
Chelioss
179 / 179 / 4
Регистрация: 08.01.2011
Сообщений: 1,131
02.09.2011, 01:01     Конструктор преобразования. #1
Есть класс Complex с двумя элемент данными: real и image
Надо написать конструктор преобразования базового типа к типу, определяемому разрабатываемым классом, т.е. Complex.
Я так понимаю конструктор должен принимать один параметр.
Вот только какой? Если просто значение типа int, то после преобразования получится объект класса, в котором real имеет то значение, что преобразовывалось, а image будет иметь какое-другое значение( например, по умолчанию 0).
Получается как-то странно.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
02.09.2011, 01:01     Конструктор преобразования.
Посмотрите здесь:

Конструктор преобразования C++
this(Всегда ли вызывается конструктор при не явной передачи объекта в конструктор) C++
C++ Не могу сделать чтобы класс содержал основной конструктор и конструктор копирования
C++ Не могу правильно сделать конструктор и конструктор копирования и принадлежность точки с заданными координатами треугольнику
C++ Конструктор производного класса требует конструктор предка
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Jupiter
Каратель
Эксперт C++
6542 / 3962 / 226
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
02.09.2011, 01:11     Конструктор преобразования. #2
класс шаблонный?
Chelioss
179 / 179 / 4
Регистрация: 08.01.2011
Сообщений: 1,131
02.09.2011, 01:15  [ТС]     Конструктор преобразования. #3
Нет. Самый простой какой может быть класс, состоящий из двух элемент данных.
Вот допустим делаю класс String и пишу для него конструктор преобразования. Единственным параметром это конструктора будет указатель на char, т.е. на строку.
Это значит, что строку "abc" можно преобразовать в String.
Но в классе String основное - это элемент данная char[ size].
А в моем классе две основных элемент данных - real и image. Что делать?
Bers
Заблокирован
02.09.2011, 01:18     Конструктор преобразования. #4
чет я не въехал. Вам надо привести тип string к complex например?)
Chelioss
179 / 179 / 4
Регистрация: 08.01.2011
Сообщений: 1,131
02.09.2011, 01:23  [ТС]     Конструктор преобразования. #5
Нет. String я привел в пример.
В String'е основное - это указатель символьный массив char *str.
Допустим есть задание:
написать конструктор преобразования базового типа к типу, определяемому разрабатываемым классом
Тут понятно, какой будет конструктор преобразования, а именно
C++
1
2
3
4
String( const char * str )
{
 setString( str ); 
}
А какой будет конструктор преобразования у класса Complex?
Ведь в нем основного два - int real, image;.
Я вижу единственный вариант:
C++
1
2
3
4
Complex( int a )
{
 setComplex( a, 0 );
}
Что мне не нравится в таком конструкторе преобразования, так это то, что image всегда устанавливается в 0.

А если еще будет конструктор Complex( int = 0, int = 0);
то при создании объекта Complex complex(1) будет ошибка компиляции, ибо компилятор не поймет какой из конструкторов использовать.
Jupiter
Каратель
Эксперт C++
6542 / 3962 / 226
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
02.09.2011, 01:33     Конструктор преобразования. #6
Цитата Сообщение от Chelioss Посмотреть сообщение
А если еще будет конструктор
C++
1
Complex( int = 0, int = 0);
отдайте предпочтение такому конструктору или вообще запретите преобразование используя ключевое слово explicit
grizlik78
Эксперт C++
 Аватар для grizlik78
1882 / 1414 / 101
Регистрация: 29.05.2011
Сообщений: 2,958
02.09.2011, 01:34     Конструктор преобразования. #7
Цитата Сообщение от Chelioss Посмотреть сообщение
Что мне не нравится в таком конструкторе преобразования, так это то, что image всегда устанавливается в 0.
А я ничего особо плохого не вижу. Есть действительное число, ему соответствует комплексное, у которого мнимая часть равна нулю. С математической точки зрения вроде всё нормально.

Цитата Сообщение от Chelioss Посмотреть сообщение
А если еще будет конструктор Complex( int = 0, int = 0);
то при создании объекта Complex complex(1) будет ошибка компиляции, ибо компилятор не поймет какой из конструкторов использовать.
Ну так и не надо делать эти параметры умолчательными. Либо не надо делать конструктор с одним параметром.
Chelioss
179 / 179 / 4
Регистрация: 08.01.2011
Сообщений: 1,131
02.09.2011, 01:41  [ТС]     Конструктор преобразования. #8
Цитата Сообщение от Jupiter Посмотреть сообщение
отдайте предпочтение такому конструктору
У меня задание такое, что надо сделать конструктор преобразования.
Хорошо, сделаю такой конструктор преобразования:
C++
1
2
3
4
Complex( int a )
{
 setComplex( a, 0 );
}
Сыроежка
Заблокирован
02.09.2011, 21:51     Конструктор преобразования. #9
Цитата Сообщение от Chelioss Посмотреть сообщение
У меня задание такое, что надо сделать конструктор преобразования.
Хорошо, сделаю такой конструктор преобразования:
C++
1
2
3
4
Complex( int a )
{
 setComplex( a, 0 );
}
Конструктор преобразования - это конструктор с одним параметром! так что создапйте конструктор, который принимает один параметр, например, реальную часть комплексного числа. Вот вам и будет конструктор преобразования!
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
03.09.2011, 13:53     Конструктор преобразования.
Еще ссылки по теме:

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

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

Или воспользуйтесь поиском по форуму:
ValeryLaptev
Эксперт C++
1005 / 784 / 46
Регистрация: 30.04.2011
Сообщений: 1,595
03.09.2011, 13:53     Конструктор преобразования. #10
Цитата Сообщение от Сыроежка Посмотреть сообщение
Конструктор преобразования - это конструктор с одним параметром! так что создапйте конструктор, который принимает один параметр, например, реальную часть комплексного числа. Вот вам и будет конструктор преобразования!
Для Complex это совершенно очевидный конструктор преобразования действительного числа в комплексное:
C++
1
2
3
Complex(double r)
{ real = r; image = 0,0; 
}
Yandex
Объявления
03.09.2011, 13:53     Конструктор преобразования.
Ответ Создать тему
Опции темы

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