C++ 在继承中虚函数、纯虚函数、普通函数,三者的区别
C++ 在繼承中虛函數(shù)、純虛函數(shù)、普通函數(shù),三者的區(qū)別
1.虛函數(shù)(impure virtual)
C++的虛函數(shù)主要作用是“運(yùn)行時多態(tài)”,父類中提供虛函數(shù)的實(shí)現(xiàn),為子類提供默認(rèn)的函數(shù)實(shí)現(xiàn)。
子類可以重寫父類的虛函數(shù)實(shí)現(xiàn)子類的特殊化。
如下就是一個父類中的虛函數(shù):
class A { public:virtual void out2(string s){cout<<"A(out2):"<<s<<endl;} };2.純虛函數(shù)(pure virtual)
C++中包含純虛函數(shù)的類,被稱為是“抽象類”。抽象類不能使用new出對象,只有實(shí)現(xiàn)了這個純虛函數(shù)的子類才能new出對象。
C++中的純虛函數(shù)更像是“只提供申明,沒有實(shí)現(xiàn)”,是對子類的約束,是“接口繼承”。
C++中的純虛函數(shù)也是一種“運(yùn)行時多態(tài)”。
如下面的類包含純虛函數(shù),就是“抽象類”:
class A { public:virtual void out1(string s)=0;virtual void out2(string s){cout<<"A(out2):"<<s<<endl;} };3.普通函數(shù)(no-virtual)
普通函數(shù)是靜態(tài)編譯的,沒有運(yùn)行時多態(tài),只會根據(jù)指針或引用的“字面值”類對象,調(diào)用自己的普通函數(shù)。
普通函數(shù)是父類為子類提供的“強(qiáng)制實(shí)現(xiàn)”。
因此,在繼承關(guān)系中,子類不應(yīng)該重寫父類的普通函數(shù),因?yàn)楹瘮?shù)的調(diào)用至于類對象的字面值有關(guān)。
4.程序綜合實(shí)例
#include <iostream> using namespace std;class A { public:virtual void out1()=0; ///由子類實(shí)現(xiàn)virtual ~A(){};virtual void out2() ///默認(rèn)實(shí)現(xiàn) {cout<<"A(out2)"<<endl;}void out3() ///強(qiáng)制實(shí)現(xiàn) {cout<<"A(out3)"<<endl;} };class B:public A { public:virtual ~B(){};void out1(){cout<<"B(out1)"<<endl;}void out2(){cout<<"B(out2)"<<endl;}void out3(){cout<<"B(out3)"<<endl;} };int main() {A *ab=new B;ab->out1();ab->out2();ab->out3();cout<<"************************"<<endl;B *bb=new B;bb->out1();bb->out2();bb->out3();delete ab;delete bb;return 0; }執(zhí)行結(jié)果:
總結(jié)
以上是生活随笔為你收集整理的C++ 在继承中虚函数、纯虚函数、普通函数,三者的区别的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: C语言中| 按位或, || 逻辑或。
- 下一篇: C++中mutable、volatile