文章目录
- 在一个类 X 中,将保留字 friend 冠于某个函数原型或类名之前,则该函数或类将称为类 X 的友员
class A {
public:void foo1() {}static void foo2(char *name) {}
private:void foo3(int age) {}
};class B {};class X {friend int main(int, char *[], char *[]);friend void A::foo1();friend void A::foo2(char *);friend class B;
};
- 只要将外界的某个对象说明为某一个类的友元,那么这个外界对象就可以访问这个对象中的私有成员
- 声明为友元的外界对象可以是另一个类的成员函数,也可以是不属于任何类的一个函数,还可以是整个的一个类
- 使用友员目的是基于程序的运行效率
- 友员关系是非传递的,即 Y 是 X 的友员,Z 是 Y 的友员,但Z不一定是X的友员
- 说明一个类的友元函数,是指在该类中说明的某个函数不是该类的成员函数,而是独立于任何类的一个一般的外界函数,它被允许访问该类的所有对象的私有成员
- 友元函数虽然可以访问类对象的私有成员,但它毕竟不是成员函数,它没有this指针,但在某一时刻它究竟访问的是哪个对象的私有成员却很难确定。友元函数都带有传递对象的参数,显式的确定对象
引用
- 在一个程序中用不同的变量名指向同一地址的同一内容的数据类型描述称为引用
- 引用是对象的同义词,是对象本身,而不是副本,所以对对象或对引用的任何操作都会影响到它们共同的对象
- 引用的主要用途
(1)用引用传递函数参数
(2)用引用返回函数值
- 使用引用的规则
(1)当引用被创建时,它必须被初始化:即常指针必须初始化,但指针可以在任何时候进行赋值操作
(2)一旦一个引用被初始化为指向一个对象,它就不能被改变为对另一个对象的引用
(3)不可能有NULL引用:必须确保引用是和一块合法的存储单元关连
- 引用的限制
(1)不能对void进行引用
(2)不能建立引用的数组
(3)不能建立引用的引用
(4)有空指针,没有空引用