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

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

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 24.06.2015, 13:49   #1
RAFA91
Заблокирован
 
Регистрация: 06.02.2011
Сообщений: 1,999
По умолчанию Не работает оператор <<

Всем доброго дня !

Подскажите пожалуйcта почему не работает оператор <<, когда я его обьявляю методом класса ?

Получаю 1 ошибку (((
Код:
#include <stdio.h>
#include <conio.h>
#include<iostream>
 
using namespace std;
 
 
 
class Rafa
 
{
 
private:
    
    int x;
 
public:
 
    Rafa()  {}
 
    Rafa(int a) : x(a) {}
 
    ~Rafa() {}
    
    int ana() const {return x;}
 
    Rafa & operator = (const Rafa &rhs)
 
    {
        if(this == &rhs) return *this;
 
        x = rhs.x;
 
        return *this;
    }
 
    Rafa(const Rafa &rhs) : x(rhs.x) {}
 
    ostream & operator << (ostream & output)
    
    {
        output << "\n" << x <<"\n";
        
        return output;
    }
 
};
 
 
int main()
 
{
    
    Rafa P(90100);
 
    printf("\n***** P = %p \n",&P);
 
    cout << P;
    
    getch();
 
    return 0;
}
работает только как друг класса.

Код:
#include <stdio.h>
#include <conio.h>
#include<iostream>
 
using namespace std;
 
 
 
class Rafa
 
{
 
private:
    
    int x;
 
public:
 
    Rafa()  {}
 
    Rafa(int a) : x(a) {}
 
    ~Rafa() {}
    
    int ana() const {return x;}
 
    Rafa & operator = (const Rafa &rhs)
 
    {
                if(this == &rhs) return *this;
 
        x = rhs.x;
 
        return *this;
    }
 
    Rafa(const Rafa &rhs) : x(rhs.x) {}
 
    friend ostream & operator << (ostream & output, const Rafa &rhs);
 
};
 
ostream & operator << (ostream & output, const Rafa &rhs)
 
{
        output << "\n" <<rhs.x <<"\n";
        
    return output;
}
 
 
 
int main()
 
{
    
    Rafa P(90100);
 
    printf("\n***** P = %p \n",&P);
 
    cout << P;
    
    getch();
 
    return 0;
}
RAFA91 вне форума Ответить с цитированием
Старый 24.06.2015, 14:01   #2
waleri
Старожил
 
Регистрация: 13.07.2012
Сообщений: 6,330
По умолчанию

Ну почему не работает...
P << cout
будет работать.

Оператор - это тот же метод.
lvalue operator rvalue
это то же самое, что и:
lvalue.method(rvalue);

В данном случае вам надо "добавить" метод в cout.
Единственный способ это сделать, это через глобальный вариант оператора.
waleri вне форума Ответить с цитированием
Старый 24.06.2015, 14:13   #3
RAFA91
Заблокирован
 
Регистрация: 06.02.2011
Сообщений: 1,999
По умолчанию

почему не работает оператор <<, когда я его обьявляю методом класса Rafa?
RAFA91 вне форума Ответить с цитированием
Старый 24.06.2015, 15:11   #4
miss twin
Пользователь
 
Регистрация: 19.06.2015
Сообщений: 15
По умолчанию

Цитата:
Сообщение от RAFA91 Посмотреть сообщение
почему не работает оператор <<, когда я его обьявляю методом класса Rafa?
Если коротко, то потому что вы не правильно его используете. Если он член класса, то и вызываться должен, как объект_вашего_класса << .

Если же вы хотите, сделать вывод через cout вашего класса, то самый правильный вариант - дружеская функция... ну или лопатить стандартную либу со всеми вытекающими.
miss twin вне форума Ответить с цитированием
Старый 24.06.2015, 15:40   #5
RAFA91
Заблокирован
 
Регистрация: 06.02.2011
Сообщений: 1,999
По умолчанию

Цитата:
Сообщение от miss twin Посмотреть сообщение
Если коротко, то потому что вы не правильно его используете. Если он член класса, то и вызываться должен, как объект_вашего_класса << .
это как ?
RAFA91 вне форума Ответить с цитированием
Старый 24.06.2015, 16:44   #6
miss twin
Пользователь
 
Регистрация: 19.06.2015
Сообщений: 15
По умолчанию

Так же как и, например, ваш = или другие паблик методы. Если вы пишите:
Код:
class A {
  public:
    A(){}

    void func(){...}
    ostream & operator << (ostream & output){...}
};
то и вызываются они соответственно:
Код:
A a;
a.func();
a << smth; // что эквивалентно a.operator<<(smth);
miss twin вне форума Ответить с цитированием
Старый 24.06.2015, 17:22   #7
RAFA91
Заблокирован
 
Регистрация: 06.02.2011
Сообщений: 1,999
По умолчанию

тоесть cout я применить не смогу ?
RAFA91 вне форума Ответить с цитированием
Старый 24.06.2015, 20:13   #8
waleri
Старожил
 
Регистрация: 13.07.2012
Сообщений: 6,330
По умолчанию

Можете, я же написал как:
P << cout;

А если серьезно, то чем ваш friend вариант не устраивает?
waleri вне форума Ответить с цитированием
Старый 25.06.2015, 12:28   #9
RAFA91
Заблокирован
 
Регистрация: 06.02.2011
Сообщений: 1,999
По умолчанию

Цитата:
Сообщение от waleri Посмотреть сообщение
Можете, я же написал как:
P << cout;

А если серьезно, то чем ваш friend вариант не устраивает?
ТОЧНО. так работает P << cout;

но это как то на выворот.

тогда оставлю вариант с другом.

спасибо Вам за помощь !
RAFA91 вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Не работает оператор сравнения в Delphi iceman_1988 Помощь студентам 6 05.04.2015 12:54
Не работает оператор if. PHP Luca Brasi Помощь студентам 16 29.10.2014 21:32
Оператор if работает некорректно Night_Devil Общие вопросы по Java, Java SE, Kotlin 1 04.12.2012 11:49
Не работает оператор delete [] zmejchik Общие вопросы C/C++ 2 08.11.2011 15:54
не работает оператор No Error porsh59 Microsoft Office Excel 2 16.07.2011 16:46