C++友元函数和友元类

来源:互联网 发布:淘宝哪里看信誉评价 编辑:程序博客网 时间:2024/04/30 06:07

》友元

       类具有封装数据和隐藏的特性,只有类的成员函数才能访问类的私有成员和保护成员,外部函数只能访问类的共有成员。但在某些情况下,需要在类的外部访问类的私有成员和保护成员。这时,如果通过公有成员函数进行访问,由于参数传递、类型检查和安全性检查等需要时间上的开销,将影响程序的运行效率。为了解决这个问题,引入友元。

       友元可以在类外部直接访问类的私有成员和保护成员,提高了程序的运行效率。友元提供了不同类或对象的成员函数之间、类的成员函数与一般函数之间进行数据共享的机制。对于一个类,可以利用friend关键字将一般函数、其他类的成员函数或者是其他类声明为该类的友元,使得这个类中本来隐藏的信息(包括私有成员和保护成员)可以被友元所访问。如果友元是一般成员函数或是类的成员函数,称为友元函数;如果友元是一个类,则称为友元类,友元类的所有成员函数都称为友元函数。


》友元函数

       友元函数不是当前类的成员函数,而是独立于当前类的外部函数(包括普通函数和其他类的成员函数),但它可以访问该类的所有成员,包括私有成员、保护成员和公有成员。

       友元函数要在类定义时声明,声明时要在其函数名前加上关键字friend。该声明可以放在公有部分,也可以放在私有部分或者保护部分。友元函数的定义通常在类外部。

       格式:     friend <数据类型><函数名>(<参数表>);

       注:友元函数是一个普通函数,它虽然可以访问类对象的私有成员,但它不是类中的成员函数,因此在类外部定义友元函数时,不需要像成员函数一样,在函数名前加上“类名::”。

       除了可以将普通函数声明为类的友元函数以外,也可以将另一个类的成员函数声明为一个类的友元函数,有时候也把类的成员函数作为友元的情况称为友元成员。友元成员的使用和一般友元函数的使用基本相同,知识在使用该友元成员时要通过相应的类和对象名进行访问。


》友元类

       一个类也可以作为另一个类的友元,称为友元类。友元类的所有成员函数都是另一个类的友元函数,都可以访问另一个类中隐藏的信息(包括私有成员和保护成员)。

       格式:  friend <类名>;   //友元类类名

       注:友元仅仅是在类中进行声明,它并不属于当前类的作用域,因此友元也不受类中访问权限的控制。

0 0
原创粉丝点击