public: 之后的成员在整个程序内可被访问
private:之后的成员可以被类的成员函数访问,但不能被使用该类的代码访问,private部分封装(隐藏)类的实现细节
一般数据成员和作为实现部分的函数跟在private之后。成员函数在调用时会隐式地增加 this 指针,指向调用它的对象,从而使用该对象的成员;
(class 和struct 区别:struct 和 class的默认访问权限不同,类在第一个访问说明符之前的成员是public的,而class是private的)
公有成员函数提供类与外界的通信接口。但是有时需要定义一些函数,不是类的成员,但又频繁的访问类的私有成员,可以将这些类定义为友元函数。
友元: friend
类允许其他类或函数访问其非公有成员,方法是令其他类或函数成为它的友元。
read, print ,add函数不是类的成员,把函数作为友元,只要在增加一条以friend 关键字开始的函数声明语句。
友元声明只能出现在类定义的内部,友元不是类的成员,也不受它所在区域访问控制级别的约束。友元声明仅仅指定了访问的权限,而非一个通常意义上的函数声明。如果希望用户能条用某个友元函数,需要在友元声明之外再专门对函数进行一次声明。友元函数在调用时会隐式地增加 this 指针,指向调用它的对象,从而使用该对象的成员;
也可以使用友元类:
friend class <友元类名>;
关于友元,有两点需要说明:
- 友元的关系是单向的而不是双向的。如果声明了类 B 是类 A 的友元类,不等于类 A 是类 B 的友元类,类 A 中的成员函数不能访问类 B 中的 private 成员。
- 友元的关系不能传递。如果类 B 是类 A 的友元类,类 C 是类 B 的友元类,不等于类 C 是类 A 的友元类。