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 ...