C++的多态---虚函数
虚函数 virtual
带有virtual关键词声明的是虚函数
virtualvoidfunction();1、基类当中的虚函数必须实现
基类中可以有默认实现
virtualvoidmakeSound(){cout<<"动物发出声音"<<endl;}此时,子类可以选择重写该方法,也可以不重写(直接继承父类的默认实现)。
也可以是空实现
virtualvoidmakeSound(){}
不可以不实现
virtualvoidmakeSound();//错误只是普通虚函数(无 = 0):仅声明不实现(无函数体)是不合法的—— 编译器会通过编译,但链接阶段会报错(找不到函数的定义),因为普通虚函数要求必须有实现(哪怕是空实现)。
2、类可以实例化
但如果虚函数没有实现则不能调用该虚函数
3、可以让所有派生类是虚的
父类的虚函数特性会沿继承链传递 —— 只要父类(任意一层)标记了 virtual,后续子类的重写方法默认都是虚函数,无需重复标记;
4、如果使用指向对象的引用或指针来调用虚方法,程序将使用为对象类型定义的方法,而不使用为引用或指针类型定义的方法。这称为动态联编或晚期联编。这种行为非常重要,因为这样基类指针或引用可以指向派生类对象。—重要
5、如果定义的类将被用作基类,则应将那些要在派生类中重新定义的类方法声明为虚的。
override—只是增加编译器校验—防止隐藏
显式标记子类中的方法是对父类虚函数的重写
编译器校验:如果标注了 override 的方法并没有正确重写父类虚函数(比如方法名拼写错误、参数列表不一致),编译器会直接报错,避免隐藏的逻辑错误。
代码可读性:一眼就能看出该方法是重写父类的,提升代码可维护性。
voidmakeSound