IT源码网

C++ 友元类使用 (friend)讲解

shasha 2020年10月15日 编程语言 244 0

C++中私有变量对外部类是不能直接访问的,也是不能继承的。

使用友元类可以访问类中的私有方法、私有变量,虽然对类的封装有一定的破坏,但是有时也是很实用的。

在实际中,在修改已有代码时,为了不大改动已有代码:

(1) 对于没有继承关系的类,如果有关联,使用友元类还是比较方便的

(2) 对于有继承关系的类,如果有关联,可以将变量访问由private改为protected。

 

直接看代码例子:

a.h

 1 #include<stdio.h> 
 2 //注意: 该类文件中, 不要包含b.h, 否则会报错 
 3  
 4 //注意: 由于不是同一个命名空间, 这里申明一下class B2 
 5 namespace st1{ 
 6 namespace st2{ 
 7 class B2;  
 8 } 
 9 } 
10  
11 class A{ 
12 public: 
13     void print(){ 
14         printf("A print function\n"); 
15     }    
16  
17 private: 
18     void _inner_print(){ 
19         printf("A print _inner_print\n"); 
20     }    
21  
22     //注意: 申明友元类, 方便两个类中可以直接访问private变量, 函数 
23     friend class B1;  
24     friend class ::st1::st2::B2; 
25      
26 };

b.h

 1 #include "a.h" 
 2  
 3 //定义B1 
 4 class B1{  
 5 public: 
 6     void print(){ 
 7         printf("\ncall B1 print\n"); 
 8         a.print(); 
 9         a._inner_print(); 
10     }    
11  
12 private: 
13     A a;     
14 }; 
15  
16 //定义B2 
17 namespace st1{ 
18 namespace st2{ 
19  
20 class B2{  
21 public: 
22     void print(){ 
23         printf("\ncall B2 print\n"); 
24         a.print(); 
25         a._inner_print(); 
26     }    
27  
28 private: 
29     A a;     
30 }; 
31      
32 } 
33 }

测试文件main.cpp

 1 #include <stdio.h> 
 2 #include "b.h" 
 3  
 4 int main(){ 
 5     B1 b1;  
 6     ::st1::st2::B2 b2;  
 7  
 8     b1.print(); 
 9     b2.print(); 
10     return 0; 
11 }

输出:

call B1 print 
A print function 
A print _inner_print 
 
call B2 print 
A print function 
A print _inner_print
发布评论

分享到:

IT源码网

微信公众号号:IT虾米 (左侧二维码扫一扫)欢迎添加!

对多个有序数组,实现归并操作讲解
你是第一个吃螃蟹的人
发表评论

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。