继承:将父辈的统统继承给子类,构造函数除外。
访问权限的说明:
规则:当没有派生类这一引入时,对于类成员函数能访问public、protected、private属性成员(包括数据成员、成员函数),不能访问隐藏
对于对象而言,只能访问public属性的成员(包括数据成员、成员函数)
当引入派生类时候。派生类不能访问private属性成员(不用考虑继承方式);派生类对象只能访问public继承方式的public属性成员;
帮助理解,继承方式和成员属性类别都相当于水管,那么public、protected、private依次为大、中、小,在使用时可串联拼接,例如继承方式为protected时,那么为中,把基类成员函数依次拿过来拼接,得到水流量为中、中、小。
派生类不继承基类的构造函数和析构函数,但是继承基类的数据成员,当创建对象时,也要对这些数据进行初始化,那么在写派生类的构造函数时,必须带这些参数以初始化。
派生类构造函数的调用顺序为:
- 基类构造函数
- 子对象类构造函数(如果有子对象的话)
- 派生类构造函数
TIPS:以上若从内存角度去考虑,在创建派生对象时,便是依次创建基对象部分,子对象部分、剩余的派生对象部分。
调用构造函数时,若没有默认构造函数,系统会送你一个(基类和派生默认都自动给);若无,则有了以后要遵守规则。
派生类的析构函数执行顺序为:
- 先用派生类的析构函数
- 再调用派生类中子对象类的析构函数
- 最后调用基类的析构函数
派生类独立于基类的析构函数,可自己重写所需或系统自己提供
虚基类和虚继承:当某个子类继承多个中间类,中间类或多或少来自同一个基类时,为了不重复继承基类数据,那么采用虚继承时,只继承(保留)一组基类数据成员。那么这种方式,基类被称虚基类
继承和组合:继承是创建一种新类的方式,那么组合是将多个类打包封装作为新类别的成员。
基类对象与派生类对象之间的转换:只能派生类对象转向基类,前提是公有派生类-派生类对象能够实现向基类对象一样的功能