C Primer Plus 筆記第十四章

2022-08-11 23:51:27 字數 2103 閱讀 8696

本章內容包括:

has-a關係

包含物件成員的類

模板類valarray

私有和保護繼承

多重繼承

虛基類

建立類模板

使用類模板

模板的具體化

c++ 的乙個主要目標是促進**重用,公有繼承是實現這種目標的機制之一,但並不是唯一的機制,本章介紹其他方法:

1. 使用類成員:本身是另乙個類的物件,這種方法稱為包含、組合或層次化;

2. 使用私有或保護繼承:私有繼承和保護繼承用於實現 has-a 關係,即新的繼承包含另乙個類的物件;

3. 多重繼承使用兩個或者更多的基類派生出新的類,將基類的功能組合在一起

類模板是另一種重用**的方法,類模板使我們能夠使用通用術語定義類,然後使用模板來建立針對特定型別定義的特殊類:

例如,可以定義乙個通用的棧模板,然後使用該模板建立乙個用於表示int值的棧的類和乙個用於表示double 值的類

14.1 包含物件的類

14.1.1 valarray 類簡介

valarray 類由標頭檔案valarray支援,用於處理數值(或具有類似特性的類);

valarray 類支援將陣列中所有元素的值相加以及在陣列中找到最大和最小的值等操作;

valarray 被定義為乙個模板類,以便能夠處理不同的資料型別:

valarrayq_values;  // an array of int

valarrayweights;  // an array of double

valarray 類的建構函式:

double gpa[5] = ;

valarrayv1;     // 建立長度為0的陣列 

valarrayv2(8);        // 建立長度為8的陣列,初始化為0

valarrayv3(10, 8);    // 建立長度為8的陣列,初始化為特定值10

valarrayv4(gpa, 4);   // 用陣列中的值進行初始化陣列

c++11,也使用初始化列表:    valarrayv5 = ;

valarray 類的一些方法:

operator () :訪問各個元素

size() :返回包含的元素數

sum(): 返回所有元素的總和

max(): 返回最大的元素

min() : 返回最小的元素

14.1.2 student 類的設計

通常,用於建立has-a關係的c++技術是組合(包含),即建立乙個包含其他類物件的類:

class student

private:

string name;        // use a string object for name 

valarrayscores;   // use a valarrayobject for scores

使用公有繼承時,類可以繼承介面,可能還有實現(基類的純虛函式提供介面,但不提供實現)。獲得介面是 is-a 關係的組成部分;

而使用組合,類可以獲得實現,但不能獲得介面。不繼承介面是has-a關係的組成部分;

c++包含讓程式設計師能夠限制程式結構的特性: 在編譯階段出現錯誤優於在執行階段出現錯誤

使用 explicit 防止但引數建構函式的隱式轉換;

使用 const 限制方法的修改;

被包含物件的介面不是公有的,但是可以在類方法中使用它:

scores是乙個 valarray 物件,所以它可以呼叫 valarray 類的成員函式

14.2 私有繼承

c++ 還有另一種實現 has-a 關係的途徑——私有繼承:

使用私有繼承,基類的公有成員和保護成員都將成為派生類的私有成員;

基類方法將不會成為派生物件公有介面的一部分,但可以在派生類的成員函式中使用它們

使用私有繼承,派生類不繼承基類的介面,正如被包含物件中看到的,這種不完全繼承是 has-a 關係的一部分;

C Primer Plus 第十三章筆記

1.使用公有派生,基類的公有成員將成為派生類的共有成員 基類的私有部分也將成為派生類的一部分,但只能通過基類的公有和保護方法訪問。2.派生類建構函式必須使用基類建構函式,意味著基類物件應當在程式進入派生類建構函式之前被建立。如果不呼叫基類建構函式,程式將使用預設的基類建構函式。3.可將派生類物件和位...

C Primer Plus 第十六章筆記

一 string類 1.建構函式 注 npos為字串的最大長度 nbts表示以空字元結尾的字串 2.輸入 3.使用字串 1 可以運用關係運算子比較字串。2 size 和length 成員函式返回字串的字元數。3 搜尋字串或字元 4 capacity 返回當前分配給字串的記憶體塊的大小 reverse...

C Primer Plus 第十二章筆記

1.呼叫複製建構函式 當函式按值傳遞物件或函式返回物件時,都將使用複製建構函式。2.如果類中包含了使用new初始化的指標成員,應當定義乙個複製建構函式,以複製指向的資料,而不是指標,稱為深度賦值。複製的另一種形式只是複製指標值,僅淺淺地複製指標資訊,稱為淺複製。3.將已有的物件賦給另乙個物件時,將使...