java显式构造函数_C++中的显式构造函数
有如下一個(gè)簡(jiǎn)單的復(fù)數(shù)類(lèi):
classClxComplex
{public:
ClxComplex(doubledReal=0.0,doubledImage=0.0){m_dReal=dReal;dImage=dImage;}doubleGetReal()const{returnm_dReal;}doubleGetImage()const{returnm_dImage;}private:doublem_dReal;doublem_dImage;
};
我們知道,下面的3行代碼是等價(jià)的:
ClxComplexlxTest=2.0;
ClxComplexlxTest=ClxComplex(2.0);
ClxComplexlxTest=ClxComplex(2.0,0.0);
其實(shí),對(duì)于前兩行來(lái)說(shuō),編譯器都是把它們轉(zhuǎn)換成第3行的代碼來(lái)實(shí)現(xiàn)的。因?yàn)槲覀儗?xiě)了構(gòu)造函數(shù),編譯器就按照我們的構(gòu)造函數(shù)來(lái)進(jìn)行隱式轉(zhuǎn)換,直接把一個(gè) double數(shù)值隱式轉(zhuǎn)換成了一個(gè)ClxComplex的對(duì)象。可是,有些時(shí)候,我們不希望進(jìn)行隱式轉(zhuǎn)換,或者隱式轉(zhuǎn)換會(huì)造成錯(cuò)誤。比如下面的一個(gè)簡(jiǎn)化的 字符串類(lèi):
classClxString
{public:
ClxString(intiLength);
ClxString(constchar*pString);~ClxString();private:char*m_pString;
};
ClxString::ClxString(intiLength)
{if(iLength>0)
m_pString=newchar[iLength];
}
ClxString::ClxString(constchar*pString)
{
m_pString=newchar[strlen(pString)];
strcpy(m_pString,pString);
}
ClxString::~ClxString()
{if(m_pString!=NULL)
deletem_pString;
}
我們可以用字符串的長(zhǎng)度來(lái)初始化一個(gè)ClxString的對(duì)象,但是我們卻不希望看到下面的代碼:
ClxStringlxTest=13;//等同于ClxStringlxTest=ClxString(13);
這會(huì)給閱讀代碼造成不必要的歧義。
還有,我們知道下面的代碼是用字符串A來(lái)初始化一個(gè)ClxString的對(duì)象:
ClxStringlxTest="A";//等同于ClxStringlxTest=ClxString("A");
可是,如果有人寫(xiě)成:
ClxStringlxTest='A';//等同于ClxStringlxTest=ClxString(65);
那上面的代碼就會(huì)初始化一個(gè)長(zhǎng)度為65(字母A的ASCII碼值,在C和C++中,字符是以ASCII值存儲(chǔ)的)的字符串。
當(dāng)然,上面的情況都不是我們希望看到的。在這個(gè)時(shí)候我們就要用到顯示構(gòu)造函數(shù)了。
將構(gòu)造函數(shù)聲明成explicit就可以防止隱式轉(zhuǎn)換。
下面是使用顯示構(gòu)造函數(shù)的ClxString:
classClxString
{public:explicitClxString(intiLength);
ClxString(constchar*pString);~ClxString();private:char*m_pString;
};
在這種情況下,要想用字符串的長(zhǎng)度來(lái)初始化一個(gè)ClxString對(duì)象,那就必須顯示的調(diào)用構(gòu)造函數(shù):
ClxStringlxTest=ClxString(13);
而下面這些代碼將不能通過(guò)編譯。
ClxStringlxTest=13;
ClxStringlxTest='A';
分享到:
2007-09-11 20:38
瀏覽 476
評(píng)論
總結(jié)
以上是生活随笔為你收集整理的java显式构造函数_C++中的显式构造函数的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: python 期货交易_Python期货
- 下一篇: java 克隆的作用_关于java中克隆