虚函数
重载:相同对象收到不同消息或不同对象收到相同消息时产生的不同的动作。
程序在编译阶段根据参数个数确定调用哪个函数。这种情况叫做静态多态(早绑定),一般用函数重载实现
如果要想实现动态多态则必须使用虚函数,虚函数用关键字 virtual声明
虚函数可能造成内存泄漏,因为如果delete后边跟父类的指针则只会执行父类的析构函数,如果delete后面跟的是子类的指针,那么它即会执行子类的析构函数,也会执行父类的析构函数。
用virtual去修饰析构函数可以解决这个问题,当我们在父类中通过virtual修饰析构函数之后,通过父类指针指向子类对象,通过delete接父类指针就可以释放掉子类对象
这是因为执行完子类的析构函数就会执行父类的析构函数
虚函数的限制:
1.普通函数不能是虚函数,也就是说这个函数必须是某一个类的成员函数,不可以是一个全局函数,否则会导致编译错误。
2.静态成员函数不能是虚函数 static成员函数是和类同生共处的,他不属于任何对象,使用virtual也将导致错误。
3.内联函数不能是虚函数 如果修饰内联函数 如果内联函数被virtual修饰,计算机会忽略inline使它变成存粹的虚函数。
4.构造函数不能是虚函数,否则会出现编译错误。
纯虚函数没有函数体,同时在定义的时候函数名后面要加“=0”。在虚函数原理的基础上,虚函数表中,虚函数的地址是一个有意义的值,如果是纯虚函数就实实在在的写一个0。
如果在抽象类当中仅含有纯虚函数而不含其他任何东西,我们称之为接口类。