左移右移操作符重载

左移右移操作符重载

重载左移

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
#define _CRT_SECURE_NO_WARNINGS
#include<iostream>


using namespace std;

class C
{
public:
C();
C(int ta,int tb);
~C();
//友元重载左移<<运算符
friend ostream & operator<<(ostream & cout, const C & another);

private:
int a;
int b;
};

//友元重载左移<<运算符
ostream & operator<<(ostream & cout, const C & another)
{
cout << another.a << endl;
cout << another.b << endl;
cout << "==================" << endl;
return cout;
}

C::C(int ta, int tb)
{
a = ta;
b = tb;
}

C::C()
{
}

C::~C()
{
}

int main(char *argv[], int argc)
{
C a(1, 2),b(2,3);

cout << a << b;

return 0;
}

重载右移

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
#define _CRT_SECURE_NO_WARNINGS
#include<iostream>


using namespace std;

class C
{
public:
C();
C(int ta,int tb);
~C();
//友元重载左移<<运算符
friend ostream & operator<<(ostream & cout, const C & another);
//友元重载左移>>运算符
friend istream & operator>>(istream &cin ,C & another);

private:
int a;
int b;
};
//友元重载右移>>运算符
istream & operator>>(istream & cin, C & another)
{
cin >> another.a >> another.b;

return cin;
}


//友元重载左移<<运算符
ostream & operator<<(ostream & cout, const C & another)
{
cout << another.a << endl;
cout << another.b << endl;
cout << "==================" << endl;
return cout;
}

C::C(int ta, int tb)
{
a = ta;
b = tb;
}

C::C()
{
}

C::~C()
{
}

int main(char *argv[], int argc)
{
C a(1, 2),b(2,3);
C c;
cout << a << b;
cin >> a >> c;

cout << a << c;
return 0;
}

只能用友元重载,如果用成员函数重载会出现顺序错误

1
2
3
4
5
6
7
8
9
10
11
12
ostream & operator<<(ostream & cout){
cout << this->a << endl;
cout << this->b << endl;
return cout;
}

int main(){
C a;
//用成员重载<<或>> 会出现对象在左边的情况,所以不建议用成员函数来重载<<和>>运算符
a << cout;
return 0;
}

1620738088001