首页 > 代码库 > C++友元函数举例说明

C++友元函数举例说明

 

1、什么是友元函数?

  有时候我们需要用一个普通的函数直接的调用类A的成员变量,或者类B的成员函数需要直接调用类A的成员变量,来实现数据的共享。这个时候,为了减少系统的开销,提高程序执行的效率,我们就需要使用“友元函数”的概率。即“友元”的目的是为了方便实现数据的共享。它的优点是:使得程序简洁、直观、高效,缺点是:破坏了类的封装性。因此,只有在迫不得已的情况下为了简化程序设计才使用友元。

2、友元函数分类:

  友元函数大体上可以分为三类:1)普通函数最为类的友元函数使用;2)友元类:类B的所有成员函数都是类A的友元;3)类B的成员函数作为类A的友元函数。

3、举例说明:

1)普通函数最为类的友元函数使用:在类Test的定义中声明普通函数disp()为其友元函数,那么函数disp()就可以使用类Test的成员变量。具体代码实现如下:

 

 1 #include <iostream>
 2 
 3 using namespace std;
 4 
 5 class Test{
 6 public:
 7     Test()
 8     {
 9         a = 1;
10         b = 2;
11     }
12     friend void disp(Test v);
13 private:
14     int a;
15     int b;
16 };
17 
18 void disp(Test v)
19 {
20     cout<<v.a<<"  "<<v.b<<endl;
21 }
22 
23 
24 void main()
25 {
26     Test v;
27     disp(v);
28 }

 

2)友元类:类B的所有成员函数都是类A的友元,提供了两个类共享同一数据的手段。具体演示代码如下:

 1 #include <iostream>
 2 
 3 using namespace std;
 4 
 5 class TestB;
 6 class TestA{
 7 public:
 8     TestA()
 9     {
10         a = 1;
11         b = 2;
12     }
13 private:
14     int a;
15     int b;
16     friend TestB;
17 };
18 
19 class TestB{
20 public:
21     void disp(TestA a)
22     {
23         cout<<a.a<<" "<<a.b<<endl;
24     }
25 };
26 
27 
28 
29 void main()
30 {
31     TestB b_demo;
32     TestA a_demo;
33     b_demo.disp(a_demo);
34 }

3)类B的成员函数作为类A的友元函数。具体演示代码如下:

 1 #include <iostream>
 2 
 3 using namespace std;
 4 
 5 class TestA;
 6 
 7 class TestB{
 8 public:
 9     void disp(TestA a);
10 };
11 
12 class TestA{
13 public:
14     TestA()
15     {
16         a = 1;
17         b = 2;
18     }
19     friend void TestB::disp(TestA a);
20 private:
21     int a;
22     int b;
23     
24 };
25 
26 void TestB::disp(TestA a)
27 {
28     cout<<a.a<<" "<<a.b<<endl;
29 }
30 
31 void main()
32 {
33     TestB b_demo;
34     TestA a_demo;
35     b_demo.disp(a_demo);
36 }