![]() |
Модераторы: Daevaorn |
![]() ![]() ![]() |
|
AlexKar |
|
|||
Новичок Профиль Группа: Участник Сообщений: 5 Регистрация: 7.12.2005 Репутация: нет Всего: нет |
Как реализовать такую задачу?
Есть два параметризованных класса: template <class T> class A{ --------- private: T width; }; template <class T> class B{ --------- private: T width; }; Надо перегрузить оператор присваивания таким образом, чтобы можно было выполнить следующее: int main(void); /* T1 и T2 - определенные типы, например int и float */ A<T1> a; B<T2> b; a=b; // Надо выполнить эти операции присваивания b=a; return 0; } Когда T1==T2 тогда все понятно: template <class T> class A{ public: --------- void operator = (const B<T>&); private: T width; }; template <class T> void A<T>::operator = (const B<T>& rhs){ this->width=rhs.width; } Аналогично перегружаем = в классе B, но что делать, если T1!=T2, как тогда перегрузить оператор = ? template <class T> class A{ public: --------- template <class N> void operator = (const B<N>&); private: T width; }; template <class T,class N> void A<T>::operator = (const B<N>& rhs){ this->width=rhs.width; } Над такой записью компилятор ругается, есть ли у вас какие-либо варианты;) |
|||
|
||||
blackofe |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 173 Регистрация: 29.11.2005 Репутация: 4 Всего: 4 |
AlexKar
вот такое компилится и работает:
выдает на выходе: a.width = 10 b.width = 20 a.width = 20 b.width = 20 a.width = 20 b.width = 20 Press any key to continue то, что тебе нужно? кстати, тебе только нужно позаботиться о возможности преобразования T в N и обратно. я выбрал int и long - понятно, что компилятор сделает необходимые приведения. Это сообщение отредактировал(а) blackofe - 7.12.2005, 19:58 |
|||
|
||||
Earnest |
|
||||||||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5962 Регистрация: 17.6.2005 Где: Рязань Репутация: 53 Всего: 183 |
... позаботится об этом тоже можно как-нибудь погибчее. Например, так:
Соответственно, в коде оператора присваивания от blackofe вместо
Для тривиальных случаев сойдет стандартная реализация type_cast, для более сложных - пишем необходимые специализации... -------------------- ... |
||||||||
|
|||||||||
blackofe |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 173 Регистрация: 29.11.2005 Репутация: 4 Всего: 4 |
Earnest
примерно это я и имел в виду. |
|||
|
||||
![]() ![]() ![]() |
Правила форума "С++:Общие вопросы" | |
|
Добро пожаловать!
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |