1.虚函数
声明要在所有同名函数的最顶层,可以再派生类,但派生类上面的基类不能有该同名函数
虚函数必须是类的非静态成员函数,不能说明为全局函数
不能将友元说明为虚函数,但虚函数可以是另一个类的友元
析构函数可以是虚函数,但构造函数不能是虚函数
“作用已类体系的动态联编以来基类指针指向派生类对象,调用虚函数的不同版本”
重载虚函数要求函数名、返回类型、参数个数、参数类型和顺序完全相同
将基类析构函数说明为虚函数,则所有派生类的析构函数自动成为析构函数,即使他们名字和基类析构函数不同,作用是,当用基类指针指向派生类对象时,delete该对象时能调用派生类的析构函数,如果不用虚函数说明,就会只调用基类的析构函数
2.纯虚函数
virtual void a() = 0;
作用就是基类不用实现该函数的定义
3.explicit
修饰在构造函数前,作用是防止构造函数隐式转换其他类型为该类类型
4.抽象类,至少拥有一个纯虚函数的基类,可以拥有没有实现虚函数的派生类,该派生类还是抽象类
抽象类只能做其他类的基类,不能创建对象,能创建指针,抽象类不能用做参数类型、函数返回类型,能做引用
抽象类不能显示类型转换
5.异质链表
抽象类指针的数组或链表,指针可指向各种派生类型,动态异质链表,就是抽象类指针的链表
6.动态联编
通过基类指针调用派生类的虚函数,静态联编就是用对象名和点运算符来调用虚函数
7.模板,把函数或类要处理的数据参数化,表现为参数的多态性
函数模板的匹配顺序:
先寻找参数类型匹配的重载函数,没有再找模板实例化产生的函数,最后寻找通过类型转换进行参数匹配的重载函数
8.类模板
类属参数必须至少在类说明中出现一次