左移运算符重载(2)

作用:可以输出自定义数据类型

 1 #include <iostream>
 2 using namespace std;
 3 
 4 class Person
 5 {
 6 public:
 7 
 8     //成员函数重载左移运算符 p.operator<<(cout)  简化  p << cout 我们想要 cout << p
 9     //所以无法使用成员函数来重载<<运算符,因为无法实 cout 在左边
10     /*void operator<<(Person &p)
11     {
12 
13     }*/
14 
15     int m_A;
16     int m_B;
17 };
18 
19 //只能用全局函数重载左移运算符 operator<<(cout,p)  简化  cout << p; 
20 void operator<<(ostream &cout,Person &p)
21 {
22     cout << "m_A= " << p.m_A << " m_B= " << p.m_B;
23 }
24 
25 void test_01(void)
26 {
27     Person p;
28     p.m_A = 10;
29     p.m_B = 10;
30 
31     cout << p;
32 }
33 
34 int main(void)
35 {
36     test_01();
37 
38     system("pause");
39     return 0;
40 }

因为重载了左移运算符,所以就不能够在后面加上换行运算符 endl 。如果想要换行,所以重载左移运算符函数还需要返回cout。

 1 #include <iostream>
 2 using namespace std;
 3 
 4 class Person
 5 {
 6 public:
 7 
 8     //成员函数重载左移运算符 p.operator<<(cout)    简化        p << cout 我们想要 cout << p
 9     //所以无法使用成员函数来重载<<运算符,因为无法实 cout 在左边
10     /*void operator<<(Person &p)
11     {
12 
13     }*/
14 
15     int m_A;
16     int m_B;
17 };
18 
19 //只能用全局函数重载左移运算符     operator<<(cout,p)        简化        cout << p; 
20 ostream & operator<<(ostream &cout,Person &p)
21 {
22     cout << "m_A= " << p.m_A << " m_B= " << p.m_B;
23     return cout;
24 }
25 
26 void test_01(void)
27 {
28     Person p;
29     p.m_A = 10;
30     p.m_B = 10;
31 
32     cout << p << "Hello,world!" << endl;//链式编程思想
33     //cout << p << endl;//
34 }
35 
36 int main(void)
37 {
38     test_01();
39 
40     system("pause");
41     return 0;
42 }

我们通常将成员的属性私有化,私有化之后的代码为:

 1 #include <iostream>
 2 using namespace std;
 3 
 4 class Person
 5 {
 6     friend ostream & operator<<(ostream &cout, Person &p);//通过友元技术访问
 7 public:
 8 
 9     //成员函数重载左移运算符 p.operator<<(cout)  简化  p << cout 我们想要 cout << p
10     //所以无法使用成员函数来重载<<运算符,因为无法实 cout 在左边
11     /*void operator<<(Person &p)
12     {
13 
14     }*/
15 
16     Person(int a, int b)
17     {
18         m_A = a;
19         m_B = b;
20     }
21 
22 private:
23     int m_A;
24     int m_B;
25 };
26 
27 //只能用全局函数重载左移运算符 operator<<(cout,p) 简化 cout << p; 
28 ostream & operator<<(ostream &cout,Person &p)
29 {
30     cout << "m_A= " << p.m_A << " m_B= " << p.m_B;
31     return cout;
32 }
33 
34 void test_01(void)
35 {
36     Person p(10,10);
37 
38     cout << p << " Hello,world!" << endl;//链式编程思想
39     //cout << p << endl;//
40 }
41 
42 int main(void)
43 {
44     test_01();
45 
46     system("pause");
47     return 0;
48 }

 

posted @ 2020-04-23 21:20  坦率  阅读(315)  评论(0编辑  收藏  举报