虚函数使得程序在运行的时候根据指针指向对象的类型来确定调用哪个函数。
下图中:都为静态绑定。因为在编译器就确定了可以调用的函数
此时当基类指针指向派生类对象时,因为没有virtual关键字,所以在编译阶段就根据指针类型确定了要指向的函数。所以最后都将调用基类的speak函数
而在基类中的speak函数中加入virtual,在编译阶段,当看到virtual关键字时不再立刻进行绑定,而是在运行阶段根据对象所指的类型来确定调用哪个函数,加入virtual关键字后子类调用结果都为重写后的结果。
虚函数使得程序在运行的时候根据指针指向对象的类型来确定调用哪个函数。
下图中:都为静态绑定。因为在编译器就确定了可以调用的函数
此时当基类指针指向派生类对象时,因为没有virtual关键字,所以在编译阶段就根据指针类型确定了要指向的函数。所以最后都将调用基类的speak函数
而在基类中的speak函数中加入virtual,在编译阶段,当看到virtual关键字时不再立刻进行绑定,而是在运行阶段根据对象所指的类型来确定调用哪个函数,加入virtual关键字后子类调用结果都为重写后的结果。