本節書摘來自異步社群出版社《c++多線程程式設計實戰》一書中的第1章,第1.6節,作者: 【黑山共和國】milos ljumovic(米洛斯 留莫維奇),更多章節内容可以通路雲栖社群“異步社群”公衆号檢視。
繼承是oop中非常重要的特性。繼承至少關系到兩個類(或更多類):如果b類是某一種a類,那麼b類的對象就擁有與a類對象相同的屬性。除此之外,b類也可以實作新的方法和屬性,以代替a類相應的方法和屬性。
準備就緒
确定安裝并運作了visual studio。
操作步驟
現在,執行以下步驟來修改前面的示例。
1.建立一個預設控制台應用程式,命名為<code>inheritancetest</code>。
2.打開<code>inheritancetest.cpp</code>檔案,輸入下面的代碼:
cworker( int iage, char sname, char semploymentstatus )
: cperson( iage, sname )
{
strcpy_s( this->semploymentstatus, 32, semploymentstatus );
}<code>`</code>
注意看<code>cworker</code>構造函數的原型,其形參清單後面有一個:(冒号),後面調用的是基類的構造函數,如下代碼所示。在建立<code>cperson</code>時,需要兩個參數<code>iage</code>和<code>sname</code>:
<code>cperson(iage, sname)</code>
調用析構函數的順序要反過來,即先調用派生類的析構函數,後調用基類的析構函數。
一圖勝千言,<code>cperson</code>、<code>cworker</code>和<code>cstuden</code>t類對象分别如圖1.2所示。

圖1.2 cperson、cworker和cstudent類對象
可以針對使用者自定義的類型來定義運算符的含義,如前面例子中的<code>ccomplex</code>。這樣做非常好,當<code>c</code>、<code>c1</code>和<code>c2</code>是複數時,<code>c = c1 + c2比c = complexadd(c1, c2)</code>更直覺更容易了解。
要讓編譯器能處理使用者自定義的類型,就必須實作運算符函數或重載相應的函數。假設,有兩個矩陣<code>m1</code>、<code>m2</code>和一個矩陣表達式<code>m = m1 + m2</code>。編譯器知道如何處理基本類型(如,把兩個整數相加),但如果事先沒有定義<code>cmatrix operator+(const cmatrix& m1, const cmtrix& m2)</code>函數,編譯器就不知道如何計算矩陣加法。
覆寫(override)方法也是一種特性,允許派生類在基類已經實作某方法的前提下提供自己的特定實作。如前面例子中的<code>whoami</code>方法所示,其輸出如下: