友元类
使用友元的场合:
1、两个类既不是is-a关系也不是has-a关系,但是两个类之间又需要有联系,且一个类能访问另一个类的私有成员和保护成员。
2、一个类需要用到另外多个类的私有成员。
C++primer一书中给出的例子:电视和遥控器。
class Tv //原始类 电视
{
public:
friend class Remote;//友元类声明
//..
}; class Remote //友元类 遥控器
{
//
};
友元声明可以位于原始类的任何位置(public,private,protect中都行)。
同时在使用友元时,常用到前向声明。
嵌套类
在另一个类中声明的类被称为嵌套类。
嵌套类的构造函数可以在函数声明中定义,也可以在实现文件中用两个类作用域解析符来完成。
嵌套类、枚举和结构的作用域:
声明位置 | 包含它的类是否可以使用它 | 从包含它的类派生出来的类是否可以使用它 | 外部世界是否可以使用它 |
私有 | 是 | 否 | 否 |
保护 | 是 | 是 | 否 |
公有 | 是 | 是 | 是(通过类限定符来使用) |
另外,对嵌套类访问控制规则和常规类一样。这意味着即使是包含嵌套类的类也不能使用嵌套类的私有和保护成员。