什么是友元?为什么要引入友元?解释友元函数和友元类
答案:和继承一样,可以说子继承父,友元就是朋友,它不是类的组成部分,因此被称为直接函数调用。友元函数不能隐式访问类成员,而必须将成员操作符用于作为参数传递的对象。友元函数要在一个类体内说明,形式为:friend类型名友元函数名(形参表);然后在类体外对友元函数进行定义,定义的格式和普通函数相同,但可以通过对象作为参数直接访问对象的私有成员;友元函数说明如下:①.必须在类的说明中说明友元函数,说明时以关键字friend开头,后跟友元函数的函数原型,友元函数的说明可以出现在类的任何地方,包括在private和public部分。②注意友元函数不是类的成员函数,所以友元函数的实现和普通函数一样,在实现时不用”::”指示属于那个类,只有成员函数才使用”::”作用域符号。③友元函数不能直接访问类的成员,只能访问对象成员。④友元函数可以访问对象的私有成员,但普通函数不行;⑤调用友元函数时,在实际参数中需要指出要访问的对象!
友元不是成员函数,但是它可以访问类中的私有成员。友元的作用在于提高程序的运行效率,但是,它破坏了类的封装性和隐藏性,使得非成员函数可以访问类的私有成员。
扩展资料:
成员函数和非成员函数最大的区别在于成员函数可以是虚拟的而非成员函数不行。所以,如果有个函数必须进行动态绑定(见条款38),就要采用虚拟函数,而虚拟函数必定是某个类的成员函数。
关于这一点就这么简单。如果函数不必是虚拟的,情况就稍微复杂一点。
举例:
看下面表示有理数的一个类:
class rational {
public:
rational(int numerator = 0,int denominator = 1);
int numerator() const;
int denominator() const;
private:
对象onehalf是一个包含operator*函数的类的实例,所以编译器调用了那个函数。而整数2没有相应的类,所以没有operator*成员函数。编译器还会去搜索一个可以象下面这样调用的非成员的operator*函数(即,在某个可见的名字空间里的operator*函数或全局的operator*函数)。
参考资料:
百度百科--友元函数鹏仔微信 15129739599 鹏仔QQ344225443 鹏仔前端 pjxi.com 共享博客 sharedbk.com
图片声明:本站部分配图来自网络。本站只作为美观性配图使用,无任何非法侵犯第三方意图,一切解释权归图片著作权方,本站不承担任何责任。如有恶意碰瓷者,必当奉陪到底严惩不贷!