Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 15.03.2014, 18:42   #1
Praud
Форумчанин
 
Аватар для Praud
 
Регистрация: 11.10.2012
Сообщений: 409
По умолчанию перегрузка оператора <<

Как правильно перегрузить оператор << для вывода в стандартный поток?

Код:
ostream& operator<<(ostream&, const Stack&);
Пишу так, компилятор не принимает 2х аргументов Oo.
Кстати, метод не должен быть friend
Praud вне форума Ответить с цитированием
Старый 15.03.2014, 19:07   #2
BDA
МегаМодератор
СуперМодератор
 
Аватар для BDA
 
Регистрация: 09.11.2010
Сообщений: 7,322
По умолчанию

Правильно именно с friend. Получился вот такой изврат:
Код:
#include <iostream>
using namespace std;

class Stack {
    int a[10];
public:
    ostream& operator<< (ostream &f) {
        for (int i = 0; i < 10; ++i)
            f << this->a[i] << " ";
        return f;
    }
    int& operator[] (int i) {
        return a[i];
    }
};

int
main()
{
    Stack p;
    for (int i = 0; i < 10; ++i)
        p[i] = i;
    p << cout;
}
Насчет прошлой темы (про занесение в стек) - нету времени подумать. В C++ принято использовать всякие специальны классы (vector, например) для хранения, а не самому работать с памятью.
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )
BDA вне форума Ответить с цитированием
Старый 15.03.2014, 19:16   #3
Praud
Форумчанин
 
Аватар для Praud
 
Регистрация: 11.10.2012
Сообщений: 409
По умолчанию

А вот теперь назревает вопрос, как определить кол-во элементов в стеке?
Вы явно вывели 10 элементов, а откуда мне знать, что их будет у меня 10?
Praud вне форума Ответить с цитированием
Старый 15.03.2014, 19:31   #4
Praud
Форумчанин
 
Аватар для Praud
 
Регистрация: 11.10.2012
Сообщений: 409
По умолчанию

Хотя всё, понял. У меня же есть свойство size, я и не подумал.

Написал вот так вот:
Код:
ostream& Stack::operator<<(ostream& os)
{
	for (int i = 0; i < size; ++i)
        os << this->st[i] << " ";
        return os;
}
Но при вызове
Stack a(3);
cout<<a;

пишет, что отсутствует оператор соответствующим этим операндам
Praud вне форума Ответить с цитированием
Старый 15.03.2014, 20:14   #5
BDA
МегаМодератор
СуперМодератор
 
Аватар для BDA
 
Регистрация: 09.11.2010
Сообщений: 7,322
По умолчанию

Код:
ostream& Stack::operator<<(ostream& os)
{
    for (int i = 0; i < this->size; ++i)
        os << this->st[i] << " ";
    return os;
}
...
Stack a(3);
a << cout;
Поэтому я и говорил, что это изврат, так как a и cout меняются местами
Может быть, кто-нибудь предложит вариант решения с привычным порядком.
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )
BDA вне форума Ответить с цитированием
Старый 15.03.2014, 20:28   #6
Praud
Форумчанин
 
Аватар для Praud
 
Регистрация: 11.10.2012
Сообщений: 409
По умолчанию

Такое явно мне не подходит
Praud вне форума Ответить с цитированием
Старый 15.03.2014, 20:35   #7
BDA
МегаМодератор
СуперМодератор
 
Аватар для BDA
 
Регистрация: 09.11.2010
Сообщений: 7,322
По умолчанию

Почему нельзя использовать friend?
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )
BDA вне форума Ответить с цитированием
Старый 15.03.2014, 20:47   #8
Praud
Форумчанин
 
Аватар для Praud
 
Регистрация: 11.10.2012
Сообщений: 409
По умолчанию

Перегруженные операции-методы класса:
- удаление элемента;
[] индексирование;
= копирование;
<< вывод значения контейнера в стандартный поток вывода
Перегруженные операции-друзья класса:
+ добавление элемента;
== отношение равенства;
> отношение порядка;
Praud вне форума Ответить с цитированием
Старый 15.03.2014, 21:41   #9
Praud
Форумчанин
 
Аватар для Praud
 
Регистрация: 11.10.2012
Сообщений: 409
По умолчанию

Помогите написать конструктор копирования )

Код:
class Stack
{
private:
	myString *st;
	int size;
	int index;
           ....
Код:
Stack::Stack(int k)
{
	size=k;
	st=new myString[size];
	index=0;
}
А вот моя попытка

Код:
Stack::Stack(Stack &a)
{
	st = new myString[a.size]; 
    index = a.getIndex();
    for(int i = 0; i < index; i++)
        st[i] = a.getSt()[i];
}
Не работает
Praud вне форума Ответить с цитированием
Старый 15.03.2014, 22:03   #10
Praud
Форумчанин
 
Аватар для Praud
 
Регистрация: 11.10.2012
Сообщений: 409
По умолчанию

а, всё, получилось
Praud вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Перегрузка оператора [] C++ Cannibal Помощь студентам 1 21.05.2013 13:02
Перегрузка оператора^ Voronar Общие вопросы C/C++ 2 03.12.2012 23:26
Перегрузка оператора [] dbazulev Общие вопросы C/C++ 1 02.12.2012 20:19
перегрузка оператора + nesss Помощь студентам 0 01.11.2011 02:23
С++ перегрузка оператора cati Помощь студентам 10 21.04.2010 23:38