欢迎光临散文网 会员登陆 & 注册

C++ 访问控制与封装

2023-04-12 22:23 作者:S-a-i_  | 我要投稿

目前我们实现了定义类的接口,但是还没有任何机制强制用户使用这些接口,我们的类还没有封装,也就是说用户可以直达Sales_data对象的内部,并且控制它的具体实现,在C++中,我们使用访问说明符加强类的封装性

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

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

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

一个类对访问说明符的数量没有限制,其有效范围直到下一个说明符出现或者类的结尾为止。


使用class或struct关键字

在上面定义中我们使用了class而非struct这种变化仅仅是形式上有所不同,这两个定义唯一的区别就是默认访问权限不同。

类可以在他的第一个访问说明符之前定义成员,对这种成员的访问权限依赖于类定义的方式,如果我们使用struct则第一个访问说明符之前的成员时public相反如果时class,那么就是private。


友元

既然Sales_data的数据成员是private的,我们的read、print和add函数也就无法正常编译了,尽管这个几个函数是类的接口的一部分,但是他们不是类的成员。

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

友元只能出现在类定义的内部,具体位置不限,友元不是类的成员也不受他所在区域访问控制级别的约束。我们一般集中声明友元。


关键概念:封装的益处

封装有两个重要优点

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

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


友元的声明

友元的声明仅仅只定了访问的权限,而非一个通常意义上的函数声明,如果我们希望类的用户能够调用某个友元函数,那么我们就必须在友元声明之外再次对函数进行一次声明,为了是友元对类的用户可见,我们通常把友元的声明和类本身放置在同一个头文件中,因此我们的Sales_data头文件应该为read、print和add提供独立的声明。

C++ 访问控制与封装的评论 (共 条)

分享到微博请遵守国家法律