private/protected/public

private调用范围:类内,友元函数

protected调用范围:类内,子类(派生类),友元函数

public调用范围:类内,类外

1.证明private调用范围:类内,友元函数可调用,而不可在类外和子类(派生类)调用

 1 #include <iostream>
 2 
 3 using namespace std;
 4 
 5 class A
 6 {
 7 public:
 8     A():x(0){}
 9     A(int x):x(x){}
10     friend A operator+(const A &left ,const A &right);
11     void display1()
12     {
13         cout<< "x=" << x << endl;//可正常输出则证明可在类内调用
14     }
15 private://private访问属性
16     int x;
17 };
18 A operator+(const A &left ,const A &right)//友元函数
19 {
20     A temp;
21     temp.x = left.x + right.x;
22     return temp;
23 }
24 class B:public A
25 {
26 public:
27     void show_B()
28     {
29         cout << "子类x=" << a3.x << endl;
30     }
31 private:
32     int y;
33 };
34 
35 
36 int main()
37 {
38     A a1(1);
39     A a2(2);
40     A a3;
41     a3 = a1 + a2;//运用了友元函数
42     a3.display1();//若能够输出a3=3就证明private在友元函数中可调用
43     B b1;
44     b1.show_B();//若能够输出子类x=3就可证明private在子类可调用
45     cout << "类外x=" << a3.x << endl;//若能够输出类外x=3就可证明private在类外可调用
46     return 0;
47 }

调试后

11行正常输出

42行显示了a3=3

44行显示了error:'int A::x' is private within this context(“int A::x”在此上下文中是私有的)

45行显示了error:'int A::x' is private within this context(“int A::x”在此上下文中是私有的)

由此可知,结论正确

2.证明protected调用范围:类内,子类(派生类),友元函数可调用,而不可在类外调用

 1 #include <iostream>
 2 
 3 using namespace std;
 4 
 5 class A
 6 {
 7 public:
 8     A():x(0){}
 9     A(int x):x(x){}
10     friend A operator+(const A &left ,const A &right);
11     void display1()
12     {
13         cout<< "x=" << x << endl;//可正常输出则证明可在类内调用
14     }
15 protected://private访问属性
16     int x;
17 };
18 A operator+(const A &left ,const A &right)//友元函数
19 {
20     A temp;
21     temp.x = left.x + right.x;
22     return temp;
23 }
24 class B:public A
25 {
26 public:
27     void show_B()
28     {
29         cout << "子类x=" << x << endl;
30     }
31 private:
32     int y;
33 };
34 
35 
36 int main()
37 {
38     A a1(1);
39     A a2(2);
40     A a3;
41     a3 = a1 + a2;//运用了友元函数
42     a3.display1();//若能够输出a3=3就证明protected在友元函数中可调用
43     B b1;
44     b1.show_B();//若能够输出子类x=0就可证明protected在子类可调用
45     cout << "类外x=" << a3.x << endl;//若能够输出类外x=3就可证明protected在类外可调用
46     return 0;
47 }

调试后

42行显示a3=3

44行显示子类x=0

45行显示error:'int A::x' is private within this context(“int A::x”在此上下文中是私有的)

由此可得,结论正确

3.证明public调用范围:类内,类外

 1 #include <iostream>
 2 
 3 using namespace std;
 4 
 5 class A
 6 {
 7 public:
 8     A():x(0){}
 9     A(int x):x(x){}
10     friend A operator+(const A &left ,const A &right);
11     void display1()
12     {
13         cout<< "x=" << x << endl;//可正常输出则证明可在类内调用
14     }
15 public://private访问属性
16     int x;
17 };
18 A operator+(const A &left ,const A &right)//友元函数
19 {
20     A temp;
21     temp.x = left.x + right.x;
22     return temp;
23 }
24 class B:public A
25 {
26 public:
27     void show_B()
28     {
29         cout << "子类x=" << x << endl;
30     }
31 private:
32     int y;
33 };
34 
35 
36 int main()
37 {
38     A a1(1);
39     A a2(2);
40     A a3;
41     a3 = a1 + a2;//运用了友元函数
42     a3.display1();//若能够输出a3=3就证明public在友元函数中可调用
43     B b1;
44     b1.show_B();//若能够输出子类x=0就可证明public在子类可调用
45     cout << "类外x=" << a3.x << endl;//若能够输出类外x=3就可证明public在类外可调用
46     return 0;
47 }

private/protected/public

 

如图可知,全部正常输出

由此可知,结论正确

 

上一篇:Qt private public protected slots的区别


下一篇:如何通俗易懂地解释卷积?