一、虚函数
虚函数定义:
虚函数指针的优先级最高
虚基类的作用:
虚基类并不是在声明基类时声明的,而是在声明派生类时,指定继承方式时声明的。
声明虚基类的一般形式:
class 派生类名:virtual 继承方式 基类名
成为虚函数的条件:

虚函数表(编译期间)(一个类)

1、那些函数可以成为虚函数,哪些不能?
(不能,因为没有依赖对象调用)
(不能,没有依赖对象调用)
(不能,因为不能取地址)
3、基类和派生类中的析构函数满足同名覆盖的关系
4、基类指针指向派生类对象(派生类对象中的起始部分)的时候,基类中的析构函数设为虚函数?
避免资源泄漏
5、对象的虚函数指针什么时候指向虚表的?
二、纯虚函数
声明纯虚基类的一般形式:
virtual 函数类型 函数名 (参数表列) = 0;
拥有纯虚函数的类为抽象类(抽象类不能生成对象),通过引用或者指针来实现
class Person { virtual void display() //虚函数 { cout<< <<endl; } virtual void Display () = 0; // 纯虚函数 protected : string _name ; // 姓名 }; class Student : public Person {};
(1)纯虚函数没有函数体;
(2)最后面的“=0”并不表示函数返回值为0,它只起形式上的作用,告诉编译系统“这是虚函数”;
(3)这是一个声明语句,最后有分号。
纯虚函数只有函数的名字而不具备函数的功能,不能被调用。
纯虚函数的作用是在基类中为其派生类保留一个函数的名字,以便派生类根据需要对他进行定义。如果在基类中没有保留函数名字,则无法实现多态性。
如果在一个类中声明了纯虚函数,在其派生类中没有对其函数进行定义,则该虚函数在派生类中仍然为纯虚函数。
文章来源: https://blog.csdn.net/like_that/article/details/89739004