C++面向对象的特性,需要很多特殊的设计,来满足各种使用需求,比如:
1。类的实例化对象希望共享一些属性和方法,类似于C语言的公共头文件,而设计了静态成员,区别于C语言的地方是,静态数据成员必须进行初始化。
2。针对指向常对象的指针和指向对象的常指针,而设计了常对象,常成员,通过常成员函数来访问常数据成员。
3。针对基类指针根据派生类不同而希望实现多种形态的需求,设计了虚函数。
那么类A想调用类B的一些私有成员,又该如何呢?
类的私有成员只能被基类的实例调用,这是类的封装带来的安全性保证,如果是公有成员,则会破坏类的封装。
友元函数是可以直接访问类的私有成员的非成员函数。它是定义在类外的普通函数,定义时不需要加类名,因为它不属于任何类,只有这样才能被像普通函数一样调用,但需要在类的定义中加以声明,声明时只需在友元的名称前加上关键字friend。
友元关系不能被继承,基类的友元对派生类没有特殊的访问权限。
class 类名{public: friend class 友元类名; friend 类型 友元函数名;}
使用场景:
面向对象的封装特性,对外提供访问权限的几种途径:
1.public成员函数,破坏封装
2.setter/getter方法,代码繁琐
3.友元函数,如果访问的资源更多,则友元类(比如遥控器类控制电视类)
4.把共有数据提取出来,采用静态成员、静态成员函数