C++虚函数

236 阅读1分钟

多态和虚函数

father *p = new father;
son *q = new son;

p -> print(); //执行父类的print
p = q;
p -> print(); //执行子类的print

即指针指向的实例是哪个类型,就调用哪个类的函数

实现原理

虚函数表:每个类的实例在加载的时候会多一个4B空间指向该类的虚函数表地址

动态联编:编译时无法知道调用的是哪个类的函数,运行时指针指向的实例是哪个类就调用哪个类的虚函数表

析构函数

father *p = new son;
delete(p);

父类析构函数不用virtual:只调用父类的析构函数 父类析构函数用virtual(子类无需加virtual):先调用子类析构函数,再调用父类析构函数

抽象类

包含纯虚函数的类

不可以有实例化对象

子类必须实现所有的纯虚函数,才能去掉抽象类身份