日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

构造函数不可以是虚函数;析构函数可以是虚函数,也可以是纯虚函数。

發(fā)布時(shí)間:2025/6/15 编程问答 26 豆豆
生活随笔 收集整理的這篇文章主要介紹了 构造函数不可以是虚函数;析构函数可以是虚函数,也可以是纯虚函数。 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

構(gòu)造函數(shù)不可以是虛函數(shù);析構(gòu)函數(shù)可以是虛函數(shù),也可以是純虛函數(shù)。

一:構(gòu)造函數(shù)不能聲明為虛函數(shù)的原因

1 構(gòu)造一個(gè)對(duì)象的時(shí)候,必須知道對(duì)象的實(shí)際類型,而虛函數(shù)行為是在運(yùn)行期間確定實(shí)際類型的。
而在構(gòu)造一個(gè)對(duì)象時(shí),由于對(duì)象還未構(gòu)造成功。編譯器無(wú)法知道對(duì)象 的實(shí)際類型,是該類本身,
還是該類的一個(gè)派生類,或是更深層次的派生類。無(wú)法確定。

2 虛函數(shù)的執(zhí)行依賴于虛函數(shù)表。而虛函數(shù)表在構(gòu)造函數(shù)中進(jìn)行初始化工作,即初始化vptr,
讓他指向正確的虛函數(shù)表。
而在構(gòu)造對(duì)象期間,虛函數(shù)表還沒(méi)有被初 始化,將無(wú)法進(jìn)行。

二:析構(gòu)函數(shù)可以是虛函數(shù),也可以是純虛函數(shù)


?在某些類里聲明純虛析構(gòu)函數(shù)很方便。純虛函數(shù)將產(chǎn)生抽象類——不能實(shí)例化的類(即不能創(chuàng)建此類型的對(duì)象)。有些時(shí)候,你想使一個(gè)類成為抽象類,但剛好又沒(méi)有任何純虛函數(shù)。怎么辦?因?yàn)槌橄箢愂菧?zhǔn)備被用做基類的,基類必須要有一個(gè)虛析構(gòu)函數(shù),純虛函數(shù)會(huì)產(chǎn)生抽象類,所以方法很簡(jiǎn)單:在想要成為抽象類的類里聲明一個(gè)純虛析構(gòu)函數(shù)。

 class awov {public:virtual ~awov() = 0; // 聲明一個(gè)純虛析構(gòu)函數(shù)};

? ? 這個(gè)類有一個(gè)純虛函數(shù),所以它是抽象的,而且它有一個(gè)虛析構(gòu)函數(shù),所以不會(huì)產(chǎn)生析構(gòu)函數(shù)問(wèn)題。但這里還有一件事:必須提供純虛析構(gòu)函數(shù)的定義:

  awov::~awov() {} // 純虛析構(gòu)函數(shù)的定義

? ? 這個(gè)定義是必需的,因?yàn)樘撐鰳?gòu)函數(shù)工作的方式是:最底層的派生類的析構(gòu)函數(shù)最先被調(diào)用,然后各個(gè)基類的析構(gòu)函數(shù)被調(diào)用。這就是說(shuō),即使是抽象類,編譯器也要產(chǎn)生對(duì)~awov的調(diào)用,所以要保證為它提供函數(shù)體。如果不這么做,鏈接器就會(huì)檢測(cè)出來(lái),最后還是得回去把它添上。

? ? 雖然抽象類的析構(gòu)函數(shù)可以是純虛函數(shù),但要實(shí)例化其派生類對(duì)象,仍必須提供抽象基類中析構(gòu)函數(shù)的函數(shù)體。抽象類的純虛函數(shù)的實(shí)現(xiàn)可以由自身給出,也可以由派生類給出。錯(cuò)了,除了析構(gòu)函數(shù)外,其他函數(shù)都不行,必須要在派生類中進(jìn)行實(shí)現(xiàn)

總結(jié)

以上是生活随笔為你收集整理的构造函数不可以是虚函数;析构函数可以是虚函数,也可以是纯虚函数。的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。