解析C++中構(gòu)造函數(shù)的默認(rèn)參數(shù)和構(gòu)造函數(shù)的重載
C++構(gòu)造函數(shù)的默認(rèn)參數(shù)
和普通函數(shù)一樣,構(gòu)造函數(shù)中參數(shù)的值既可以通過(guò)實(shí)參傳遞,也可以指定為某些默認(rèn)值,即如果用戶(hù)不指定實(shí)參值,編譯系統(tǒng)就使形參取默認(rèn)值。
【例】
#include <iostream> using namespace std; class Box { public : Box(int h=10,int w=10,int len=10); //在聲明構(gòu)造函數(shù)時(shí)指定默認(rèn)參數(shù) int volume( ); private : int height; int width; int length; }; Box::Box(int h,int w,int len) //在定義函數(shù)時(shí)可以不指定默認(rèn)參數(shù) { height=h; width=w; length=len; } int Box::volume( ) { return (height*width*length); } int main( ) { Box box1; //沒(méi)有給實(shí)參 cout<<"The volume of box1 is "<<box1.volume( )<<endl; Box box2(15); //只給定一個(gè)實(shí)參 cout<<"The volume of box2 is "<<box2.volume( )<<endl; Box box3(15,30); //只給定2個(gè)實(shí)參 cout<<"The volume of box3 is "<<box3.volume( )<<endl; Box box4(15,30,20); //給定3個(gè)實(shí)參 cout<<"The volume of box4 is "<<box4.volume( )<<endl; return 0; }
程序運(yùn)行結(jié)果為:
The volume of box1 is 1000 The volume of box2 is 1500 The volume of box3 is 4500 The volume of box4 is 9000
程序中對(duì)構(gòu)造函數(shù)的定義(第12-16行)也可以改寫(xiě)成參數(shù)初始化表的形式:
Box::Box(int h,int w,int len):height(h),width(w),length(len){ }
可以看到,在構(gòu)造函數(shù)中使用默認(rèn)參數(shù)是方便而有效的,它提供了建立對(duì)象時(shí)的多種選擇,它的作用相當(dāng)于好幾個(gè)重載的構(gòu)造函數(shù)。
它的好處是,即使在調(diào)用構(gòu)造函數(shù)時(shí)沒(méi)有提供實(shí)參值,不僅不會(huì)出錯(cuò),而且還確保按照默認(rèn)的參數(shù)值對(duì)對(duì)象進(jìn)行初始化。尤其在希望對(duì)每一個(gè)對(duì)象都有同樣的初始化狀況時(shí)用這種方法更為方便。
關(guān)于構(gòu)造函數(shù)默認(rèn)值的幾點(diǎn)說(shuō)明:
應(yīng)該在聲明構(gòu)造函數(shù)時(shí)指定默認(rèn)值,而不能只在定義構(gòu)造函數(shù)時(shí)指定默認(rèn)值。
程序第5行在聲明構(gòu)造函數(shù)時(shí),形參名可以省略。
如果構(gòu)造函數(shù)的全部參數(shù)都指定了默認(rèn)值,則在定義對(duì)象時(shí)可以給一個(gè)或幾個(gè)實(shí)參,也可以不給出實(shí)參。
在一個(gè)類(lèi)中定義了全部是默認(rèn)參數(shù)的構(gòu)造函數(shù)后,不能再定義重載構(gòu)造函數(shù)。
C++構(gòu)造函數(shù)的重載
在一個(gè)類(lèi)中可以定義多個(gè)構(gòu)造函數(shù),以便提供不同的初始化的方法,供用戶(hù)選用。這些構(gòu)造函數(shù)具有相同的名字,而參數(shù)的個(gè)數(shù)或參數(shù)的類(lèi)型不相同。這稱(chēng)為構(gòu)造函數(shù)的重載。
通過(guò)下面的例子可以了解怎樣應(yīng)用構(gòu)造函數(shù)的重載。
【例】定義兩個(gè)構(gòu)造函數(shù),其中一個(gè)無(wú)參數(shù),一個(gè)有參數(shù)。
#include <iostream> using namespace std; class Box { public : Box( ); //聲明一個(gè)無(wú)參的構(gòu)造函數(shù) //聲明一個(gè)有參的構(gòu)造函數(shù),用參數(shù)的初始化表對(duì)數(shù)據(jù)成員初始化 Box(int h,int w,int len):height(h),width(w),length(len){ } int volume( ); private : int height; int width; int length; }; Box::Box( ) //定義一個(gè)無(wú)參的構(gòu)造函數(shù) { height=10; width=10; length=10; } int Box::volume( ){ return (height*width*length); } int main( ) { Box box1; //建立對(duì)象box1,不指定實(shí)參 cout<<"The volume of box1 is "<<box1.volume( )<<endl; Box box2(15,30,25); //建立對(duì)象box2,指定3個(gè)實(shí)參 cout<<"The volume of box2 is "<<box2.volume( )<<endl; return 0; }
在本程序中定義了兩個(gè)重載的構(gòu)造函數(shù),其實(shí)還可以定義其他重載構(gòu)造函數(shù),其原型聲明可以為:
Box::Box(int h); //有1個(gè)參數(shù)的構(gòu)造函數(shù) Box::Box(int h,int w); //有兩個(gè)參數(shù)的構(gòu)造函數(shù)
在建立對(duì)象時(shí)分別給定1個(gè)參數(shù)和2個(gè)參數(shù)。
關(guān)于構(gòu)造函數(shù)的重載的幾點(diǎn)說(shuō)明:
調(diào)用構(gòu)造函數(shù)時(shí)不必給出實(shí)參的構(gòu)造函數(shù),稱(chēng)為默認(rèn)構(gòu)造函數(shù)(default constructor)。顯然,無(wú)參的構(gòu)造函數(shù)屬于默認(rèn)構(gòu)造函數(shù)。一個(gè)類(lèi)只能有一個(gè)默認(rèn)構(gòu)造函數(shù)。
如果在建立對(duì)象時(shí)選用的是無(wú)參構(gòu)造函數(shù),應(yīng)注意正確書(shū)寫(xiě)定義對(duì)象的語(yǔ)句。
盡管在一個(gè)類(lèi)中可以包含多個(gè)構(gòu)造函數(shù),但是對(duì)于每一個(gè)對(duì)象來(lái)說(shuō),建立對(duì)象時(shí)只執(zhí)行其中一個(gè)構(gòu)造函數(shù),并非每個(gè)構(gòu)造函數(shù)都被執(zhí)行。
欄 目:C語(yǔ)言
本文標(biāo)題:解析C++中構(gòu)造函數(shù)的默認(rèn)參數(shù)和構(gòu)造函數(shù)的重載
本文地址:http://mengdiqiu.com.cn/a1/Cyuyan/2711.html
您可能感興趣的文章
- 04-02func函數(shù)+在C語(yǔ)言 func函數(shù)在c語(yǔ)言中
- 04-02c語(yǔ)言中對(duì)數(shù)函數(shù)的表達(dá)式 c語(yǔ)言中對(duì)數(shù)怎么表達(dá)
- 04-02c語(yǔ)言沒(méi)有round函數(shù) round c語(yǔ)言
- 04-02C語(yǔ)言中怎么打出三角函數(shù) c語(yǔ)言中怎么打出三角函數(shù)的值
- 01-10數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)- 解析最少換車(chē)次數(shù)的問(wèn)題詳解
- 01-10深入理解C++中常見(jiàn)的關(guān)鍵字含義
- 01-10使用C++實(shí)現(xiàn)全排列算法的方法詳解
- 01-10深入Main函數(shù)中的參數(shù)argc,argv的使用詳解
- 01-10APUE筆記之:進(jìn)程環(huán)境詳解
- 01-10深入解析最長(zhǎng)公共子串


