4.2.4 简答题
【例4.11】简述友元的作用。
解:友元提供了在不同类的成员函数之间、类的成员函数与一般函数之间进行数据共享的机制。通过友元,一个普通函数或另一个类中的成员函数可以访问类中的私有成员和保护成员。C++(www.cppentry.com)中的友元为封装隐藏这堵不透明的墙开了一个小孔,外界可以通过这个小孔窥视内部的秘密。
友元的正确使用能提高程序的运行效率,但破坏了类的封装性和数据的隐蔽性,导致程序可维护性变差,因此一定要谨慎使用。
【例4.12】阅读下面类的定义,找出程序中的错误,并说明错误原因。
- #include <iostream.h>
- class Sample
- { char ch1,ch2;
- public:
- friend void set(Sample &s,char);
- };
- void set(Sample &s,char c)
- { s.ch1=c; }
- void set(Sample &s,char c1,char c2)
- { s.ch1=c1;
- s.ch2=c2;
- }
- void main()
- { Sample obj;
- set(obj,5);
- set(obj,7,9);
- }
解:由于友元函数set(Sample &s,char)的重载函数set(Sample &s,char c1,char c2)未说明为类Sample的友元函数,因此在该函数内不能直接访问Sample类的私有数据成员。改正方法是在Sample类中增加以下友元函数说明:
- friend void set(Sample &s,char,char);
也可以将Sample类中的ch1和ch2改为公有数据成员。