71.在子类对象构造的时候需要调用父类构造函数对其继承得来的成员进行初始化。在子类对象析构的时候需要调用父类析构函数对其继承得来的成员进行清理。
72.子类对象在创建的时候会先调用父类的构造函数;父类构造函数执行结束后,执行子类的构造函数;当父类的构造函数有参数后,需要在子类的初始化列表中显示调用;析构函数调用的先后顺序与构造函数相反。
73.当子类成员变量与父类成员变量同名时:
(1)子类依然从父类继承同名成员。
(2)在子类中通过作用域分辨符 :: 进行同名成员区分。
(3)同名成员存储在内存中的不同位置。
74.函数重写:
(1)在子类中定义与父类中原型相同的函数。
(2)函数重写只能发生在父类与子类之间。
75.父类中被重写的函数依然会继承给子类,默认情况下子类中重写的函数将隐藏父类中的函数,通过作用域分辨符 :: 可以访问父类中被隐藏的函数。
76.面向对象的新需求:
(1)根据实际的对象类型来判断重写函数的调用。
(2)如果父类指针指向的是父类对象则调用父类中定义的函数。
(3)如果父类指针指向的是子类对象则调用子类中定义的重写函数。
77.多态:同样的调用语句有多种不同的表现状态,根据实际的对象类型决定函数调用语句的具体调用目标。
78.C++中的多态支持:
(1)C++中通过virtual关键字对多态进行支持。
(2)使用virtual声明的函数被重写后即可展现多态特性。
79.函数重载:
(1)必须在同一个类中进行。
(2)子类无法重载父类的函数,父类同名函数将被覆盖。
(3)重载是在编译期间根据参数类型和个数决定调用函数。
函数重写:
(1)必须发生在父类与子类之间。
(2)并且父类与子类中的函数必须有完全相同的原型。
(3)使用virtual声明之后能够产生多态。
(4)多态是在运行期间根据具体对象的类型决定调用函数。
80.C++中多态的实现原理:
(1)当类中声明虚函数时,编译器会在类中生成一个虚函数表。
(2)虚函数表是一个存储类成员函数指针的数据结构。
(3)虚函数表是由编译器自动生成与维护的。
(4)virtual成员函数会被编译器放入虚函数表中。
(5)存在虚函数时,每个对象中都有一个指向虚函数表的指针。