Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.67/15: Рейтинг темы: голосов - 15, средняя оценка - 4.67
199 / 142 / 57
Регистрация: 06.07.2011
Сообщений: 300
1

Перегрузка << , >> для шаблонного класса

20.01.2012, 22:51. Показов 2981. Ответов 5
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Доброго времени суток всем! Данная тема не раз подымалась на форуме.. Но есть но..
Помогите перегрузить операторы побитового сдвига для шаблонного класса (Для ввода/вывода данных)
как пример :
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
#include <iostream>
 
using namespace std;
 
template <class T>
class test
{
    private:
        T x;
 
    public :
        test(T set);
 
        friend ostream& operator << (ostream& , test& );
        friend istream& operator >> (istream& , test& );
};
 
template <class T>
istream& operator >> (istream& in, test<T>& obj)
{
    in >> obj.x;
    return in;
}
 
template <class T>
ostream& operator << (ostream& out,  test<T>& obj)
{
    out << obj.x;
    return out;
}
 
template <class T>
test<T>::test(T set)
{
    x = set;
}
 
//-----------------------------------------------
int main()
{
    test<int> t(0);
 
    cin >> t;
    cout << t;
 
    return 0;
}
Что не так и почему..?
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
20.01.2012, 22:51
Ответы с готовыми решениями:

Перегрузка для шаблонного класса
Есть шаблонный класс, который определен в заголовочном файле(list.h) Определение перегрузки вывода...

Перегрузка оператора -> для шаблонного класса
Здравствуйте! Возникла проблема: не могу додуматься как перегрузить оператор -&gt; так, чтобы он...

Перегрузка operator<< для шаблонного класса
Добрый день не могу понять как реализовать перегрузку &lt;&lt; для шаблонного класса template...

Перегрузка оператора -> для шаблонного класса
Как это написать не понимаю помогите пожалуйста Добавлено через 23 секунды пример кода...

5
DU
1500 / 1146 / 165
Регистрация: 05.12.2011
Сообщений: 2,279
20.01.2012, 23:13 2
друзья декларятся как шаблоны

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
#include <iostream>
 
using namespace std;
 
template <class T>
class test
{
    private:
        T x;
 
    public :
        test(T set);
 
        template <class T> 
        friend ostream& operator << (ostream& , const test<T>& );
 
        template <class T> 
        friend istream& operator >> (istream& , test<T>& );
};
 
template <class T>
istream& operator >> (istream& in, test<T>& obj)
{
    in >> obj.x;
    return in;
}
 
template <class T>
ostream& operator << (ostream& out,  const test<T>& obj)
{
    out << obj.x;
    return out;
}
 
template <class T>
test<T>::test(T set)
{
    x = set;
}
 
//-----------------------------------------------
int main()
{
    test<int> t(0);
 
    cin >> t;
    cout << t;
 
    return 0;
}
1
Фрилансер
Эксперт С++
5845 / 1226 / 499
Регистрация: 23.11.2010
Сообщений: 3,375
Записей в блоге: 1
20.01.2012, 23:18 3
Лучший ответ Сообщение было отмечено как решение

Решение

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
#include <iostream>
 
using namespace std;
 
template <class T>
class test
{
    public :
        T x;
        test(T set);
 
        template <typename Type>
        friend ostream& operator << (ostream& ,  test<Type>& );
        
        template <typename Type>
        friend istream& operator >> (istream& ,  test<Type>& );
};
 
 
template <class T>
istream& operator >> (istream& in, test<T>& obj)
{
    in >> obj.x;
    return in;
}
 
template <class T>
ostream& operator << (ostream& out,  test<T>& obj)
{
    out << obj.x;
    return out;
}
 
template <class T>
test<T>::test(T set)
{
    x = set;
}
 
//-----------------------------------------------
int main()
{
    test<int> t(0);
 
    cin >> t;
    cout << t;
 
    return 0;
}

DU, так нельзя.

Цитата Сообщение от DU Посмотреть сообщение
template <class T> class test
и там же


Цитата Сообщение от DU Посмотреть сообщение
template <class T> friend ostream& operator << (ostream& , const test<T>& );
1
Эксперт С++
623 / 467 / 57
Регистрация: 28.01.2011
Сообщений: 605
20.01.2012, 23:28 4
Serejke_qq, можно также объявить заранее шаблон test<T>, потом написать объявление шаблонной функции operator << (operator >>), а далее воспользоваться при описании внутренностей test<T> специализацией operator << (operator >>) для конкретного типа T:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
template <typename T>
class test;
template <typename T>
ostream & operator << (ostream & out, test<T> & obj);
 
template <class T>
class test
{
    private:
        T x;
 
    public :
        test(T set);
 
        friend ostream& operator << <T> (ostream& , test<T>& );
};
// ...
1
DU
1500 / 1146 / 165
Регистрация: 05.12.2011
Сообщений: 2,279
20.01.2012, 23:34 5
Dekio , я не понял что нельзя и почему нельзя?

совпадение записи <class T> для класса и для функций? если вы это имели в виду, то возможно и нельзя. что в стандарте написано я не знаю. Но лучше конечно так не делать и для ф-ий что-то другое написать. Но студия скомпиляла, я и запостил.
Быть может в декларации открываеттся своего рода скоуп, внутри которого имена перекрывают имена из вышестоящего скоупа.
Что-то аналогичное
C++
1
2
3
4
int i = 0;
{
  int i = 0;
}
Но чтобы не было путаницы лучше так не делать. С этим я согласен.
0
Фрилансер
Эксперт С++
5845 / 1226 / 499
Регистрация: 23.11.2010
Сообщений: 3,375
Записей в блоге: 1
20.01.2012, 23:46 6
Цитата Сообщение от DU Посмотреть сообщение
совпадение записи <class T> для класса и для функций? если вы это имели в виду, то возможно и нельзя.
Именно
0
20.01.2012, 23:46
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
20.01.2012, 23:46
Помогаю со студенческими работами здесь

Перегрузка оператора вывода на консоль для шаблонного класса
Следующий код компилируется, но не линкуется: #include &lt;iostream&gt; using namespace std; ...

Перегрузить operator<<() для шаблонного класса (перегрузка оператора вывода)
Здравствуйте. Перегружаю оператор вывода для шаблонного класса. using namespace std; template...

Перегрузка оператора << шаблонного класса
Всем доброго времени суток! Целый день бьюсь над перегрузкой оператора &lt;&lt; в шаблонном классе...

Перегрузка операторов шаблонного класса C++
Написал такой шаблонный класс вектора: template &lt;typename Type&gt; class TVector; ...


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

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru