继承
子类继承父类的一切属性和方法,但private的属性和方法无法访问
可用例子证明,创建一个父类,父类创建一个私有属性,再创建一个公有的输出方法,子类继承父类,子类调用公有方法时,是可以输出父类的私有属性的,足以证明上述语句
初始化列表
继承绕不开初始化列表,最关键要记住,子类初始化时会同时调用父类默认的构造器,才可以彻底理解初始化列表。
当父类有常数,引用类型变量时,子类初始化会出现错误,因为常量和引用型变量都要在第一次初始化时赋值,而父类默认构造器并没有赋值,此时通过初始化列表,调用父类的有参构造器,就能解决问题。
类属性初始化的顺序与初始化列表无关,与在类中定义的顺序有关。
虚函数
前提:子类和父类有同样的方法签名的方法,但方法体不同,创建一个方法,该方法接受父类类型的参数,将子类或父类的实例作为参数输入这个方法,希望参数是子类时,可以调用子类方法,参数是父类时,可以调用父类方法,简单来说就是实现多态
如果仅是子类写一个和父类同样方法签名的方法,是无法实现上述要求,即多态的,需要用virtual修饰父类方法,同时可以用override修饰子类方法,帮助我们检查有无正确覆写
纯虚函数
拥有纯虚函数的类称之为接口,纯虚函数不同于正常虚函数,不用写方法体和{},用 “ = 0;”代替。
继承接口的类必须实现纯虚函数才能实例化。
纯虚函数和虚函数的联合使用,要想继承了接口的父类和子类能正确实现多态,父类还是要用虚函数。