纯虚函数就像是java 中的接口函数,不能直接实例化,必须被派生类继承,然后对基类中的虚函数进行实现。 虚函数的使用就是为了方便多态的使用,常常需要在基类中定义虚函数,然后对基类进行继承,再对基类中的虚函数进行重载。
C++语言为我们提供了一种语法结构,通过它可以指明,一个虚拟函数只是提供了一个可被子类型改写的接口。但是,它本身并不能通过虚拟机制被调用,这就是纯虚拟函数(pure virtual function)。纯虚函数的声明如下所示:
class Shape
{
public:
virtual double calcArea()//虚函数
{
////////
}
virtual double calcPerimeter() = 0;//纯虚函数
////纯虚函数没有函数体,同时在定义的时候函数名后腰加 ”=0“
}
什么是函数指针? 指针指向函数就叫函数指针。函数的本质是一段二进制代码,我们可以通过指针指向这段代码的开头。计算就会从这个开头开始执行,直到函数结束为止。 函数的指针和普通的指针本质上是一样的,都是由4个基本的内存单元组成,存储着内存的地址,这个地址就是函数的首地址。 多态的实现原理。
父类和子类出现同名函数称为隐藏
父类和子类出现同名虚函数称为覆盖
虚析构函数的实现原理
纯虚函数的实现原理 在虚函数原理的基础上,虚函数表中,虚函数的地址是一个有意义的值,如果是纯虚函数就实实在在的写一个0 含有纯虚函数的类被称为抽象类 含有纯虚函数的类被称为抽象类。哪怕类中只有一个纯虚函数,那么这个类也是一个抽象类,纯虚函数没有函数体,所以抽象类不允许实例化对象,抽象类的子类也可以是一个抽象类。 抽象子类只有把抽象类中所有纯虚函数都做了实现才可以实例化对象。
仅含有纯虚函数的类称为接口类 如果在抽象类中仅含有纯虚函数而不含其他东西,我们称之为接口类。
class Shape
{
virtual double calcArea() = 0;
virtual double calcPerimeter() = 0;
}