C++纯虚函数详解
C++纯虚函数详解
有时在基类中将某一成员函数定为虚函数,并不是基类本身的要求,而是考虑到派生类的需要,在基类中预留了一个函数名,具体功能留给派生类根据需要去定义。
例如在前边的例12.1程序中,基类Point中没有求面积的area函数,由于“点”是没有面积的,也就是说,基类本身不需要这个函数,所以在例12.1程序中的Point类中没有定义area函数。
但是,在其直接派生类Circle和间接派生类Cylinder中都需要有area函数,而且这两个area函数的功能不同,一个是求圆面积,一个是求圆柱体表面积。
有的读者自然会想到,在这种情况下应当将area声明为虚函数。可以在基类Point中加一个area函数,并声明为虚函数:
virtualfloatarea()const{return0;}
其返回值为0,表示“点”是没有面积的。
其实,在基类中其实不使用这个函数,其返回值也是没有意义的。为简化,可以不写出这类无意义的函数体,只给出函数的原型,并在后面加上“=0”,如:
virtualfloatarea()const=0;//纯虚函数
这就将area声明为一个纯虚函数(purevirtualfunction)。
纯虚函数是在声明虚函数时被“初始化”为0的函数。声明纯虚函数的一般情势是
virtual函数类型函数名(参数表列)=0;
关于纯虚函数需要注意的几点:
纯虚函数没有函数体;
最后面的“=0”其实不表示函数返回值为0,它只起形式上的作用,告知编译系统“这是纯虚函数”;
这是一个声明语句,最后应有分号。
纯虚函数只有函数的名字而不具有函数的功能,不能被调用。它只是通知编译系统:“在这里声明一个虚函数,留待派生类中定义”。在派生类中对此函数提供定义后,它才能具有函数的功能,可被调用。
纯虚函数的作用是在基类中为其派生类保存一个函数的名字,以便派生类根据需要对它进行定义。
如果在基类中没有保存函数名字,则没法实现多态性。如果在一个类中声明了纯虚函数,而在其派生类中没有对该函数定义,则该虚函数在派生类中依然为纯虚函数。
C\C++语言程序设计
再多的文字也表达不完我们要学的东西,所以希望需要学习的朋友可以双
击原文链接,直接转入学习群交换,每天晚上8点开始语音解答,每天晚
上九点开始授课;遇到问题可以加我们的学习群;群里面找老司机给你们
解答C/C++JAVA疑问杂题要编译器要离线视频可以加群
群文件下载
点击下方“浏览原文”
郑华国白癜风医院