类——访问控制与封装

使用访问说明符加强类的封装性,两种访问说明符:private和public

定义在public说明符之后的成员在整个程序内可被访问,public成员定义类的接口;

定义在private说明符之后的成员可以被类的成员函数访问,但是不能被使用该类的代码访问,private部分封装了类的实现细节。

作为接口的一部分,构造函数和部分成员函数紧跟在public说明符之后;而数据成员和作为实现部分的函数则跟在private说明符之后。

一个类可以包含0或多个访问说明符,而且对于某个访问说明符能出现多少次也没有严格限定。每个访问说明符指定了接下来的成员的访问级别,其有效范围直到出现下一个访问说明符或者到达类的结尾处为止。

使用class和struct关键字

两者的区别是默认访问权限不同

使用struct关键字,定义在第一个访问说明符之前的成员是public的;

相反,如果使用class关键字,则这些成员是private的。

友元

类可以允许其他类或者函数访问它的非公有成员,方法是令其他类或者函数成为它的友元。如果类想把一个函数作为它的友元,只需要增加一条以friend关键字开头的函数声明语句即可。

类的友元函数是定义在类外部,但有权访问类的所有私有(private)成员和保护(protected)成员。尽管友元函数的原型有在类的定义中出现过,但是友元函数并不是成员函数。

友元的声明仅指定了访问的权限,而非一个通常意义上的函数声明。为了使友元的用户能够调用某个友元函数,必须在友元声明之外再专门对函数进行一次声明。

class INTEGER

{

    friend void Print(const INTEGER& obj);//声明友元函数

};

void Print(const INTEGER& obj)

{

    //函数体

}

void main()

{

    INTEGER obj;

    Print(obj);//直接调用

}

一般来说,最好在类定义开始或结束前的位置集中声明友元。

封装的优点:

确保用户代码不会无意间破会封装对象的状态;

被封装的类的具体实现细节可以随时改变,而无需调整用户级别的代码。

一旦把数据成员定义成private的,类的作者就可以比较自由地修改数据;

把数据成员的访问权限设置成private能防止由于用户的原因造成数据破坏。

猜你喜欢

转载自www.cnblogs.com/Summer-8918/p/10237043.html