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 }
时间: 2024-08-23 07:14:34