C++
类成员函数的重载、覆盖、隐藏
重载:描述同一个类中同名不同参的成员函数之间的关系。
覆盖:描述基类与派生类中同名、同参、同返回值的成员函数间的关系。注意要求基类的成员函数为虚函数。
隐藏:描述基类与派生类中同名的成员函数之间的关系。
继承时导致的二义性
菱形继承的二义性:调用基函数时的二义性;上行转换时的二义性;
菱形继承的解决:通过虚继承;通过域作用符或者一级一级地向上调用;
多态
一个接口,多种方法。指同一个操作作用于不同的对象会产生不同的响应。
函数重载、模板类重载
静态联编
虚函数多态
动态联编
虚函数的访问:通过对象名调用时为静态联编;通过基类指针或基类引用调用时为动态联编。
虚函数多态的实现方法:基类以及派生类均包含域vptr, vptr指向各自的虚表,通过虚表可以访问各自的虚函数。由于vptr指针变量是各级派生类、基类共有的,所以上行转换后,基类指针指向的vptr实质上为原来的派生类对象的vptr,从而实现多态。
菱形继承的问题:可以通过虚拟继承。在虚拟继承基类的子类中,子类会增加bptr指针。当同时存在vptr,bptr时,编译器会优化为一个指针。