Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.85/13: Рейтинг темы: голосов - 13, средняя оценка - 4.85
 Аватар для MrLinder
0 / 0 / 0
Регистрация: 04.10.2014
Сообщений: 41

Перегрузка дружественного оператора вывода в шаблонном классе

17.06.2015, 01:16. Показов 2586. Ответов 4
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте!

Я не могу понять как мне правильно сделать перегрузку оператора вывода ввывода в шаблонном классе

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
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
/*----------------Class Data--------------------*/
 
template <class T>
class Data{
public: 
    T *Elem;
};
 
/*----------------Class Node--------------------*/
template <class T>
class List;
 
template <class T>
class Node
{
protected:
    Data<T> *key;
    Node<T> *next;
    Node<T> *prev;
    Node(){ next = prev = NULL; cout<<"Node Const"<<endl;}
    ~Node(){cout<<"Node Dictr"<<endl;}
    friend class List<T>;
};
 
/*----------------Class List--------------------*/
template <class T>
class List 
{
     Node<T> *Begin;            //Указатель на первый элемент списка
        Node<T> *End;               //Указатель на последний элемент списка
    Node<T> *Temp;              //Указатель на временный элемент списка
public:
  
   List(); 
    ~List();
    void PushBack(T const &add=0 );
    void ShowAll();
 
/*-------------------------Перегрузка оператора--------------------------------*/
 
template <class X>
friend ostream &operator<<(ostream &stream, List<X>); //перегрузка оператора вывода
 
};
 
//вывод данных через поток
template <typename X> ostream &operator<<(ostream &stream, List<X>)
{
         Node<X> *item = List<X>::Begin;
         stream << item -> key -> Elem[0] ; 
         return stream;         
}
 
/*--------------------------------------------------------------------------------------*/
 
template <class T>
List<T>::List(){}
 
template <class T>
List<T>::~List(){}
 
template <class T>
void List<T>::PushBack( T const &add)
{ 
    if(!End)                                
    {
        End = new Node<T>();                
        End -> prev = NULL;                 
        Begin = End;
    }
    else                                            
    {
        End -> next = new Node<T>();        
            
            Temp = End;                 
            End = End -> next;      
            End -> prev = Temp;             
    }
 
    End -> key = new Data<T>();         
        End -> key -> Elem = new T[1];  
            End -> key -> Elem[0] = add;    
 
    End -> next = NULL;                 
}
 
template <class T>
void List<T>::ShowAll()
{ 
    Node<T> *p = Begin;
    if(p)
    {
        while(p != NULL)
        {
            cout << p -> key -> Elem[0] << "->";
            p = p -> next;
        };
        cout << "NULL" << endl;
    }
    else
    {
        cout << "Element not found or Out of values" << endl;
            exit(1);
        return;
    }
    delete p;
}
 
 
 
 
 
 
using namespace std;
int main ()
{
    
    List<int> *Objint = new List<int>();
    
    Objint -> PushBack(Arr, 20);
        
    //Objint -> ShowAll();
    
    cout << Objint << endl;
    
    delete Objint;
    
 
}
0
Лучшие ответы (1)
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
17.06.2015, 01:16
Ответы с готовыми решениями:

Перегрузка оператора в шаблонном классе
Здравствуйте! Есть шаблонный класс Array, описывающий массив. Такая проблема: нужно перегрузить оператор &quot;&lt;&quot;, который...

Перегрузка операторов ввода и вывода из потока в шаблонном классе
Доброго времени суток. Пишу свой вектор. В нём надо перегрузить вышеназванные операторы. Vector.h class Vector { // ... ...

Перегрузка операторов из дружеской функции в шаблонном классе
Скомпилировал http://dmtsoft.ru/bn/370/as/oneaticleshablon/. Как только перенёс в свой шаблонный класс почти весь этот исходник перестали...

4
Модератор
Эксперт С++
 Аватар для zss
13773 / 10966 / 6491
Регистрация: 18.12.2011
Сообщений: 29,244
17.06.2015, 07:25
Лучший ответ Сообщение было отмечено MrLinder как решение

Решение

Ошибки компиляции исправил.
Остались ошибки времени исполнения.
Воспользуйтесь отладчиком, чтобы их исправить.
https://www.cyberforum.ru/cpp-... 62479.html
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
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
#include <iostream>
using namespace std;
/*----------------Class Data--------------------*/
 
template <class T>
class Data{
public: 
    T *Elem;
};
 
/*----------------Class Node--------------------*/
template <class T>
class List;
 
template <class T>
class Node
{
protected:
    Data<T> *key;
    Node<T> *next;
    Node<T> *prev;
    Node(){ next = prev = NULL; cout<<"Node Const"<<endl;}
    ~Node(){cout<<"Node Dictr"<<endl;}
    friend class List<T>;
    template <class X>
    friend ostream& operator<<(ostream& stream, List<X>); //перегрузка оператора вывода
};
 
/*----------------Class List--------------------*/
template <class T>
class List 
{
     Node<T> *Begin;            //Указатель на первый элемент списка
     Node<T> *End;               //Указатель на последний элемент списка
     Node<T> *Temp;              //Указатель на временный элемент списка
public:
  
   List(); 
    ~List();
    void PushBack(T const &add=0 );
    void ShowAll();
 
/*-------------------------Перегрузка оператора--------------------------------*/
 
template <class X>
friend ostream& operator<<(ostream& stream, List<X>); //перегрузка оператора вывода
 
};
 
//вывод данных через поток
template <typename X> 
ostream &operator<<(ostream &stream, List<X> x)
{
         Node<X> *item = x.Begin;
         stream << item -> key -> Elem[0] ; 
         return stream;         
}
 
/*--------------------------------------------------------------------------------------*/
 
template <class T>
List<T>::List(){}
 
template <class T>
List<T>::~List(){}
 
template <class T>
void List<T>::PushBack( T const &add)
{ 
    if(!End)                                
    {
        End = new Node<T>();                
        End -> prev = NULL;                 
        Begin = End;
    }
    else                                            
    {
        End -> next = new Node<T>();        
            
            Temp = End;                 
            End = End -> next;      
            End -> prev = Temp;             
    }
 
    End -> key = new Data<T>();         
        End -> key -> Elem = new T[1];  
            End -> key -> Elem[0] = add;    
 
    End -> next = NULL;                 
}
 
template <class T>
void List<T>::ShowAll()
{ 
    Node<T> *p = Begin;
    if(p)
    {
        while(p != NULL)
        {
            cout << p -> key -> Elem[0] << "->";
            p = p -> next;
        };
        cout << "NULL" << endl;
    }
    else
    {
        cout << "Element not found or Out of values" << endl;
            exit(1);
        return;
    }
    delete p;
}
 
int main ()
{
    List<int> *Objint=new List<int>;
    int Arr[20]={1,2,3,4,5,6};
    for(int i=0;i<20;i++)
       Objint->PushBack(Arr[i]);
    cout << *Objint << endl;
    delete Objint;
    system("pause");
    return 0;
}
0
654 / 575 / 164
Регистрация: 13.12.2012
Сообщений: 2,124
17.06.2015, 10:03
zss,
Цитата Сообщение от zss Посмотреть сообщение
C++
1
friend ostream& operator<<(ostream& stream, List<X>); //перегрузка оператора вывода
Цитата Сообщение от zss Посмотреть сообщение
C++
1
ostream &operator<<(ostream &stream, List<X> x)
копируте, ай яй, плохому научите человека)

Добавлено через 44 секунды
учитывая кто копиконструктора нет, печаль...
1
Модератор
Эксперт С++
 Аватар для zss
13773 / 10966 / 6491
Регистрация: 18.12.2011
Сообщений: 29,244
17.06.2015, 10:12
aLarman, Я и написал, что я исправил только ошибки компиляции.
0
 Аватар для MrLinder
0 / 0 / 0
Регистрация: 04.10.2014
Сообщений: 41
17.06.2015, 13:04  [ТС]
А как конструктор копрования должен выглядеть тут ?

Добавлено через 1 минуту
И почему дружественная функция перегрузки оператора объявляется в 2х классах?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
17.06.2015, 13:04
Помогаю со студенческими работами здесь

Перегрузка оператора вывода в классе "Время"
Здравствуйте. Столкнулся с проблемой при работе с классом (Время), что выводит или чушь или вообще ничего не выводит. Прописал (вроде бы) 1...

Перегрузка оператора вывода в С++ (для вывода данных вектора)
Как правильно перегрузить оператор вывода для вектора чтобы он выводил все данные из вектора ? Для этого класса есил можно помогите. ...

Перегрузка оператора '=' в классе
#include &lt;iostream&gt; #include &lt;cstring&gt; using std::cout; using std::endl; class CMessage { public: ...

Перегрузка оператора [] в классе
У меня есть класс Array(одномерный массив), и стоит задача перегрузка оператора. Реализовать для объектов данного класса перегрузку...

Перегрузка оператора присваивания в классе
Напишите пожалуйста простой пример перегрузки оператора присваивания в классе и пояснение зачем это надо


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

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip На первой гифке отладочные линии отключены, а на второй включены:. . .
SDL3 для Web (WebAssembly): Идентификация объектов на Box2D v3 - использование userData и событий коллизий
8Observer8 02.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-collision-events-sdl3-c. zip https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11680&amp;d=1772460536 Одним из. . .
Реалии
Hrethgir 01.03.2026
Нет, я не закончил до сих пор симулятор. Эта задача сложнее. Не получилось уйти в плавсостав, но оно и к лучшему, возможно. Точнее получалось - но сварщиком в палубную команду, а это значит, в моём. . .
Ритм жизни
kumehtar 27.02.2026
Иногда приходится жить в ритме, где дел становится всё больше, а вовлечения в происходящее — всё меньше. Плотный график не даёт вниманию закрепиться ни на одном событии. Утро начинается с быстрых,. . .
SDL3 для Web (WebAssembly): Сборка библиотек: SDL3, Box2D, FreeType, SDL3_ttf, SDL3_mixer и SDL3_image из исходников с помощью CMake и Emscripten
8Observer8 27.02.2026
Недавно вышла версия 3. 4. 2 библиотеки SDL3. На странице официальной релиза доступны исходники, готовые DLL (для x86, x64, arm64), а также библиотеки для разработки под Android, MinGW и Visual Studio. . . .
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru