類的構造和析構函式 1

2021-09-17 20:32:24 字數 2356 閱讀 5151

stcok類樣例:

class stock

public:

void acquire(const std::string &co,long n,double pr);

void buy(long sum,double price);

void sell(long sum,double price);

void update(double price);

void show();

}

`在cpp中class型別無法像int或者結構一樣初始化,為此cpp提供了乙個特殊的成員函式——建構函式,專門用於創造新的物件,並將值賦給它們的資料成員。

1.1宣告和定義建構函式

函式原型:

stock(const string &co,long n=0,double pr=0.0)
****注意:****儘管沒有返回值,但是stock並沒有被宣告為void型別,實際上,建構函式沒有宣告型別。函式原型位於類宣告的公有部分。

下面是建構函式的乙個可能定義:

stock::stock (const string &co,long n,double pr)

這是錯誤的,建構函式表示的不是類成員本身,而是付給類成員的值,所以引數名不能與類成員相同,否則最終的**將是這樣的:

shares=shares;
為了避免這樣的混亂,一種常見的作法是在資料成員中使用m_字首:

class stock

因此將建立flu_cat 物件,但不初始化其成員,這和下面的語句建立x,但沒有給它提供值一樣:

int x;
預設建構函式沒有引數,因為宣告中不包含值。

***注意:***當且僅當沒有定義任何建構函式時,編譯器才會提供預設函式建構函式。為類定義了建構函式以後,就必須手動提供預設的建構函式,否則像上面的宣告就會出錯。

下面提供兩種定義預設建構函式的方式:

第一種:給已有的建構函式的所有引數提供預設值:

stock(const string&co="error",int n=0;double pr=0.0);
另一種方式是通過函式過載來定義另乙個建構函式——乙個沒有引數的建構函式:

stock();
注意:兩種方法不可同時使用。

實際上,通常在初始化所有物件時,以確保所有成員一開始就有合理的值。因此,使用者定義的預設建構函式通常給所有的成員提供隱式初始值:

stock ::stock()

在使用上述任意一種方法建立了預設建構函式後,便可以宣告物件變數,而不對他們進行顯示初始化:

stock first;

stock first=stock();

stock *prelief=new stock;

然而,不要被非預設建構函式的隱式形式所誤導:

stock first("concrete cc");//1

stock second();//2

stock third;//3

第乙個宣告呼叫非預設建構函式,即接受引數的建構函式;

第二個宣告指出,second是乙個返回stock物件的函式;

第三個合理

2.1析構函式

建構函式構建完函式過後,程式負責跟蹤該物件,直到其過期為止,物件過期時,程式將自動呼叫析構函式,來完成清理工作。

如:如果建構函式使用new來分配記憶體,則析構函式使用delete來釋放記憶體。

本文所用的stock類中並沒有使用new,所以析構函式並沒有所需要的完成的任務,在這種情況下,只需要讓編譯器生成乙個什麼都不需要做的隱式析構函式即可。

析構函式的名稱比較特殊:在類名前加上。因此,stock類的析構函式為stock()。另外,和建構函式一樣,析構函式也沒有返回值和宣告型別。與建構函式不同的是,析構函式沒有引數,所以stock類的析構函式原型如下:

~stock();
由於stock類的析構函式不承擔任何重要的工作,因此如下構造

stock::~stock

2.1.1析構函式何時被呼叫

1.靜態儲存類物件,則其析構函式將在程式結束時自動呼叫

2.自動儲存類物件,將在程式執行完**塊時自動呼叫

3如果物件通過new呼叫時,當使用delete來釋放記憶體時,析構函式自動呼叫。

4.臨時物件,結束對該物件的使用時自動呼叫析構函式。

類 建構函式和析構函式

一.類 類定義的變數就是物件 1.建構函式 只有 建立物件的時候系統自動呼叫的函式 初始化物件 1 建構函式名與類名相同 2 建構函式沒有返回值 3 建構函式可以過載 注意 關於建構函式 1 如果建構函式被呼叫了,則一定有乙個新物件被建立了 2 如果有乙個新物件被建立,則一定有乙個建構函式被呼叫了 ...

類的構造和析構函式

建構函式語法 建構函式函式名和類名相同,沒有返回型別,連void都不可以,但可以有引數,可以過載 析構函式語法 析構函式函式名是在類名前面加 組成,沒有返回型別,連void都不可以,不能有引數,不能過載 class data 建構函式 有參的構造 data int n 析構函式 1 建構函式分類 按...

類的建構函式和析構函式

1.把物件的初始化工作放在建構函式中,把清除工作放在析構函式中。當物件被建立時,建構函式被自動執行。當物件消亡時,析構函式被自動執行。這下就不用擔心忘了物件的初始化和清除工作。2.建構函式 析構函式與類同名,由於析構函式的目的與建構函式的相反,就加字首 以示區別。3.建構函式與析構函式都沒有返回值型...