C++ 友元类使用 (friend)详解编程语言

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

原创文章,作者:ItWorker,如若转载,请注明出处:https://blog.ytso.com/17501.html

(0)
上一篇 2021年7月19日
下一篇 2021年7月19日

相关推荐

发表回复

登录后才能评论