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

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

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 11, средняя оценка - 4.73
Serejke_qq
150 / 108 / 9
Регистрация: 06.07.2011
Сообщений: 224
Завершенные тесты: 2
#1

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

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

Доброго времени суток всем! Данная тема не раз подымалась на форуме.. Но есть но..
Помогите перегрузить операторы побитового сдвига для шаблонного класса (Для ввода/вывода данных)
как пример :
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;
}
Что не так и почему..?
Лучшие ответы (1)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
20.01.2012, 22:51     Перегрузка << , >> для шаблонного класса
Посмотрите здесь:

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

Перегрузка operator<< для шаблонного класса - C++
Добрый день не могу понять как реализовать перегрузку &lt;&lt; для шаблонного класса template &lt;class T&gt; class List { public: ...

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

Перегрузить operator<<() для шаблонного класса (перегрузка оператора вывода) - C++
Здравствуйте. Перегружаю оператор вывода для шаблонного класса. using namespace std; template &lt;class Element&gt; class List { ...

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

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

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
DU
1482 / 1058 / 45
Регистрация: 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;
}
Dekio
Фрилансер
Эксперт С++
5837 / 1218 / 214
Регистрация: 23.11.2010
Сообщений: 3,378
Записей в блоге: 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>& );
Ma3a
Эксперт C++
616 / 460 / 31
Регистрация: 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>& );
};
// ...
DU
1482 / 1058 / 45
Регистрация: 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;
}
Но чтобы не было путаницы лучше так не делать. С этим я согласен.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
20.01.2012, 23:46     Перегрузка << , >> для шаблонного класса
Еще ссылки по теме:

Перегрузка операторов шаблонного класса дружественными функциями - C++
При попытке скомпилировать проект выдаются следующие ошибки: Error 1: error LNK2019: unresolved external symbol &quot;class matrix&lt;int&gt;...

Вызов метода у шаблонного поля, шаблонного класса - C++
Пытаюсь разобраться с шаблонами- задача создать шаблонный класс, у которого есть шаблонное поле. и затем вызывать метод у этого поля. ...

итератор для шаблонного класса - C++
Всем солнца! Честно честно честно пересмотрел более 100 различных вариантов разных решений. НО.... :wall: есть список: ...

пространство имен для шаблонного класса - C++
template&lt;class T&gt; class BaseClass { T data; void show(); } Подскажите пожалуйста как написать тело функции. Если я неясно...

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

Как перегрузить операторы для шаблонного класса? - C++
Собственно задание: Нужно написать класс описывающий обычный вектор на плоскости. Для этого класса вам нужно реализовать сложение,...


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

Или воспользуйтесь поиском по форуму:
Dekio
Фрилансер
Эксперт С++
5837 / 1218 / 214
Регистрация: 23.11.2010
Сообщений: 3,378
Записей в блоге: 1
20.01.2012, 23:46     Перегрузка << , >> для шаблонного класса #6
Цитата Сообщение от DU Посмотреть сообщение
совпадение записи <class T> для класса и для функций? если вы это имели в виду, то возможно и нельзя.
Именно
Yandex
Объявления
20.01.2012, 23:46     Перегрузка << , >> для шаблонного класса
Ответ Создать тему
Опции темы

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