包含表示has a模式,類

2021-08-07 08:48:19 字數 1172 閱讀 6961

假如我們現在需要乙個student類,裡面儲存了學生的name和scores,一般提到name會想到用char陣列,提到scores會想到用double型陣列,但使用陣列就會帶來的乙個長度不確定的問題,要是宣告乙個很大的陣列,太浪費記憶體空間,要是在長度不夠用的時候再改變長度,則又太繁瑣。

這時候可以用c++自帶的模板類,用string型變數儲存name,用valarray儲存scores。

對於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陣列的前四項給它賦值

valarray使用動態記憶體分配陣列空間,宣告初始化的陣列型別。

宣告語法乍看之下很像直接宣告陣列的語法,但宣告陣列是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.演算法設...