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

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

生活随笔

當(dāng)前位置: 首頁(yè) > 编程语言 > c/c++ >内容正文

c/c++

java显式构造函数_C++中的显式构造函数

發(fā)布時(shí)間:2025/3/21 c/c++ 34 豆豆
生活随笔 收集整理的這篇文章主要介紹了 java显式构造函数_C++中的显式构造函数 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

有如下一個(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)題。

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