如何寫派生類的建構函式:
第一步:完整地寫出基類的建構函式,包括:
普通建構函式
預設建構函式(可不寫)
複製建構函式(可不寫)
第二步:寫出派生類的建構函式的原型宣告(類內),包括:
類名 (初始化基類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 構造器(建構函式)
定義和作用 構造器是在構建類的 引用時 自動執行的方法。所以,每個類都必須至少要有乙個構造器。在訪問乙個類的時候,編譯器最先執行構造器中的 它與類同名,帶引數的構造器能夠獲取引數,但是與方法不同的是 構造器雖然也是一種 例項型別 即必須通過例項來進行呼叫,也可以稱之為引用型別 但是卻不能返回任何值 ...