歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
您现在的位置: Linux教程網 >> UnixLinux >  >> Linux編程 >> Linux編程

C++ using聲明獲得的權限簡析

using聲明,形式如下:

using 作用域名::名字

還是先舉個例子:

 1 class Base
2 {
3 public:
4 int pubi;
5 void pub()
6 {
7 };
8 };
9
10 class Derived1:public Base
11 {
12 public:
13 using Base::pub;
14 };


其中 的using Base::pub就是using聲明。

下面再來看看測試代碼:

 1 #include "stdafx.h"
2 #include <iostream>
3
4 using namespace std;
5
6 class Base
7 {
8 public:
9 int pubi;
10 void pub()
11 {
12 cout << "Base public" << endl;
13 };
14 protected:
15 int proi;
16 void pro(){};
17 private:
18 int prii;
19 void pri(){};
20 };
21
22 class Derived1:public Base
23 {
24 public:
25 using Base::pub;
26 void pub(int i)
27 {
28 cout << "Derived1 public" << endl;
29 }
30 };
31
32 class Derived2:public Base
33 {
34 public:
35 void pub(int i)
36 {
37 cout << "Derived2 public" << endl;
38 }
39 protected:
40 using Base::pub;
41 };
42
43 class Derived3:public Base
44 {
45 public:
46 using Base::pro;
47 void pub(int i)
48 {
49 cout << "Derived1 public" << endl;
50 }
51 void test3()
52 {
53 pub();
54 }
55 private:
56 using Base::pub;
57 };
58
59 int _tmain(int argc, _TCHAR* argv[])
60 {
61 Derived1 d1;
62 d1.pub();
63 Derived2 d2;
64 //d2.pub();
65 Derived3 d3;
66 /*d3.pro();*/
67 return 0;
68 }

1、Derived1、Derived2和Derived3中的using Base::pub,在最後的main函數裡面可以看出using聲明分別做了以下事情:

在Derived1中讓Base的public方法保持public,由此我們可以通過Derived1的對象d1訪問Base的public pub方法。

在Derived2中讓Base的public方法變為protected,這樣通過Derived2的對象d2無法訪問protected pub方法。

在Derived2中讓Base的private方法變為public,仿佛能通過Derived3的對象d3訪問public pub方法,能通過編譯,但是執行時不會返回任何結果。

2、在Derived3中我們又可以看出,即便是在private中用using聲明。也可以在整個Derived3作用域中(此處為public中的test3方法)訪問using聲明的pub方法。

Copyright © Linux教程網 All Rights Reserved