C 物件導向程式設計《二》 建構函式

2021-07-10 02:18:29 字數 2589 閱讀 1197

class

complex;

類的前置宣告只是告訴將類的名稱編譯器,並未提供class的任何其他資訊,因此前置宣告使我們得以使用類的指標和引用,而不能使用類的物件,如下

complex *p = 0;  //定義乙個類指標(class pointer)

void func(const

complex& ); //以complex作為資料型別

但這樣用就會出錯

complex obj;
class

complex

complex& operator += (const

complex&);

double real () const

double imag () const

private:

double re, im;

friend

complex& _doapl (complex*, const

complex&);

}

注意建構函式裡的引數有預設值的,稱為預設實參,建立物件時如果不指定引數值就使用預設值。

complex (double r = 0, double i = 0)

: re(r), im(i)

{}

冒號後面的就是初始化列表;建構函式就是讓物件有個初始值,因為其就是來建立物件的,不可能在程式裡面直接呼叫建構函式,也不關心其返回值,因此建構函式是不需要有返回型別,但要注意應該在初始化列表對private成員進行初始化

因為對於乙個物件,其數值的設定有兩個階段:乙個是初始化,乙個是後面的賦值操作,而初始化列表就是在初始階段。對應的有析構函式,上面的class不用寫,class without points的一般不用寫析構函式。

class

complex

complex () : re(0), im(0) {}//這個和上面的建構函式衝突的

private:

double re, im;

}

class a

private:

a();

a(const a& rhs);

...

};a& a::getinstance()

使用如下

a::getinstance().setup();
//這種使用沒問題

complex c1(2,1);

cout

<< c1.real();

cout

<< c1.imag();

/*會出錯,因為指明物件是const,而下面呼叫可能改變物件內容,所以會出錯*/

const

complex c1(2,1);

cout

<< c1.real();

cout

<< c1.imag();

注意const修飾詞在class定義和函式定義中都得有

下面看乙個栗子

class val_class

int& val() const

private:

int _val;

};

編譯器會報錯,這回產生問題,理由如下:返回乙個引用指向_val,實際上相當於將_val開放出去,允許程式在其他方向加以修改。由於member function可以根據const與否而過載,因此解決方法如下:提供兩份定義,一為const版本,一為non-const版本。如下

class val_class

const

int& val() const

int& val()

private:

int _val;

};

non-const class object 會呼叫non-const版的val()函式,const class object 會呼叫const版的val()函式,沒有乙個const class object可以呼叫公開介面的non-const成分

pointer引數和reference引數的重要差異:傳入的pointer可能為0,因此必須得先檢查確定其值是否為0,而reference則必定會代表某個物件,所以不須做此檢查

class

complex

int func(const

complex& param)

;private:

double re, im;

}

比如成員函式func裡的引數,在func函式裡就可以直接呼叫引數param的private成員。

C 物件導向程式設計 建構函式

建構函式的相互呼叫又稱為 建構函式初始化器,這是c 的乙個特殊的語法 在有些時候,建構函式內包含一些共同的 為了達到 的復用性,函式初始化器很好的解決了這一問題 示例 如下 using system namespace mycsharppro private int age public perso...

Python物件導向程式設計,建構函式

物件導向程式設計,是將資料和運算元據的相關方法封裝到方法中,組織 和資料的方式更接近人的思維,從而大大提高了程式設計效率 物件導向程式設計 構造體 方法 建構函式 init 當傳入引數值的時候,呼叫的時候首先初始化物件,也可以新增加類的屬性,是隨著物件產生而產生的.例項屬性和類屬性 class st...

C 物件導向程式設計入門 建構函式與析構函式(二)

下面我們來看乙個帶引數的建構函式是如何進行物件的始化操作的。如下 include using namespace std class teacher void show protected char name void teacher show 我們建立了乙個帶有字元指標的帶有形參的teacher ...