欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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

 更新時間:2015年09月16日 18:18:11   投稿:goldensun  
這篇文章主要介紹了解析C++中構造函數的默認參數和構造函數的重載,是C++入門學習中的基礎知識,需要的朋友可以參考下

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

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

【例】

#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 1000
The volume of box2 is 1500
The volume of box3 is 4500
The 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)。顯然,無參的構造函數屬于默認構造函數。一個類只能有一個默認構造函數。
如果在建立對象時選用的是無參構造函數,應注意正確書寫定義對象的語句。
盡管在一個類中可以包含多個構造函數,但是對于每一個對象來說,建立對象時只執(zhí)行其中一個構造函數,并非每個構造函數都被執(zhí)行。

相關文章

  • 一起聊聊C++中的智能指針

    一起聊聊C++中的智能指針

    C++?是手工管理內存的分配和釋放,這給了程序員極大的自由度也給了我們極高的門檻,弄不好就得內存泄露。使用智能指針能更好的管理堆內存,本文主要給大家介紹一下c++的智能指針,需要的朋友可以參考下
    2022-07-07
  • C語言中scanf函數與空格回車的用法說明

    C語言中scanf函數與空格回車的用法說明

    這篇文章主要介紹了C語言中scanf函數與空格回車的用法說明,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-12-12
  • C++中實現多態(tài)有幾種方式小結

    C++中實現多態(tài)有幾種方式小結

    在C++中,多態(tài)是一種面向對象編程的特性,允許以統(tǒng)一的方式處理不同類型的對象,并根據實際對象的類型來執(zhí)行相應的操作,本文給大家介紹了C++中實現多態(tài)有幾種方式小結,需要的朋友可以參考下
    2024-12-12
  • 詳解如何將Spire.Doc for C++集成到C++程序中

    詳解如何將Spire.Doc for C++集成到C++程序中

    Spire.Doc for C++是一個專業(yè)的Word庫,供開發(fā)人員在任何類型的C++應用程序中閱讀、創(chuàng)建、編輯、比較和轉換 Word 文檔,本文演示了如何以兩種不同的方式將 Spire.Doc for C++ 集成到您的 C++ 應用程序中,希望對大家有所幫助
    2023-05-05
  • C++ 基礎編程之十進制轉換為任意進制及操作符重載

    C++ 基礎編程之十進制轉換為任意進制及操作符重載

    這篇文章主要介紹了C++ 基礎編程之十進制轉換為任意進制及操作符重載的相關資料,需要的朋友可以參考下
    2017-02-02
  • C++11、C++14、C++17、C++20常用新特性

    C++11、C++14、C++17、C++20常用新特性

    本文主要介紹了C++11、C++14、C++17、C++20常用新特性,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2023-03-03
  • 用代碼和UML圖化解設計模式之橋接模式的深入分析

    用代碼和UML圖化解設計模式之橋接模式的深入分析

    本篇文章是對橋接模式進行了詳細的分析介紹,需要的朋友參考下
    2013-05-05
  • 淺談Qt QGraphics體系及刷新機制介紹

    淺談Qt QGraphics體系及刷新機制介紹

    這篇文章主要介紹了淺談Qt QGraphics體系及刷新機制介紹,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2020-04-04
  • C語言的模板與泛型編程你了解嗎

    C語言的模板與泛型編程你了解嗎

    這篇文章主要為大家詳細介紹了C語言的模板與泛型編程,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助
    2022-03-03
  • 手把手教你實現一個C++單鏈表

    手把手教你實現一個C++單鏈表

    鏈表是一種數據結構,用于數據的存儲。這篇文章主要為大家介紹了如何實現一個C++單鏈表,文中的示例代碼講解詳細,感興趣的小伙伴可以嘗試一下
    2022-11-11

最新評論