抽象基類運用與抽象基類指標作為模板容器元素

2021-07-11 10:42:52 字數 1256 閱讀 5155

//#include "stdafx.h"

#include using namespace std;

class a

;class b : public a

};int _tmain(int argc, _tchar* argv)

//#include "stdafx.h"

// 模板容器

template class vector

;// 抽象基類

class a

;// 派生類

class b : public a

};int _tmain(int argc, _tchar* argv)

// remark i:變數都要初始化,指標尤其需要初始化,模板容器中的抽象基類指標也不例外:

vectorvec(1);

vec[0] = null;

// remark ii:因此,比如,對於乙個帶頭結點的指標鍊錶,要記得對其頭結點進行初始化置為空。

linklist()// 建構函式

// remark iii:但是,如果這個指標鍊錶是乙個以指標為元素的模板鍊錶,那麼初始化置空頭結點的操作就不應該在模板鍊錶的建構函式中進行,

linklist()// 建構函式

因為這樣會一起置空其他的以具有自己建構函式的類為元素的類鍊錶的頭結點。例如乙個初始時具有1個元素('\0')的字串類:

string()// 建構函式

以這種模板鍊錶為模板,定義以字串類為元素的字串鍊錶,那麼煉表頭結點其成員m_len,m_p都將被值為0。

// remark iv:正確的寫法是,模板鍊錶初始化時,對頭結點多型地賦值乙個模板型別的資料:

linklist()// 建構函式

其中,模板型別的賦值操作其實在node類的合成拷貝建構函式中已經隱含了。所以有一種更簡潔的方法,就是省去模板型別顯式賦值,使用new操作符,隱式地而且多型地呼叫模板型別的建構函式,對頭結點進行初始化:

linklist()// (推薦)建構函式

此時如果定義乙個字串鍊錶,頭結點也能夠具有1個元素('\0')。

// remark v:但是,仍然需要注意,如果模板鍊錶的模板型別是指標,因為指標本身是不會自動初始化的,所以需要記得在定義以指標為元素的模板鍊錶時,對其頭結點手動初始化,或者對模板鍊錶繼承後定義繼承類建構函式對指標初始化。

linklistlinklist;

linklist.m_head->data = null;// 取頭結點指標賦值為空

C 抽象基類與虛基類(C primer)

c primer plus p508,抽象基類 c primer plus p556,虛基類 抽象基類是解決如下問題 加入現在需要開發乙個圖形類,表示圓與橢圓 注意,圓是一種特殊的橢圓 所以初步考慮從橢圓類中派生出圓類。但是現在遇到乙個問題,圓與橢圓的面積計算公式不同,所以需要建立乙個abc,抽象出...

ACM 抽象基類

檔名稱 完成日期 2014年6月3日 版本號 v0.1 對任務及求解方法的描述部分 輸入描述 無 問題描述 程式輸入 程式輸出 問題分析 演算法設計 我的程式 include include using namespace std class shape class circle public sh...

C 抽象基類

為什麼c 要定義抽象基類?c 為什麼要定義抽象基類?抽象類就是類裡定義了純虛成員函式的類。純虛函式只提供了介面,並沒有具體實現。抽象類不能被例項化,通常是作為基類供子類繼承,子類中重寫虛函式,實現具體的介面。為什麼要定義抽象基類呢?依我所見主要有以下原因 1.最重要的原因是,可以將介面與實現分離。介...