访问控制与封装

使用访问说明符能够加强类的封装性:

  • public 说明符后的成员在整个程序内可被访问,public 成员定义类的接口。
  • private 说明符之后的成员可被类的成员函数访问,但是不能被使用该类的代码访问,private 部分封装了类的实现。

一般的,构造函数和部分作为接口的成员函数定义紧跟在 public 说明符之后。

数据成员和作为实现部分的成员函数紧跟在 private 之后。

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

封装的益处:

  • 确保用户代码不会无意间破坏封装对象的状态。
  • 被封装的类的具体实现细节可以随时改变,无须调整用户级别的代码。

使用 class 或 struct 关键字

定义一个类时可以使用 classstruct 关键字中任何一个,唯一的区别是 structclass 的访问权限不一样。

类可以在它的第一个访问说明符之前定义成员:

  • 如果使用 struct 关键字,则定义在第一个访问说明符之前的成员都是 public
  • 如果使用 class 关键字,则定义在第一个访问说明符之前的成员都是 private

友元

类可以允许其他类型或者函数访问它的非公有成员,方法是令其他类或者函数成为它的友元

如果类想把一个函数作为它的友元,只需要增加一条 friend 关键字开始的函数声明即可。

  • 友元声明只能出现在类定义的内部,但是在类内出现的具体位置不限。
  • 友元不是类的成员,也不受它所在区域访问控制级别的约束。
  • 一般来说,最好在类定义开始或结束前的位置集中声明友元。

友元的声明

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

为了使友元对类的用户可见,通常把友元的声明与类本身放置在同一个头文件中(类的外部)。

一些编译器允许在尚无友元函数声明的情况下就调用它。不过即使编译器支持这种行为,最好还是提供一个独立的函数声明。

原文地址:https://www.cnblogs.com/xiaojianliu/p/12497763.html