C++语言程序设计

其实，我们也可以把一个类定义为另一个类的友元，例如：
class A;
class B {
//...
friend class A;
};
类A是类B的友元，类A中的所有成员函数都能访问类B的私有成员。
全局函数也可以作为类的友元。例如，假定我们将SetToReal定义为全局函数，并定义为IntSet和RealSet两个类的友元：

| 程序段10-10

class IntSet {
//...
friend void SetToReal (IntSet&, RealSet&);
};

class RealSet {
//...
friend void SetToReal (IntSet&, RealSet&);
};

void SetToReal (IntSet &iSet, RealSet &rSet)
{
rSet.card = iSet.card;
for (int i = 0; i < iSet.card; ++i)
rSet.elems[i] = (float) iSet.elems[i];
}

注意：虽然友元定义出现在类内，但它并不是类的成员。友元在类内定义的位置也是任意的，不管是出现在类的private、pretected或public部分，含义均相同。
虽然友元为我们进行程序设计提供了一定的方便性，但是面向对象的程序设计要求类的接口与类的实现分开，对对象的访问通过其接口函数进行。如果直接访问对象的私有成员，就破坏了面向对象程序的信息隐藏和封装特性，虽然提供了一些方便，但有可能是得不偿失的，所以，我们要慎用友元。
C＋＋的存取控制
C＋＋有三个关键字，用于设置类成员的访问权限，它们是：public、private和protected。
◇ public意味着在其后声明的所有成员在类外可以访问；
◇ private关键字则意味着，除了该类的成员函数之外，类外不能访问这些成员。如果试图访问私有成员，就会产生编译错误。类中缺省访问权限说明的的成员声明是private的；
◇ protected和private区别在于：protected成员可以被派生类访问，而private成员则不能被派生类访问。