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

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

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 39, средняя оценка - 4.77
Chelioss
179 / 179 / 4
Регистрация: 08.01.2011
Сообщений: 1,133
#1

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

02.09.2011, 01:01. Просмотров 5443. Ответов 9
Метки нет (Все метки)

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

Конструктор преобразования - C++
Пишу программу, нужно сделать так чтобы вводилась строка типа string а потом обработка происходила с каждым символом типа char, программа с...

конструктор преобразования - C++
конструктор преобразования "Любой конструктор класса, принимающий один параметр какого-либо другого типа, называется конструктором...

преобразования в Си... - C++
Помогите разработать программу преобразования целых десятичных чисел с разрядностью до 7 цифр в словесное описание без грамматических...

Преобразования типов - C++
Доброго времени суток. Разбираясь с преобразователями типов в С++ возник вот такой вопрос: допустим у нас есть класс Alpha и какая-то...

Перегрузка преобразования - C++
Как перегрузить в классе явное преобразование? Что бы он корректно воспринимал строки вида: A a; B b = B(a);

Преобразования типов - C++
Имеются несколько структур, содержащих один и тот же набор элементов, но в разных последовательностях. ({x,y,z};{y,x,z};{z,y,x},...). ...

Ошибка преобразования - C++
Вот мой код. В общем в конце выбивает "error C2664: kasat: невозможно преобразовать параметр 5 из "double (__cdecl *)(double,double)"...

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Jupiter
Каратель
Эксперт С++
6552 / 3972 / 226
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
02.09.2011, 01:11     Конструктор преобразования. #2
класс шаблонный?
Chelioss
179 / 179 / 4
Регистрация: 08.01.2011
Сообщений: 1,133
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,133
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
Каратель
Эксперт С++
6552 / 3972 / 226
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
02.09.2011, 01:33     Конструктор преобразования. #6
Цитата Сообщение от Chelioss Посмотреть сообщение
А если еще будет конструктор
C++
1
Complex( int = 0, int = 0);
отдайте предпочтение такому конструктору или вообще запретите преобразование используя ключевое слово explicit
grizlik78
Эксперт С++
1903 / 1435 / 109
Регистрация: 29.05.2011
Сообщений: 2,990
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,133
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++
Почему можно присваивать символьной переменной типа char целые числа? И наоборот, целочисленному типу int можно присваивать символы....

спецификаторы преобразования - C++
Даны спецификаторы преобразования A) %f B) %d C) %x D) %o E) %u 1.для вывода десятичных целых чисел со знаком? 2. для...

Преобразования текста - C++
Пользовался когда-то Punto Switcher(меняет каракули, написанные не на той раскладке), но его глючность меня не устроила и я его удалил....

Преобразования матриц - C++
В заданной действительной квадратной матрице порядка n найти максимальный по модулю элемент. Получить матрицу порядка n – 1 путем...

Оператор преобразования - C++
Приветствую всех! Есть у Р. Лафоре в книге "Объектно-ориентированное программирование в C++" такой пример: //ENGLCONV.cpp ...


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

Или воспользуйтесь поиском по форуму:
ValeryLaptev
Эксперт С++
1035 / 814 / 48
Регистрация: 30.04.2011
Сообщений: 1,659
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     Конструктор преобразования.
Ответ Создать тему
Опции темы

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