1.类的访问控制
关键字public和private,它们描述了对类成文的访问控制。
使用类对象的程序都可以直接访问公有部分,但只能通过公有成员函数访问对象的私有成员。
因此,公有成员函数是程序和对象的私有成员之间的桥梁,提供了对象和程序之间的接口。访问程序直接访问数据被称为数据隐藏。C++还提供了第三个访问控制关键字protected,它与类继承有关。
2.类的封装
struct和class的区别
在用struct定义类时,所有成员的默认属性为public,不能用于表示模版类型
在用class定义类时,所有成员的默认属性为private,可以用来表示模版类型
类的封装性即不能让外面的类随意修改一个类的成员变量;
在定义一个类的成员,使用private关键字说明这个成员的访问权限,只能被这个类的其他成员方法调用,而不能被其他的类中的方法所调用;
为实现封装性,常将类的成员变量声明为private,再通过public的方法来对这个变量进行访问。对一个变量的操作,一般都有 读取和赋值操作,我们一般定义两个方法来实现这两种操作,即:getxxx()与setxxx();
继承:
- public继承:父类成员在子类中保持原有的访问级别(子类可以访问public和protected)。
- private继承:父类成员在子类中变为private成员(虽然此时父类的成员在子类中体现为private修饰,但是父类的public和protected是允许访问的,因为是继承后改为private)。
- protected继承
- 父类中的public成员会变为protected级别。
- 父类中的protected成员依然为protected级别。
- 父类中的private成员依然为private级别。
- 注意:父类中的private成员依然存在于子类中,但是却无法访问到。不论何种方式继承父类,子类都无法直接使用父类中的private成员。
- 子类对象在创建时,会先调用父类的构造函数,如果父类还存在父类,则先调用父类的父类的构造函数,依次往上推理即可。
- 父类构造函数执行结束后,执行子类的构造函数。
- 当父类的构造函数不是C++默认提供的,则需要在子类的每一个构造函数上使用初始化列表的方式调用父类的构造函数。
- 析构函数的调用顺序和构造函数的顺序相反。