先看下封装有什么好处:
1.一旦数据成员被定义成private,类的作者就可以自由修改数据,只要类的接口不变(public),用户代码就无需改变。
2.防止由于用户的原因造成数据被破坏,因为用户无法直接访问到private成员,所以当对象状态被破坏时,只有实现部分的代码采可能产生这样的错误,找bug会大大节省时间。
一、使用public和private封装:
在使用访问说明符之前,user可以直接到达类对象的内部并且控制它的具体实现细节:我们需要使用访问说明符(access specifiers)来对类进行封装,使类的成员受到保护,想让谁看谁才能看到。
- 用public说明符修饰的成员在整个程序内都是可以被访问的,public成员定义的是类的接口。
- 用private说明符修饰的成员只能被类的成员函数访问,但是不能被类外的代码访问。private封装了部分实现细节。
一个类可以包含0或多个访问说明符,对于某个访问说明符能出现多少次也没有严格规定。
二、class和struct的区别:
其实这俩本来没啥区别,都是C++为了向下兼容C,唯一的区别就是:使用struct关键字定义的类,在第一个访问说明符之前的成员是public的;使用class定义的类在第一个访问说明符之前的成员是private的。
三、友元:
类可以允许其他类或者函数访问它的非公有成员,方法是令其他class或者function成为它的友元(friend)。wow,你可以达到堂屋门哦!好感人啊,别人不行,只有friend才可以。
友元声明只能出现在类定义的内部(仅仅指定访问权限),但是在类内出现的具体位置不限定,友元不是类的成员,也不受到它所在区域访问控制级别(public/private)的约束。(这些约束是对外来人的,你是我的friend,对你无效哦),不过一般来说,还是在类定义开始或结束前的位置集中声明友元。
友元在类内的声明仅仅指定了访问权限,而不是一个真正的函数声明,所以我们需要在类外对函数再进行一次声明(使友元对类的用户可见)。为了使友元对类的用户可见,我们通常把对友元的声明与类本身放在同一个头文件中(类的外部)。