什么是多态
简单地说,就是允许将子类的指针赋值给赋值给基类的指针
实现
依赖于编译器给每个包含了虚函数的类增加的虚拟表virtual table来实现
调用虚函数时,首先查虚表
如 class A : public B 表示A继承B,B中定义了虚函数
B* b = new A;
A实例的内存起始部分和B的内存格局相同,这样当调用b->foo()
时(foo为虚函数,A对foo进行了覆写),其实就是调用了A中对foo的实现,这样也就实现了多态
简单地说,就是允许将子类的指针赋值给赋值给基类的指针
依赖于编译器给每个包含了虚函数的类增加的虚拟表virtual table来实现
调用虚函数时,首先查虚表
如 class A : public B 表示A继承B,B中定义了虚函数
B* b = new A;
A实例的内存起始部分和B的内存格局相同,这样当调用b->foo()
时(foo为虚函数,A对foo进行了覆写),其实就是调用了A中对foo的实现,这样也就实现了多态