C 建構函式舉例

2021-09-25 05:08:06 字數 2485 閱讀 6291

如何寫派生類的建構函式:

第一步:完整地寫出基類的建構函式,包括:

普通建構函式

預設建構函式(可不寫)

複製建構函式(可不寫)

第二步:寫出派生類的建構函式的原型宣告(類內),包括:

類名 (初始化基類1所需要的形參,初始化基類2所需要的形參,……,初始化本類所需要的形參);

第三步:寫出派生類的建構函式的實現(類外),包括:

類名 作用於限定符 建構函式名稱 (總的形參表):基類1(實參),基類2(實參){}

需要注意的事情:

1、基類的資料成員設定成什麼訪問型別都可以。

2、基類的建構函式必須寫全。

3、宣告當中只能寫出派生類所需要的總形參表。

4、類的實現原理是這樣的,它相當於(可以這樣理解,但不能這樣寫):

類名 作用於限定符 建構函式名稱 (總的形參表)

討論:

派生類建構函式的呼叫者傳給建構函式實參,與派生類建構函式的形參表發生形實結合,

在派生類建構函式裡面使用形參進行操作,派生類的構造函式呼叫基類1和基類2的建構函式,

相對於基類的建構函式,派生類裡面的「形參」是實參,即派生類將形參傳給基類做實參。

「:基類1(實參),基類2(實參)」是乙個簡便寫法,類似於:

「clock::clock(int newh, int newm, int news):hour(newh),minute(newm),second(news)」

其中hour,minute,second是clock類的基本資料成員,分別用newh,newm,news初始化。

然後我們發現這樣寫能夠保證基類的成員被初始化(如果你寫在建構函式裡面,編譯器不知道

你有沒有初始化基類成員,這樣寫以後基類建構函式被呼叫的位置就確定了,方便檢查),所以

我們就規定必須這樣寫了。

如何寫組合類建構函式

由此也可以推出類的組合構造形式。

組合類建構函式形式:

類名:類名(形參表):

物件1(引數),物件2(引數)……}

三件事情需要注意:

1、繼承中,總形參表後面接的是基類型別名,而在組合類當中總形參表後面接的是你所使用的類的物件名。

2、組合類寫非靜態資料成員時仍然可以像前面使用簡便寫法

3、當你想要處理劍士的成員有劍類時,而且初始化劍士的攻擊力需要使用到劍類的資料的問題時:

對於劍士來說,劍類是封閉的,你不能直接訪問劍類的攻擊力,解決辦法:

設定劍類攻擊力的公有介面或把劍類攻擊力設定為公有成員。

用例

下面使用乙個簡單的rpg遊戲作為例子,分為標頭檔案,寫類實現的檔案,和主函式所使用的檔案。

其中powersword類繼承了sword類,soilder將powersword作為資料成員。

包含類定義的標頭檔案

//rpg games.edition1.0,class: game.

#ifndef rpggame_h

#define rpggame_h

#include using namespace std;

class game ;

class sword ;

class powersword:public sword ;

class soilder ;

#endif

包含類實現的檔案

#include "rpggame.h"

#include using namespace std;

//send a welcome message to the client.

int game::display_1()

//send a ending message to the client.

int game::display_2()

//sword class including attack point, and its durability.

sword::sword(int newattack_point, int newdurability):

attack_point(newattack_point), durability(newdurability)

int sword::getattack_point()

int sword::display_3()

powersword::powersword(int newattack_point, int newdurability, string neweffect_description):

sword(newattack_point, newdurability),effect_description(neweffect_description)

int powersword::display_3()

C 中賦值函式和拷貝建構函式(舉例說明)

拷貝建構函式發生在物件還沒有建立,需要建立時如 myclass obj1 1 myclass obj3 obj1 賦值操作符過載僅發生在物件已經執行過建構函式,即已經建立的情況下 如 myclass obj1 1 myclass obj3 obj3 obj1 具體 如下 class myclass ...

C 建構函式 拷貝建構函式

建構函式 class base private int m var 建構函式無返回值型別,函式名和型別相同。拷貝建構函式傳遞引數為引用。1 class base2 7 拷貝建構函式 8 base base ref m var ref m var 9 11 private 12 intm var 13...

C 構造器(建構函式)

定義和作用 構造器是在構建類的 引用時 自動執行的方法。所以,每個類都必須至少要有乙個構造器。在訪問乙個類的時候,編譯器最先執行構造器中的 它與類同名,帶引數的構造器能夠獲取引數,但是與方法不同的是 構造器雖然也是一種 例項型別 即必須通過例項來進行呼叫,也可以稱之為引用型別 但是卻不能返回任何值 ...