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

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

Войти
Регистрация
Восстановить пароль
 
Mee
14 / 14 / 1
Регистрация: 05.07.2010
Сообщений: 88
#1

Преобразование типов - C++

27.01.2011, 02:48. Просмотров 570. Ответов 3
Метки нет (Все метки)

Вообщем допустим есть два класа, класс T и класс A, комплексные числа в разной форме записи(тригонометрической и алгебраической). Для класа А не определен оператор умножения, но он определен для класса Т. Для класса Т определен конструктор, принимающий аргументом объект класса А и наоборот.
Срабатывает следующее
C++
1
2
3
A a1;
A a2;
a1=a1*a2;
Так как есть прописаный оператор для класа Т и возможно перевести класс А в класс Т, програма так и делает: создает два новых Т-объекта из аргументов оператора и Т-результат. А после создается новый А-объект копированием Т-результата и он и есть возвращаемым значением.
Так происходит на практике.
Собственно вопрос: почему так происходит и нормальный ли это метод, можно ли на него полагатся или лучше реализовать операторы отделаьно для каждого класса?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
27.01.2011, 02:48     Преобразование типов
Посмотрите здесь:

Преобразование типов - C++
Доброго времени суток. В программе нужен корректный ввод числа. Если, например вводим буковки - выводится сообщение, далее в цикле -...

Преобразование типов - C++
Возможно ли преобразовать vector <Transport_Vehicle*> Cars_for_transportation в vector <MotorCar*> Cars_for_transportation

Преобразование типов - C++
есть следующая маленькая программка #include <iostream> #include <conio.h> using namespace std; int main() { int oldFunt,...

Преобразование типов - C++
Увидел код в сети, решил откомпилировать. Думаю какой код не важно. вылезла куча ошибок. на это LPSTR ActW = new TCHAR; ругается с...

С++ преобразование типов - C++
Есть переменная целочисленного типа например int A(например 2356).Нужно преобразовать ее к типу LPTCSTR и передать ее WinAPI функции...

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

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
volovzi
267 / 169 / 8
Регистрация: 14.03.2010
Сообщений: 501
27.01.2011, 16:19     Преобразование типов #2
Неявного преобразования типов желательно избегать (если, конечно, изначально не ставится обратная цель). Для этого надо, во-первых, определить оператор умножения для класса A, а во-вторых, конструктор класса T, принимающий аргументом объект класса А, сделать явным (то есть написать перед ним слово explicit).
alex_x_x
бжни
2447 / 1652 / 84
Регистрация: 14.05.2009
Сообщений: 7,162
28.01.2011, 04:46     Преобразование типов #3
ааа, приведите пример, у меня без явного преобразования не заработало
хотя не удивлюсь если так
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
28.01.2011, 06:28     Преобразование типов
Еще ссылки по теме:

Преобразование типов. - C++
Подскажите как правильно преобразовать типы в следующем фрагменте: int i; i=GetKeyboardType(0); reinterpret_cast <char> (i); ...

Преобразование типов - C++
Вот я создаю двумерный массив n=1; m=2; char **mas=new char *; mas=new char; после этого мне нужно увеличить размер...

Преобразование типов - C++
кое-что о преобразовании типов. float F; __int32 DW; DW=*(__int32 *)&F; значение DW должно совпадать с F побитово, без всяких...

преобразование типов - C++
memcpy((void*)stroka,(void*)stroka,ykaz_bukva-ykaz_temp+1); что нужно поставить вместо void* чтоб не было предупреждений


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

Или воспользуйтесь поиском по форуму:
taras atavin
Ушёл с форума.
3569 / 1752 / 91
Регистрация: 24.11.2009
Сообщений: 27,619
28.01.2011, 06:28     Преобразование типов #4
У тебя оба класса имеют общую суть и логичней всего было бы наследовать оба класса от общего абстрактного предка.

Добавлено через 4 минуты
И почему без явного преобразования не заработало? Сделай оператор умножения в классе A и всё будет работать. И, наоборот, сделай оператор сложения в классе T. Причём, реализация может использовать и приведение типа, но уже явное:
C++
1
2
3
4
T T::operator + (T y)
{
 return (T)(((A)*this)+((A)y));
}
и
C++
1
2
3
4
A A::operator * (A y)
{
 return (A)(((T)*this)*((T)y));
}
.
Yandex
Объявления
28.01.2011, 06:28     Преобразование типов
Ответ Создать тему
Опции темы

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