是什么
同一操作可以根据对象的类型产生不同的行为
为什么
灵活, 可拓展, 简化代码
怎么样
-
在父类函数前加virtual, 在子类中重写这个虚函数. 我们都用父类的指针来指向 new出的不同种类的对象. 此时这个指针很神通广大, 当调用父类的方法时, 会根据子类的种类来调用其函数.
-
使用了虚函数表:
-
每个类都有一个虚函数表, 子类继承父类, 会产生一个新的虚函数表, 但子类虚函数地址还是父类的那个. 重写虚函数, 派生类虚函数表中才放重写的新地址.
-
每new一个对象, 如果有virtual就会产生一个虚函数指针, 指向对应的虚函数表.