友元
- 类外部数据一般不可访问类私有成员,但如果在类中使用friend关键字声明外部某函数是其友元函数,那么就可以通过该函数函数访问到类中的私有成员,也可以在类A中声明另一个类C是其友元类,则在C中也可以访问到A中的私有成员,声明可以出现在类中的任意位置,当所声明的类C是在该类A的后面定义的,可以在类A之前作类C的前向声明 class C;(注意:类的前向声明只能用于友元声明需要、类指针以及类引用的声明需要,但在类定义出现之前仍不能声明类对象)
- 可以声明一个类的友元为某个外部函数、另一个类、另一个类的公有成员函数
- 友元类的声明不具有对称性,即类A声明类B是其友元,故在B中可以访问A中的私有成员,但在A中依旧不可以访问B的私有成员,除非在类B中也声明类A是其友元
- 友元类的声明不具有传递性,即类A声明类B为其友元,类B声明类C是其友元,故C可以访问B的私有成员,B可以访问A的私有成员,但是C仍然不能访问A的私有成员,除非A声明C也为它的友元
- 友元的声明不具有继承性,即基类声明的任何友元无法访问其派生类的私有成员
组合类
- 可以根据类中的不同功能部分分别定义为各个子类,然后再在主类中组合起来
- 组合类中的子类在定义时最好定义一个缺省参数的默认构造函数
- 组合与继承之间优先考虑组合