2011知識(shí)點(diǎn) - 構(gòu)造函數(shù)可以為虛函數(shù)嗎
答案是:不可以
原因:
概念上,虛函數(shù)的意圖是動(dòng)態(tài)綁定,程序會(huì)根據(jù)對(duì)象的動(dòng)態(tài)類(lèi)型來(lái)選擇要調(diào)用的方法。然而在構(gòu)造函數(shù)運(yùn)行的時(shí)候,這個(gè)對(duì)象的動(dòng)態(tài)類(lèi)型還不完整(可以是基類(lèi),也可以是子類(lèi)),沒(méi)有辦法確定它到底是什么類(lèi)型,故構(gòu)造函數(shù)不能動(dòng)態(tài)綁定。
實(shí)現(xiàn)上,vptr是構(gòu)造函數(shù)設(shè)置的。通過(guò)vptr才能找到虛函數(shù)。
如果構(gòu)造函數(shù)為虛函數(shù),通過(guò)構(gòu)造函數(shù)設(shè)置的vptr才能找到構(gòu)造函數(shù),然后調(diào)用它設(shè)置vptr,這是不可能實(shí)現(xiàn)的。
參考:
原因:
概念上,虛函數(shù)的意圖是動(dòng)態(tài)綁定,程序會(huì)根據(jù)對(duì)象的動(dòng)態(tài)類(lèi)型來(lái)選擇要調(diào)用的方法。然而在構(gòu)造函數(shù)運(yùn)行的時(shí)候,這個(gè)對(duì)象的動(dòng)態(tài)類(lèi)型還不完整(可以是基類(lèi),也可以是子類(lèi)),沒(méi)有辦法確定它到底是什么類(lèi)型,故構(gòu)造函數(shù)不能動(dòng)態(tài)綁定。
實(shí)現(xiàn)上,vptr是構(gòu)造函數(shù)設(shè)置的。通過(guò)vptr才能找到虛函數(shù)。
如果構(gòu)造函數(shù)為虛函數(shù),通過(guò)構(gòu)造函數(shù)設(shè)置的vptr才能找到構(gòu)造函數(shù),然后調(diào)用它設(shè)置vptr,這是不可能實(shí)現(xiàn)的。
參考:
posted on 2011-10-07 19:06 simplyzhao 閱讀(443) 評(píng)論(0) 編輯 收藏 引用 所屬分類(lèi): R_找工復(fù)習(xí)2011