閱讀排行
- 1C語(yǔ)言 while語(yǔ)句的用法詳解
- 2java 實(shí)現(xiàn)簡(jiǎn)單圣誕樹(shù)的示例代碼(圣誕
- 3利用C語(yǔ)言實(shí)現(xiàn)“百馬百擔(dān)”問(wèn)題方法
- 4C語(yǔ)言中計(jì)算正弦的相關(guān)函數(shù)總結(jié)
- 5c語(yǔ)言計(jì)算三角形面積代碼
- 6什么是 WSH(腳本宿主)的詳細(xì)解釋
- 7C++ 中隨機(jī)函數(shù)random函數(shù)的使用方法
- 8正則表達(dá)式匹配各種特殊字符
- 9C語(yǔ)言十進(jìn)制轉(zhuǎn)二進(jìn)制代碼實(shí)例
- 10C語(yǔ)言查找數(shù)組里數(shù)字重復(fù)次數(shù)的方法
本欄相關(guān)
- 04-02c語(yǔ)言函數(shù)調(diào)用后清空內(nèi)存 c語(yǔ)言調(diào)用
- 04-02func函數(shù)+在C語(yǔ)言 func函數(shù)在c語(yǔ)言中
- 04-02c語(yǔ)言的正則匹配函數(shù) c語(yǔ)言正則表達(dá)
- 04-02c語(yǔ)言用函數(shù)寫(xiě)分段 用c語(yǔ)言表示分段
- 04-02c語(yǔ)言中對(duì)數(shù)函數(shù)的表達(dá)式 c語(yǔ)言中對(duì)
- 04-02c語(yǔ)言編寫(xiě)函數(shù)冒泡排序 c語(yǔ)言冒泡排
- 04-02c語(yǔ)言沒(méi)有round函數(shù) round c語(yǔ)言
- 04-02c語(yǔ)言分段函數(shù)怎么求 用c語(yǔ)言求分段
- 04-02C語(yǔ)言中怎么打出三角函數(shù) c語(yǔ)言中怎
- 04-02c語(yǔ)言調(diào)用函數(shù)求fibo C語(yǔ)言調(diào)用函數(shù)求
隨機(jī)閱讀
- 01-10使用C語(yǔ)言求解撲克牌的順子及n個(gè)骰子
- 01-10C#中split用法實(shí)例總結(jié)
- 08-05DEDE織夢(mèng)data目錄下的sessions文件夾有什
- 08-05dedecms(織夢(mèng))副欄目數(shù)量限制代碼修改
- 01-10SublimeText編譯C開(kāi)發(fā)環(huán)境設(shè)置
- 04-02jquery與jsp,用jquery
- 01-11ajax實(shí)現(xiàn)頁(yè)面的局部加載
- 01-11Mac OSX 打開(kāi)原生自帶讀寫(xiě)NTFS功能(圖文
- 08-05織夢(mèng)dedecms什么時(shí)候用欄目交叉功能?
- 01-10delphi制作wav文件的方法