virtual 关键字修饰的函数被称之为虚函数,虚函数可以将实现延迟到子类,其目的就是为了动态多态。
在用法上需要注意一下几点:
1、其修饰的方法必须是成员方法,不可以是全局函数。
2、不可以是静态方法,静态方法是从属于类的,用virtual修饰会编译出错。
3、内联函数不能是虚函数,如果修饰了,inline特性则会消失。
4、构造函数不能是虚函数,否则会编译出错。
纯虚函数的实现原理:
在虚函数原理的基础上,虚函数表中,虚函数的地址是一个有意义的值,如果是纯虚函数就实实在在的写一个0。
含有纯虚函数的类被称为抽象类
含有纯虚函数的类被称为抽象类,比如上面代码中的类就是一个抽象类,包含一个计算周长的纯虚函数。哪怕只有一个纯虚函数,那么这个类也是一个抽象类,纯虚函数没有函数体,所以抽象类不允许实例化对象,抽象类的子类也可以是一个抽象类。抽象类子类只有把抽象类当中的所有的纯虚函数都做了实现才可以实例化对象。
对于抽象的类来说,我们往往不希望它能实例化,因为实例化之后也没什么用,而对于一些具体的类来说,我们要求必须实现那些要求(纯虚函数),使之成为有具体动作的类。
仅含有纯虚函数的类称为接口类
如果在抽象类当中仅含有纯虚函数而不含其他任何东西,我们称之为接口类。
- 没有任何数据成员
- 仅有成员函数
- 成员函数都是纯虚函数