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

перегрузка >> и << - C++

Восстановить пароль Регистрация
 
sanches2805
0 / 0 / 0
Регистрация: 24.02.2012
Сообщений: 38
18.03.2013, 18:15     перегрузка >> и << #1
Решил попробовать перегрузить операции ввода и вывода,почему то выводятся 0, вместо нужных значений,подскажите в чем косяк


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
#include <iostream>
#include <stdio.h>
#include <conio.h>
using namespace std;
 
 
class Test
{
private:
    int a;
    int b;
    int c;
public:
    Test(){a=0;b=0;c=0;}
    Test(int a,int b,int c){this->a=a;this->b=b;this->c=c;}
    friend istream& operator>>(istream&stream,Test obj);
    friend ostream& operator<<(ostream&stream,Test obj);
    ;
};
 
istream& operator>>(istream&stream,Test obj)
{   cout<<"enter a  ";
stream>>obj.a;
cout<<endl;
cout<<"enter b ";
stream>>obj.b;
cout<<endl;
cout<<"enter c  ";
 
stream>>obj.c;
return stream;
}
 
 
 
ostream& operator<<(ostream&stream,Test obj)
{
    stream<<obj.a<<endl;
    stream<<obj.b<<endl;
    stream<<obj.c<<endl;
    return stream;
}
 
 
int main()
{   
    Test obj;
    cin>>obj;
    cout<<obj;
    getch();
    return 0;
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
18.03.2013, 18:15     перегрузка >> и <<
Посмотрите здесь:

[C++] перегрузка + C++
C++ Перегрузка
Перегрузка в c++ C++
C++ Перегрузка
перегрузка в с++ C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Jupiter
Каратель
Эксперт C++
6543 / 3963 / 226
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
18.03.2013, 18:29     перегрузка >> и << #2
Цитата Сообщение от sanches2805 Посмотреть сообщение
C++
1
2
friend istream& operator>>(istream&stream,Test obj);
* * friend ostream& operator<<(ostream&stream,Test obj);
передача по значению
vua72
410 / 410 / 83
Регистрация: 28.11.2010
Сообщений: 1,158
18.03.2013, 18:35     перегрузка >> и << #3
Вам ошибку указали, можно еще так сделать
Кликните здесь для просмотра всего текста
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
#include <iostream>
#include <stdio.h>
 
using namespace std;
 
class Test {
private:
    int a;
    int b;
    int c;
public:
    Test() :
            a(0), b(0), c(0) {
 
    }
    Test(int aa, int bb, int cc) :
            a(aa), b(bb), c(cc) {
    }
    friend const istream& operator>>(istream& stream, Test& obj);
    friend const ostream& operator<<(ostream& stream, const Test& obj);
    ;
};
 
const istream& operator>>(istream&stream, Test& obj) {
    cout << "enter a  ";
    stream >> obj.a;
    cout << endl;
    cout << "enter b ";
    stream >> obj.b;
    cout << endl;
    cout << "enter c  ";
    stream >> obj.c;
    return stream;
}
 
const ostream& operator<<(ostream&stream, const Test& obj) {
    stream << obj.a << endl;
    stream << obj.b << endl;
    stream << obj.c << endl;
    return stream;
}
 
int main() {
    Test obj;
    cin >> obj;
    cout << obj;
    return 0;
}
sanches2805
0 / 0 / 0
Регистрация: 24.02.2012
Сообщений: 38
18.03.2013, 19:28  [ТС]     перегрузка >> и << #4
Цитата Сообщение от Jupiter Посмотреть сообщение
передача по значению
вот только не пойму почему нельзя по значению,можно,пожалуйста, подробное объяснение?
Croessmah
Модератор
Эксперт С++
 Аватар для Croessmah
11845 / 6824 / 771
Регистрация: 27.09.2012
Сообщений: 16,919
Записей в блоге: 2
Завершенные тесты: 1
18.03.2013, 19:35     перегрузка >> и << #5
Цитата Сообщение от sanches2805 Посмотреть сообщение
вот только не пойму почему нельзя по значению,можно,пожалуйста, подробное объяснение?
Потому что работа будет с копией и на оригинал никакого влияния не окажет
Kuzia domovenok
 Аватар для Kuzia domovenok
1883 / 1738 / 116
Регистрация: 25.03.2012
Сообщений: 5,907
Записей в блоге: 1
18.03.2013, 19:54     перегрузка >> и << #6
Цитата Сообщение от sanches2805 Посмотреть сообщение
вот только не пойму почему нельзя по значению,можно,пожалуйста, подробное объяснение?
тебе же нужно, чтобы obj поменялся после выхода из функции
C++
1
friend const istream& operator>>(istream& stream, Test& obj);
Если бы передавалась копия значения, а не ссылка, оригинал не изменился бы на введённое значение.
Yandex
Объявления
18.03.2013, 19:54     перегрузка >> и <<
Ответ Создать тему
Опции темы

Текущее время: 04:09. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru