构造函数必须是public吗_c++ 构造函数,析构函数必须要给成公有的吗?
這是一道面試題,記得當(dāng)時(shí)回答的并不好,因?yàn)槲覀儗?duì)構(gòu)造函數(shù)經(jīng)常使用,例如單例模式下構(gòu)造函數(shù)我們會(huì)聲明為私有的,其他情況下構(gòu)造函數(shù)我們都會(huì)聲明為公有的,但是析構(gòu)函數(shù)是否必須聲明為公有的,還真沒注意。下面我們就一起學(xué)習(xí)下。
(一)一個(gè)類的析構(gòu)函數(shù)只能有一個(gè),也不能重載
1.類的析構(gòu)函數(shù),是在對(duì)象的生命周期結(jié)束后,由系統(tǒng)自動(dòng)調(diào)用的。
2.該函數(shù)不需任何參數(shù),不需要傳入任何參數(shù),如果非要寫一個(gè)帶參數(shù)的析構(gòu)函數(shù),則會(huì)造成編譯器的抱怨,造成二義性,這一點(diǎn)和夠贊函數(shù)不同,構(gòu)造函數(shù)可以根據(jù)傳入的參數(shù),選擇合適的構(gòu)造函數(shù)。構(gòu)造函數(shù)可以顯示調(diào)用,而析構(gòu)函數(shù)系統(tǒng)負(fù)責(zé)調(diào)用,程序無法控制其調(diào)用時(shí)機(jī)。
(二)構(gòu)造函數(shù),析構(gòu)函數(shù)必須是公有的嗎?
1.析構(gòu)函數(shù)必須給成公有的,因?yàn)閷?duì)象生命周期結(jié)束后,系統(tǒng)會(huì)調(diào)用,如果不是公有的則會(huì)引發(fā)錯(cuò)誤
2.構(gòu)造函數(shù)可以是公有的,私有的,保護(hù)的
#include class Test{private:double num;Test(double d){num = d;}//~Test(){} 系統(tǒng)報(bào)錯(cuò)public:Test(int n){num = n;}~Test(){}};void Test:: InnerCreate(){ Test inner(3.14);//調(diào)用私有的構(gòu)造函數(shù)}int main(){ Test obj(0);//調(diào)用公有的構(gòu)造函數(shù) obj.InnerCreate(); return 0;}總結(jié)
以上是生活随笔為你收集整理的构造函数必须是public吗_c++ 构造函数,析构函数必须要给成公有的吗?的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: python 定义函数方法_Python
- 下一篇: c++ list容器获取第n给元素_深入