建構函式和析構函式

2021-06-22 12:01:35 字數 1602 閱讀 8184

stock hot=;
因為資料部分的訪問狀態是私有的,程式不能訪問資料成員。

建立stock的建構函式,由於需要為stock提供3個值,因此應為建構函式提供3個引數值,程式設計師可能指向設定company成員,而其他的設定為0;使用預設引數完成

宣告如下:

stock (const char* co,int n=0,double pr=0.0);

建構函式的原型和函式頭雖然沒有返回值,但也沒有宣告為void型別。

程式宣告物件時,將自動呼叫建構函式。

stock::stock (const char* company,int shares,double share_val)

這是錯誤的,建構函式的引數表示的不是類成員,而是賦值給類成員的值。因此引數名不能與類成員相同。

使用建構函式

stock food=stock("word cahhage",250,1.25);

stock garment("furry mason",50,2.5);

stock *pstock=new stock("electrostock",18,19.0);

第一種方式是顯示的呼叫建構函式;

第二種方式是隱士的呼叫建構函式;

第三種方式,物件的位址付給pstock指標,這種情況下,物件沒有名稱,但可以使用指標來管理物件。

預設建構函式

預設建構函式是在未提供顯示的初始化值時,被用來建立物件的建構函式。 stock stock1;

當且僅當沒有定義任何建構函式時,編譯器才會提供預設建構函式。為類定義了建構函式後,程式設計師就必須為他提供預設建構函式。

有兩種方式定義預設建構函式  給已有的建構函式提供引數提供的預設值,通過過載定義乙個沒有引數的建構函式。

const成員函式

const stock land=stock("kludgehorn");

land.show();

對於目前的c++來說,編譯器將拒絕第二行,因為show()的**無法保證呼叫物件不被修改。

保證函式不會修改呼叫物件,c++的解決辦法是在const關鍵字放在函式的括號後面

void show()const;

this指標

const stock & stock::topval(const stock & s)const

呼叫stock1.topval(stock2)的時候 s是 stock2的別名,但stock1 沒有別名。c++解決這種問題的方法是,使用稱為this的特殊指標,this指標指向呼叫成員函式的物件,這樣

stock1.topval(stock2)時,將this設定為stock1的物件的位址。一般來說,所有類的方法都把this設定為呼叫它的物件的指標。如果方法血藥引用整個呼叫物件,則可以使用表示式*this。要返回的不是this,this是物件的位址不是物件本身,*this 作為呼叫物件的別名。返回型別為引用意味著返回的是呼叫物件本身,而不是其拷貝。

建構函式和析構函式

建構函式沒有返回值,不能被顯示的呼叫。它是在定義物件時由系統自動執行的,而且只執行一次。如果沒有定義建構函式,系統會自動生成乙個建構函式,只是這個建構函式的函式體是空,沒有引數,也不執行任何初始化的操作。帶引數的建構函式 有一種簡練,方便的寫法 建構函式的引數初始化表 box int h,int w...

析構函式和建構函式

每個物件生成的時候都要完成物件的初始化,如設定屬性的初始值。c 中規定每個類都有乙個初始值,如果沒有,系統會產生乙個預設的建構函式。這個建構函式沒有任何引數,不做任何額外的工作。但往往我們會自己寫乙個建構函式,用來進行特殊的初始化工作。這樣的話,編譯器就不會再為其生成預設的建構函式。class 類名...

建構函式和析構函式

一.建構函式 也是類的乙個成員函式 作用 在物件被建立時將物件初始化。就像定義基本型別變數時也可以同時賦值一樣,在定義物件時,也可以同時對其資料成員賦初值。這就稱為物件初始化 除一般成員函式的特徵的一些特殊性質 1.建構函式的函式名與類名相同,且沒有返回值 2.建構函式在物件被建立時將被自動呼叫 3...