一、虚函数
概念:在函数前面加virtual,就是虚函数
虚函数的一些概念:
只有成员函数才可定义为虚函数,友元/全局/static/构造函数都不可以
虚函数需要在函数名前加上关键字virtual
成员函数如果不是虚函数,其解析过程发生在编译时而非运行时
派生类可以不覆盖(重写)它继承的虚函数
重写(覆盖)的概念与规则
派生类重写(覆盖)基类中的函数,其中函数名,参数列表,返回值类型都必须一致,并且重写(覆盖)的函数是virtual函数
虚函数在子类和父类中的访问权限可以不同
相关规则:
①如果虚函数的返回值类型是基本数据类型:返回值类型必须相同
②如果虚函数的返回值类型是类本身的指针或引用:返回值类型可以不同,但派生类的返回值类型小于基类返回值类型
基类与派生类的虚函数名与参数列表相同,至于参数列表为什么一致是为了避免虚函数被隐藏
函数返回值有以下要求:
class A {public:int a;public:A(int num) :a(num) {};virtual A& func() {}; //虚函数};class B:public A{public