c++虚函数的学习

来源:互联网 发布:宝塔linux面板 编辑:程序博客网 时间:2024/06/06 04:54

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;}

有纯虚函数的类不能创建对象。在基类中只作方法的声明,具体的实现要由其子类来实现。