C 預設的建構函式

2021-09-22 09:50:52 字數 2406 閱讀 2527

注意:如果類中使用者沒有定義建構函式,系統會自動提供乙個函式體為空的預設建構函式。

但是,只要類中定義了乙個建構函式(不一定無參建構函式),系統將不再給它提供

預設的建構函式。因為,預設的建構函式被類中的提供的建構函式給覆蓋了。然而,

物件一建立,就需要初始化,所以,使用者在程式中此時根據自己的需要來設定預設的

建構函式..... 

//無引數的預設建構函式

//

例 3.10

#includeusing

namespace

std;

class

location

location()

//程式設計師自己設定的無引數(預設)的建構函式

location(

int m, int

n)

void init(int initx,int

inity)

intgetx()

intgety()

private

:

intx;

inty;

};int

main()

//例3.11 關於計時器的例子

#include

using

namespace

std;

class

timer

timer(

char *t)//

含乙個數字串引數的建構函式 char *t = "20"

timer(

int t)//

含乙個整型引數的建構函式

timer(

int min, int sec)//

含有兩個整型引數的建構函式

intgettime()

private

:

intseconds;

}; int

main()

//帶預設引數的建構函式

#include

#include

using

namespace

std;

class

complex;

complex::complex(

double r,double i) //

在類外定義建構函式時

//可以不再指定引數的預設值

double

complex::abscomplex()

intmain()

分析:在類complex中,構造complex的兩個引數均含有預設引數值0.0,因此,在定義物件

時可根據需要使用其預設值,在主函式main中定義了3個物件s1、s2、s3,它們都是

合法的物件。由於傳遞的引數的個數不同,使它們的私有成員real和imag取得不同的

值。由於定義物件s1時,沒有傳遞引數,所以real和imag均取得函式的預設值為其賦值

因此,real和imag均為0.0;由於定義物件s2時,只傳遞乙個引數,這個引數傳遞給構造

函式的第乙個形參,而第二個形參去預設值,所以,物件s2的real取得值為1.1,imag值

取得0.0;由於定義物件s3時,傳遞了兩個引數,這兩個實參分別賦給了real和imag取得

1.1,2.2。

執行結果 複數1的絕對值是:0

執行結果 複數2的絕對值是:1.1

執行結果 複數3的絕對值是:2.45967

拓展知識點:

1、如果建構函式在類的宣告外定以,那麼預設引數應該在類內宣告建構函式原型時指定,

而不能在類外建構函式定義時指定。

2、如果建構函式的全部引數都指定了預設值,則在定義物件時可以指定乙個或幾個實參,

也可以不給出實參,這時的建構函式也屬於預設建構函式

例如: comolex(double r=0.0, double i=0.0);

因為類中只能有乙個預設的建構函式,因此,不能同時再宣告乙個無參的

建構函式如下:

complex();

原因:如果建立乙個物件 complex s1;

編譯系統將無法識別應該呼叫以上那乙個建構函式,產生了二義性 

3、在乙個類中定義了全部是預設引數的建構函式後,不能再定義過載建構函式。

例如: 

在乙個類中有以下建構函式的宣告:

complex(double r=0.0, double i=0.0); //宣告全部是預設引數的建構函式 

complex(double r); 

原因:如果定義乙個物件 complex s2(1.1);

編譯系統將無法判斷應該呼叫哪個建構函式 

程式猿神奇的手,每時每刻,這雙手都在改變著世界的互動方式!

C 預設建構函式

c 預設建構函式 一直認為若程式設計師沒有自己定義無引數的建構函式,那麼編譯器會自動生成預設建構函式,來進行對成員函式的初始化,但這種認為是有誤的,不全面的.預設的建構函式分為有用的和無用的,所謂無用的預設建構函式就是乙個空函式 什麼操作也不做,而有用的預設建構函式是可以初始化成員的函式。對建構函式...

c 預設建構函式

c 什麼時候合成預設建構函式?c 合成的預設建構函式都做些什麼?以下三個條件同時滿足 源程式中沒有宣告任何建構函式 編譯器需要該類有預設建構函式 程式中需要呼叫預設建構函式 預設建構函式是以編譯單元為單位生成的 什麼時候編譯器需要預設建構函式 該類中有 有預設建構函式 的成員物件 該類繼承乙個有預設...

C 預設建構函式

先說c 新手一般的誤解 1.任何乙個類如果沒有定義預設建構函式,編譯器會自動合成乙個預設建構函式。2.編譯器合成出來的預設建構函式,會顯式的設定類中成員變數的值。先看乙個最基本的例子 從圖中可以看到物件a並沒有被初始化,即編譯器沒有為類a合成乙個預設建構函式。其實c 標準委員會曾敘述,如果沒有任何使...