Форум программистов, компьютерный форум, киберфорум
Наши страницы

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

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

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

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

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

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

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

Не могу сделать чтобы класс содержал основной конструктор и конструктор копирования - C++
Разработать класс ThreeAngle для работы с плоскими треугольниками. В качестве членов-данных задаются длины трех сторон треугольника. Класс...

this(Всегда ли вызывается конструктор при не явной передачи объекта в конструктор) - C++
class Test { int i; public: void test(int i) { this -> i = i; } }; Конструктор Test::Test всегда вызывается...

Будет ли определен компилятором конструктор по умолчанию, если есть конструктор с дефолтным параметром? - C++
Добрый день, сразу к делу, есть некий класс class some { int x; public: some(int y = 1) : x(y) {} };

Создать класс. Написать конструктор по умолчанию, конструктор с параметрами. Перегрузить операции «меньше» и «равно» - C++
Помогите пожалуйста, хоть с одним из заданий. 1. Создать класс. Написать конструктор по умолчанию, конструктор с параметрами....

9
Jupiter
Каратель
Эксперт С++
6564 / 3985 / 227
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
02.09.2011, 01:11 #2
класс шаблонный?
1
Chelioss
180 / 180 / 4
Регистрация: 08.01.2011
Сообщений: 1,133
02.09.2011, 01:15  [ТС] #3
Нет. Самый простой какой может быть класс, состоящий из двух элемент данных.
Вот допустим делаю класс String и пишу для него конструктор преобразования. Единственным параметром это конструктора будет указатель на char, т.е. на строку.
Это значит, что строку "abc" можно преобразовать в String.
Но в классе String основное - это элемент данная char[ size].
А в моем классе две основных элемент данных - real и image. Что делать?
0
Bers
Заблокирован
02.09.2011, 01:18 #4
чет я не въехал. Вам надо привести тип string к complex например?)
1
Chelioss
180 / 180 / 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) будет ошибка компиляции, ибо компилятор не поймет какой из конструкторов использовать.
0
Jupiter
Каратель
Эксперт С++
6564 / 3985 / 227
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
02.09.2011, 01:33 #6
Цитата Сообщение от Chelioss Посмотреть сообщение
А если еще будет конструктор
C++
1
Complex( int = 0, int = 0);
отдайте предпочтение такому конструктору или вообще запретите преобразование используя ключевое слово explicit
1
grizlik78
Эксперт С++
1974 / 1467 / 122
Регистрация: 29.05.2011
Сообщений: 3,034
02.09.2011, 01:34 #7
Цитата Сообщение от Chelioss Посмотреть сообщение
Что мне не нравится в таком конструкторе преобразования, так это то, что image всегда устанавливается в 0.
А я ничего особо плохого не вижу. Есть действительное число, ему соответствует комплексное, у которого мнимая часть равна нулю. С математической точки зрения вроде всё нормально.

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

Не могу правильно сделать конструктор и конструктор копирования и принадлежность точки с заданными координатами треугольнику - C++
#include "stdafx.h" #include <iostream> #include <conio.h> #include <windows.h> #include <math.h> #include <algorithm> using...

Можно ли использовать конструктор по умолчанию и конструктор инициализации одновременно? - C++
Можно ли использовать конструктор по умолчанию и конструктор инициализации одновременно?

Конструктор производного класса требует конструктор предка - C++
Выдаёт вот такую вот ошибку: no matching function for call to 'Cube::Cube()' class Cube { protected: int magInt; bool...

Конструктор инициализации, конструктор копирования, деструктор - C++
Я сделал почти задание по перегрузке операторов. Осталось одно, тоесть три: конструктор инициализации, конструктор копирования, деструктор....


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

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

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