c语言中虚函数和纯虚函数,虚函数和纯虚函数的区别是什么?
虛函數(shù)和純虛函數(shù)的區(qū)別:1、純虛函數(shù)只有定義,沒(méi)有實(shí)現(xiàn);而虛函數(shù)既有定義,也有實(shí)現(xiàn)的代碼。2、包含純虛函數(shù)的類(lèi)不能定義其對(duì)象,而包含虛函數(shù)的則可以。
相關(guān)推薦:《C++視頻教程》
虛函數(shù)(impure virtual)
C++的虛函數(shù)主要作用是“運(yùn)行時(shí)多態(tài)”,父類(lèi)中提供虛函數(shù)的實(shí)現(xiàn),為子類(lèi)提供默認(rèn)的函數(shù)實(shí)現(xiàn)。
子類(lèi)可以重寫(xiě)父類(lèi)的虛函數(shù)實(shí)現(xiàn)子類(lèi)的特殊化。
如下就是一個(gè)父類(lèi)中的虛函數(shù):class A
{
public:
virtual void ss()
{
cout<
}
};
純虛函數(shù)(pure virtual)
C++中包含純虛函數(shù)的類(lèi),被稱(chēng)為是“抽象類(lèi)”。抽象類(lèi)不能使用new出對(duì)象,只有實(shí)現(xiàn)了這個(gè)純虛函數(shù)的子類(lèi)才能new出對(duì)象。
C++中的純虛函數(shù)更像是“只提供申明,沒(méi)有實(shí)現(xiàn)”,是對(duì)子類(lèi)的約束,是“接口繼承”。
C++中的純虛函數(shù)也是一種“運(yùn)行時(shí)多態(tài)”。
如下面的類(lèi)包含純虛函數(shù),就是“抽象類(lèi)”:class A
{
public:
virtual void out1(string s)=0; //我是基類(lèi)的虛函數(shù)
};
舉個(gè)栗子#include
#include
#include
#include
#include
using namespace std;
class a
{
private:
public:
a(){ //構(gòu)造函數(shù)用內(nèi)聯(lián)函數(shù)的形式
}
//虛函數(shù)
virtual void xhs(){ //這個(gè)虛函數(shù)必須得在基類(lèi)中實(shí)現(xiàn)
cout<
} //派生類(lèi)中可以不寫(xiě)這個(gè)函數(shù),但是派生類(lèi)對(duì)象調(diào)用時(shí)會(huì)調(diào)用積累的虛函數(shù)
//純虛函數(shù)
virtual void cxhs() =0; //這個(gè)純虛函數(shù)不在基類(lèi)中實(shí)現(xiàn),必須在子類(lèi)中實(shí)現(xiàn)
};
class b:public a
{
private:
public:
void xhs(){ //這個(gè)是可有可無(wú)的
cout<
} //*
//*
void cxhs(){ //這個(gè)是必須有實(shí)現(xiàn)的
cout<
} //* //*
}; //* //*
int main() //* //*
{ //* //*
b c; //* //*
c.xhs(); //* //調(diào)用派生類(lèi)的
c.cxhs();//調(diào)用派生類(lèi)的
}
虛函數(shù)和純虛函數(shù)的區(qū)別
1)、純虛函數(shù)只有定義,沒(méi)有實(shí)現(xiàn);而虛函數(shù)既有定義,也有實(shí)現(xiàn)的代碼。
純虛函數(shù)一般沒(méi)有代碼實(shí)現(xiàn)部分,如 virtual void print() = 0; 2)而一般虛函數(shù)必須要有代碼的實(shí)現(xiàn)部分,否則會(huì)出現(xiàn)函數(shù)未定義的錯(cuò)誤。
2)、包含純虛函數(shù)的類(lèi)不能定義其對(duì)象,而包含虛函數(shù)的則可以。
創(chuàng)作挑戰(zhàn)賽新人創(chuàng)作獎(jiǎng)勵(lì)來(lái)咯,堅(jiān)持創(chuàng)作打卡瓜分現(xiàn)金大獎(jiǎng)總結(jié)
以上是生活随笔為你收集整理的c语言中虚函数和纯虚函数,虚函数和纯虚函数的区别是什么?的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 国产Linux软件
- 下一篇: c 语言 模板函数,函数模板特化