1.虚函数
#include<iostream.h> class Base { public: void print() { cout<<"Base"<<endl; } }; class Son:public Base { public: void print() { cout<<"Son"<<endl; } }; void fun(Base *obj) { obj->print(); } int main() { Base base; Son son; fun(&base); fun(&son); return 0; }
类Base和Son中都有print方法,Son继承Base类。在主函数中分别建立Base和Son的对象,在fun函数中调用对象的print()方法。运行结果如下
从结果中可以看出不论传的是父对象的地址还是子对象的地址,最终调用的都是父对象的print()方法。如果希望传父对象时调用父对象print()方法,传子对象时调用子对象的print()方法。则只需要将父类的print方法声明成虚函数就行。virtual void print(){}。
2.纯虚函数
(1)纯虚函数的定义
virtual 返回类型 函数名 (<参数>)=0;
#include<iostream.h> class Shape { public: virtual void show()=0; }; class Circle:public Shape { public: void show() { cout<<"Circle"<<endl; } }; class Rect:public Shape { public: void show() { cout<<"Rect"<<endl; } }; void fun(Shape *shape) { shape->show(); } int main() { //Shape s;//纯虚函数的类不能创建对象 Circle circle; Rect rect; fun(&circle); fun(&rect); return 0; }
有纯虚函数的类不能创建对象。在基类中只作方法的声明,具体的实现要由其子类来实现。