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

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

Восстановить пароль Регистрация
 
Mee
 Аватар для Mee
14 / 14 / 1
Регистрация: 05.07.2010
Сообщений: 88
27.01.2011, 02:48     Преобразование типов #1
Вообщем допустим есть два класа, класс 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++ Преобразование типов
Преобразование типов C++
C++ Преобразование типов
C++ преобразование типов
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
volovzi
266 / 168 / 8
Регистрация: 14.03.2010
Сообщений: 501
27.01.2011, 16:19     Преобразование типов #2
Неявного преобразования типов желательно избегать (если, конечно, изначально не ставится обратная цель). Для этого надо, во-первых, определить оператор умножения для класса A, а во-вторых, конструктор класса T, принимающий аргументом объект класса А, сделать явным (то есть написать перед ним слово explicit).
alex_x_x
бжни
 Аватар для alex_x_x
2441 / 1646 / 84
Регистрация: 14.05.2009
Сообщений: 7,163
28.01.2011, 04:46     Преобразование типов #3
ааа, приведите пример, у меня без явного преобразования не заработало
хотя не удивлюсь если так
taras atavin
Ушёл с форума.
 Аватар для 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     Преобразование типов
Ответ Создать тему
Опции темы

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