访问控制与封装
Posted 木叶∞
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了访问控制与封装相关的知识,希望对你有一定的参考价值。
在C++语言中,我们使用访问说明符加强类的封装性:
·定义在public说明符之后的成员在整个程序内可被访问,public成员定义类的接口。
·定义在private说明符之后的成员可以被类的成员函数访问,但是不能被使用该类的代码访问,private部分封装(即隐藏了)类的实现细节。
作为接口的一部分,构造函数和部分成员函数紧跟在public说明符之后;而数据成员和作为实现部分的函数则跟在private说明符后面。
一个类可以包含0个或多个访问说明符,而且对于某个访问说明符能出现多少次也没有严格限定。每个访问说明符指定了接下来的成员的访问级别,其有效范围直到出现下一个访问说明符或者到达类的结尾处为止。
class和struct关键字的唯一区别是,默认访问权限不太一样。类可以在它的第一个访问说明符之前定义成员,如果使用struct关键字,则定义在第一个访问说明符之前的成员是public的;相反,使用class,这些成员是private的。
友元
对于作为类的接口一部分而不是类的成员的函数,由于private的限制而无法访问需要访问的成员。
类可以允许其他类或者函数访问它的非公有成员,方法是令其他类或者函数成为它的友元。
如果类想把一个函数作为它的友元,只需要增加一条以friend关键字开始的函数声明语句即可。
友元声明只能出现在类定义的内部,但是在类内出现的具体位置不限。友元不是类的成员也不受它所在区域访问控制级别的约束。一般来说,最好在类定义开始或结束前的位置集中声明友元。
友元的声明仅仅指定了访问的权限,而非一个通常意义上的函数声明。如果我们希望类的用户能够调用某个友元函数,那么我们就必须在友元声明之外再专门对函数进行一次声明。为了使友元对类的用户可见,我们通常把友元的声明与类本身放置在同一个头文件中(类的外部)。许多编译器允许在尚无友元函数的初始声明的情况下就调用它,不过最好还是提供一个独立的函数声明。
关键概念:封装的益处
封装有两个重要的优点:
·确保用户代码不会无意间破坏封装对象的状态。
·被封装的类的具体实现细节可以随时改变,而无须调整用户级别的代码。
尽管当类的定义发生改变时无须更改用户代码,但是使用了该类的源文件必须重新编译。
以上是关于访问控制与封装的主要内容,如果未能解决你的问题,请参考以下文章