类的重要特征 (一)
时间:2010-10-25 来源:aaron_xueli
1、友元函数
类中私有和保护的成员在类外不能被访问。
友元函数是一种定义在类外部的普通函数,其特点是能够访问类中私有成员和保护成员,即类的访问权限的限制对其不起作用。
友元函数需要在类体内进行说明,在前面加上关键字friend。
一般格式为:
friend <type> FuncName(<args>);
友元函数不是成员函数,用法也与普通的函数完全一致,只不过它能访问类中所有的数据。友元函数破坏了类的封装性和隐蔽性,使得非成员函数可以访问类的私有成员。
一个类的友元可以自由地用该类中的所有成员。
class A{ |
有关友元函数的使用,说明如下:
友元函数不是类的成员函数
友元函数近似于普通的函数,它不带有this指针,因此必须将对象名或对象的引用作为友元函数的参数,这样才能访问到对象的成员。
友元函数与一般函数的不同点在于:
-
友元函数必须在类的定义中说明,其函数体可在类内定义,也可在类外定义;
-
它可以访问该类中的所有成员(公有的、私有的和保护的),而一般函数只能访问类中的公有成员。
class A{ |
友元函数不受类中访问权限关键字的限制,可以把它放在类的私有部分,放在类的公有部分或放在类的保护部分,其作用都是一样的。换言之,在类中对友元函数指定访问权限是不起作用的。
友元函数的作用域与一般函数的作用域相同。
谨慎使用友元函数
通常使用友元函数来取对象中的数据成员值,而不修改对象中的成员值,则肯定是安全的。
大多数情况是友元函数是某个类的成员函数,即A类中的某个成员函数是B类中的友元函数,这个成员函数可以直接访问B类中的私有数据。这就实现了类与类之间的沟通。
注意:一个类的成员函数作为另一个类的友元函数时,应先定义友元函数所在的类。
class B ; //先定义类A,则首先对类B作引用性说明
|
class B; //必须在此进行引用性说明, |