国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > C++ > 正文

解析C++中構造函數的默認參數和構造函數的重載

2020-01-26 14:52:14
字體:
來源:轉載
供稿:網友

C++構造函數的默認參數

和普通函數一樣,構造函數中參數的值既可以通過實參傳遞,也可以指定為某些默認值,即如果用戶不指定實參值,編譯系統就使形參取默認值。

【例】

#include <iostream>using namespace std;class Box{  public :  Box(int h=10,int w=10,int len=10); //在聲明構造函數時指定默認參數  int volume( );  private :  int height;  int width;  int length;};Box::Box(int h,int w,int len) //在定義函數時可以不指定默認參數{  height=h;  width=w;  length=len;}int Box::volume( ){  return (height*width*length);}int main( ){  Box box1; //沒有給實參  cout<<"The volume of box1 is "<<box1.volume( )<<endl;  Box box2(15); //只給定一個實參  cout<<"The volume of box2 is "<<box2.volume( )<<endl;  Box box3(15,30); //只給定2個實參  cout<<"The volume of box3 is "<<box3.volume( )<<endl;  Box box4(15,30,20); //給定3個實參  cout<<"The volume of box4 is "<<box4.volume( )<<endl;  return 0;}

程序運行結果為:

The volume of box1 is 1000The volume of box2 is 1500The volume of box3 is 4500The volume of box4 is 9000

程序中對構造函數的定義(第12-16行)也可以改寫成參數初始化表的形式:

  Box::Box(int h,int w,int len):height(h),width(w),length(len){ }

可以看到,在構造函數中使用默認參數是方便而有效的,它提供了建立對象時的多種選擇,它的作用相當于好幾個重載的構造函數。

它的好處是,即使在調用構造函數時沒有提供實參值,不僅不會出錯,而且還確保按照默認的參數值對對象進行初始化。尤其在希望對每一個對象都有同樣的初始化狀況時用這種方法更為方便。

關于構造函數默認值的幾點說明:
應該在聲明構造函數時指定默認值,而不能只在定義構造函數時指定默認值。
程序第5行在聲明構造函數時,形參名可以省略。
如果構造函數的全部參數都指定了默認值,則在定義對象時可以給一個或幾個實參,也可以不給出實參。
在一個類中定義了全部是默認參數的構造函數后,不能再定義重載構造函數。

C++構造函數的重載
在一個類中可以定義多個構造函數,以便提供不同的初始化的方法,供用戶選用。這些構造函數具有相同的名字,而參數的個數或參數的類型不相同。這稱為構造函數的重載。

通過下面的例子可以了解怎樣應用構造函數的重載。

【例】定義兩個構造函數,其中一個無參數,一個有參數。

#include <iostream>using namespace std;class Box{  public : Box( ); //聲明一個無參的構造函數  //聲明一個有參的構造函數,用參數的初始化表對數據成員初始化  Box(int h,int w,int len):height(h),width(w),length(len){ }  int volume( );  private :  int height;  int width;  int length;};Box::Box( ) //定義一個無參的構造函數{  height=10; width=10; length=10;}int Box::volume( ){  return (height*width*length);}int main( ){  Box box1; //建立對象box1,不指定實參  cout<<"The volume of box1 is "<<box1.volume( )<<endl;  Box box2(15,30,25); //建立對象box2,指定3個實參  cout<<"The volume of box2 is "<<box2.volume( )<<endl;  return 0;}

在本程序中定義了兩個重載的構造函數,其實還可以定義其他重載構造函數,其原型聲明可以為:

  Box::Box(int h); //有1個參數的構造函數  Box::Box(int h,int w); //有兩個參數的構造函數


在建立對象時分別給定1個參數和2個參數。

關于構造函數的重載的幾點說明:
調用構造函數時不必給出實參的構造函數,稱為默認構造函數(default constructor)。顯然,無參的構造函數屬于默認構造函數。一個類只能有一個默認構造函數。
如果在建立對象時選用的是無參構造函數,應注意正確書寫定義對象的語句。
盡管在一個類中可以包含多個構造函數,但是對于每一個對象來說,建立對象時只執行其中一個構造函數,并非每個構造函數都被執行。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 开平市| 旺苍县| 平谷区| 赞皇县| 宾川县| 石柱| 云和县| 满城县| 拜泉县| 揭西县| 江华| 乌拉特中旗| 德兴市| 固阳县| 象州县| 晋宁县| 名山县| 汉川市| 兴城市| 承德县| 临西县| 千阳县| 嵩明县| 班玛县| 建湖县| 天全县| 那曲县| 时尚| 社旗县| 离岛区| 连江县| 南漳县| 南溪县| 安塞县| 台东市| 瑞丽市| 阳高县| 望江县| 通江县| 永昌县| 洛浦县|