假如我們現在需要乙個student類,裡面儲存了學生的name和scores,一般提到name會想到用char陣列,提到scores會想到用double型陣列,但使用陣列就會帶來的乙個長度不確定的問題,要是宣告乙個很大的陣列,太浪費記憶體空間,要是在長度不夠用的時候再改變長度,則又太繁瑣。
這時候可以用c++自帶的模板類,用string型變數儲存name,用valarray儲存scores。
對於valarray,宣告語法如下:
valarray使用動態記憶體分配陣列空間,宣告初始化的陣列型別。valarrayv1; //乙個int型陣列,size為0
valarrayv2(8); //乙個double型陣列,size為8
valarrayv3(10,8); //乙個int型陣列,size為8,每個值都為10
double gpa[4]=;
valarrayv4(gpa,4); //乙個double型陣列,size為4,取gpa陣列的前四項給它賦值
宣告語法乍看之下很像直接宣告陣列的語法,但宣告陣列是v,這裡是v(),它本質上是類的建構函式。
valarray有size,sum,max,min等基本方法可以讓使用者了解陣列的基本情況。
class student;
has-a關係和is-a關係有很大的不同,has-a關係只獲得類成員的實現不繼承類成員的介面,要想對student裡的string物件name做出修改,需要呼叫string類的公有介面,例如name.size()呼叫name的size方法。
下面給出一段較完整的student類定義:
typedef valarrayvarraydb; //valarray可以像int,double一樣取別名
class student //student類要通過string和varraydb呼叫他們的方法
explicit student(int n):name("null student"),scores(n){} //用explicit關鍵字修飾只需乙個引數的建構函式,避免student stu=5這種隱式轉換
student(const string& s,int n):name(s),scores(n){}
~student(){}
};
c 模板類 包含模式定義
說明 本文譯自 c template the complete guide 一書的第6章中的部分內容。最近看到c 論壇上常有關於模板的包含模式的帖子,聯想到自己初學模板時,也為類似的問題困惑過,因此翻譯此文,希望對初學者有所幫助。鏈結錯誤 大多數c c 程式設計師向下面這樣組織他們的非模板 類和其他...
C 含有子物件的類 has a關係
可能會想到這樣的初始化方式 class a class b int main 輸出 a a a a b b a a a a 為了便於觀察,修改a的建構函式 a int a 0 a a 輸出 a a a 0 a a a 0 b b a a a 1 a a a 2由上面的輸出可見,子物件的初始化在b的建...
複習 類(包含)
01.02.程式的版權和版本宣告部分 05.檔名稱 test.cpp 06.作 者 劉芳 07.完成日期 201 3年12 月 13 日 08.版 本 號 v1.0 09.對任務及求解方法的描述部分 10.輸入描述 無 11.問題描述 12.程式輸出 輸出學生資訊 13.問題分析 略 14.演算法設...