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

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

Войти
Регистрация
Восстановить пароль
 
Konstantin_D
14 / 14 / 2
Регистрация: 21.07.2011
Сообщений: 89
#1

Перегрузка cout.operator<< - C++

18.02.2012, 15:33. Просмотров 469. Ответов 0
Метки нет (Все метки)

Не компилируется программа.
Проблема в перегрузке operator<< класса ostream. Как его правильно определить в виде шаблона?
Правильно ли делать класс исключения вложенным в шаболонный класс контейнера?
Есть ли возможность написать обработчик для всех специализаций шаблона? (catch(Stack<T>::Bad_index){} )
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
#include <iostream>
#include <cstdlib>
#include <exception>
using namespace std;
 
template <typename T>
class Stack
{
public:
    class Bad_index: public exception
    {
    public:
        Bad_index(const char* pch): exception(pch) {}
    };
private:
    enum {MAX = 10};
    const int SIZE;
    T* p;
    int top;
    Stack& operator==(const Stack& s) {return *this;}
public:
    explicit Stack(int sz = MAX): SIZE(sz), top(0), p(new T[SIZE]) {}
    Stack(const Stack& s);
    ~Stack() {delete [] p;}
    bool isfull(){return top==SIZE;}
    bool isempty(){return top==0;}
    T& pop();
    void push(const T& t);
    friend ostream& operator<<(ostream& os, Stack<T>& s);
};
template <typename T>
Stack<T>::Stack(const Stack& s): SIZE(s.SIZE), top(s.top), p(new T[SIZE])
{
    for (register int i=0; i<top; ++i)
        p[i] = s.p[i];
}
template <typename T>
T& Stack<T>::pop()
{
    if (isempty())
        throw Bad_index("Exception. Stack is empty.");
    return p[--top];    
}
template <typename T>
void Stack<T>::push(const T& t)
{
    if (isfull())
        throw Bad_index("Exception. Stack is full.");
    p[top++] = t;
}
template <typename T>
ostream& operator<<(ostream& os, Stack<T>& s)
{
    if (s.isempty())
        cout << "Stack is empty.";
    else
        for (register int i=0; i<s.top; ++i)
            os << s.p[i] << " ";
    return os;
}
 
int main()
try{
    const int MAX = 7;
    Stack<int> s1(MAX);
    cout << s1 << endl;
    for (register int i=0; !s1.isfull(); ++i)
        s1.push(i);
    cout << s1 << endl;
//  s1.push(666);
    while ( !s1.isempty() )
        cout << "Pop val = " << s1.pop() << "; " << s1 << endl;
}
catch(Stack<int>::Bad_index& ex)
{
    cout << ex.what() << endl;
    exit(1);
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
18.02.2012, 15:33     Перегрузка cout.operator<<
Посмотрите здесь:

перегрузка cout, operator<< - C++
Как реализовано, что можно перегрузить operator&lt;&lt; в потоке вывода, если нету объявления нужной функции внутри класса?

Перегрузка cout - C++
Всем привет ! Есть клас class person { private: string name; string surname; unsigned int age;

Перегрузка operator+ - C++
Как сложить суму годовы продаж всех компаний? Можно использовать перегрузку оператора +? #include &lt;iostream.h&gt; #include &lt;math.h&gt; ...

Перегрузка operator new - C++
Столькнулся с такой проблемой: Есть класс Array, в его конструкторе создается массив int Array::Array(const size_t...

перегрузка operator<< - C++
помогите отгадать в чет ошибка class MCL{ private: int x,y; public: friend ostream&amp; operator&lt;&lt;(ostream &amp;s, MCL &amp;c); }; ...

Перегрузка operator<< - C++
Доброе время суток. Есть очередная задачка - перегрузить оператор вывода таким образом: Есть три объекта разных классов - А а, В...

Перегрузка operator[] - C++
Забыл как перегружать оператор для присваивания значений, а найти не могу ._. Чтобы было вот так: Class A { private: char...

Перегрузка operator+ - C++
Нужно сложить число с каждым елементом вектора, вот мой код: MyVectorClass.h namespace program { class MyVectorClass { ...

Перегрузка operator->() - C++
Всем привет! Прохожу тему дескрипторов и меня удивляет как работает перегруженный operator-&gt;(). //какой то интерфейс struct...

Перегрузка operator-> () - C++
здравствуйте, объясните пож. как работает operator-&gt; (). Что происходит при этом мне понятно, но непонятно как. template &lt;typename T&gt; ...


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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Ответ Создать тему
Опции темы

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