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

Перегрузка операций '<<' и '>>' - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ немагу найти ошибку http://www.cyberforum.ru/cpp-beginners/thread177581.html
#include <stdio.h> #include <iostream> #include <math.h> #include <conio.h> #include <stdlib.h> using namespace std; void main() { float x, ans;
C++ Реализовать программу для хранения данных Реализовать программу для хранения данных о ценах на компьютерные комплектующие. Предусмотреть следующие поля: наименование, инвентарный номер, габариты. Для изделий, присутствующих на складе, указать цену, для остальных – наименование поставщика и ожидаемый срок поставки (количество дней). Реализовать добавление элемента в список. Предоставить возможность отображения всех элементов списка и... http://www.cyberforum.ru/cpp-beginners/thread177573.html
циклы for, while C++
for: Среди всех n-значных чисел (n = 1,2,3,4) указать те, сумма цифр которых равна данному числу k. while: Дано натуральное число n. Поменять порядок следования цифр в этом числе на обратный. (только не по цифрам отдельно менять и выводить,а само число целиком)
C++ нужен ли свой деструктор
Есть класс class Vetv { public: Vetv(int a,int b, int *ves); Vetv(); virtual ~Vetv(void); int nFrom; int nTo; int *Ves;
C++ Одномерный массив http://www.cyberforum.ru/cpp-beginners/thread177553.html
Нужно написать прогу с использованием статического и динамического распределения памяти. Дан массив действительных чисел. Если его первый элемент не является максимальным элементом массива, то создать новый массив, расположив в нем элементы так, чтобы вначале массива шла группа элементов, больших первого элемента исходного массива. Затем - сам этот элемент, потом - группа элементов, меньших...
C++ Вывести все простые числа до n должно быть так bool SimpleNumber(long int) int main() telo ........ подробнее

Показать сообщение отдельно
Nameless One
Эксперт С++
 Аватар для Nameless One
5755 / 3404 / 255
Регистрация: 08.02.2010
Сообщений: 7,393
17.10.2010, 17:20     Перегрузка операций '<<' и '>>'
Я думаю, смысл создавать подобный интерфейс для работы с очередью в том, чтобы можно было "сцеплять" операторы постановки и изъятия из очереди (навроде работы с потоками ввода-вывода С++). А для этого необходимо, чтобы операторы возвращали ссылку на объект-очередь, а в параметрах принимали ссылку на элемент. Вроде бы в библиотеке контейнеров Qt я уже видел что-то подобное.
Сделал так:
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
#include <iostream>
#include <stdexcept>
#include <cstdlib>
 
namespace my
{
    template<class T>
    class queue
    {
    
    public:
        
        queue();
        ~queue();
        
        queue<T>& operator << (const T& elem);
        queue<T>& operator >> (T& elem);
        
        bool empty() const;
        
    private:
    
        struct node
        {
            T       data;
            node*   next;
            
            node(const T& elem)
                : data(elem), next(NULL) {}
        };
        
        node*   m_pnHead;
        node*   m_pnTail;
    };
    
    template<class T>
    queue<T>::queue()
        : m_pnHead(NULL), m_pnTail(NULL) {}
        
    template<class T>
    queue<T>::~queue()
    {
        while(m_pnHead)
        {
            node* delnode = m_pnHead;
            m_pnHead = m_pnHead->next;
            delete delnode;
            delnode = NULL;
        }
    }
    
    template<class T>
    queue<T>& queue<T>::operator << (const T& elem)
    {
        node* newnode = new node(elem);
        if(!m_pnTail)
            m_pnHead = newnode;
        else
            m_pnTail->next = newnode;
        m_pnTail = newnode;
        return *this;
    }
    
    template<class T>
    queue<T>& queue<T>::operator >> (T& elem)
    {
        if(!m_pnHead)
            throw std::runtime_error("queue is already empty!");
        node* delnode = m_pnHead;
        m_pnHead = m_pnHead->next;
        
        elem = delnode->data;
        delete delnode;
        delnode = NULL;
        return *this;
    }
    
    template<class T>
    bool queue<T>::empty() const
    {
        return m_pnHead == NULL;
    }
}
 
int main()
{
    my::queue<int> iqueue;
    iqueue << 4 << 6 << 8; // Ставим элементы в очередь
    int a, b, c;
    iqueue >> a >> b >> c; // Вынимаем элементы из очереди
    std::cout << "a = " << a << ", b = " << b << ", c = " << c << std::endl;
    return EXIT_SUCCESS;
}
PS. А вот то, что ты не определил деcтруктор - плохо!
 
Текущее время: 11:46. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru