虚函数内部机制,其实就是为了实现多态用的:
大概的含义是这样的,当你用父类的指针指向子类,同时用这个父类的指针去调用子类的方法的时候.如果这个方法是继承自父类,同时父类又把它声明为虚函数,那么如果子类重载了这个方法,调用顺序就会先通过一个指针(声明虚函数同时就会多一个指针,用来指向虚函数表,这个表里面存了所有的虚函数,这个表类似一个数组,里面的虚函数顺序和自定义函数的顺序相一致)去查找子类的虚函数表,然后找到这个表里面存的函数的地址,再通过这个函数地址找到相应的函数,再去调用这个函数,那如果子类没有重载这个函数,就会直接去掉用找父类的相应函数.
如果你不把析构函数声明为虚函数,那么当你用父类的指针去掉用析构函数的时候,尽管这个指针实际上指向子类的对象,但是由于析构函数不是虚函数,那么
所以一般都会把析构函数声明为虚函数,这样就算你去调用析构函数,他还是会先把子类析构掉在在调用父类的析构函数.