真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

StaticList和DynamicList(七)

????????我們?cè)谏瞎?jié)博客中說到,在 SeqList 下又可以衍生出 StaticList 和 DynamicList兩個(gè)子類。那么我們今天就來看看這兩個(gè)子類,它們是如何實(shí)現(xiàn)的以及它們之間有何區(qū)別。

創(chuàng)新互聯(lián)業(yè)務(wù)包括:成品網(wǎng)站、企業(yè)產(chǎn)品展示型網(wǎng)站建設(shè)、高端網(wǎng)站設(shè)計(jì)、電子商務(wù)型網(wǎng)站建設(shè)、成都外貿(mào)網(wǎng)站建設(shè)公司(多語言)、商城建設(shè)、按需策劃、成都全網(wǎng)營銷推廣等。效率優(yōu)先,品質(zhì)保證,用心服務(wù)是我們的核心價(jià)值觀,我們將繼續(xù)以良好的信譽(yù)為基礎(chǔ),秉承穩(wěn)固與發(fā)展、求實(shí)與創(chuàng)新的精神,為客戶提供更全面、更優(yōu)質(zhì)的互聯(lián)網(wǎng)服務(wù)!

????????A、StaticList的設(shè)計(jì)要點(diǎn):首先必須是一個(gè)類模板。其次是使用原生數(shù)組作為順序存儲(chǔ)空間,最后是使用模板參數(shù)決定數(shù)組大小。定義如下

template?
class?StaticList?:?public?SeqList
{
protected:
????T?m_space[N];????????????//?順序存儲(chǔ)空間,N?為模板參數(shù)
public:
????StaticList();????????????//?指定父類成員的具體值
????int?capacity()?const;
};

????????我們下來來實(shí)現(xiàn) StaticList ,代碼如下

StaticList.h 源碼

#ifndef?STATICLIST_H
#define?STATICLIST_H

#include?"Seqlist.h"

namespace?DTLib
{

template?
class?StaticList?:?public?SeqList
{
protected:
????T?m_space[N];???//?順序存儲(chǔ)空間,N?為模板參數(shù)
public:
????StaticList()????//?指定父類成員的具體值
????{
????????this->m_array?=?m_space;

????????this->m_length?=?0;
????}

????int?capacity()?const
????{
????????return?N;
????}
};

}

#endif?//?STATICLIST_H

????????我們來寫個(gè)測試代碼測試下這個(gè) StaticList ,main.cpp 代碼如下

#include?
#include?"StaticList.h"

using?namespace?std;
using?namespace?DTLib;

int?main()
{
????StaticList?l;

????for(int?i=0;?i

????????我們來看看輸出結(jié)果

StaticList 和 DynamicList(七)

????????結(jié)果正是我們想要的,這個(gè) StaticList 類已經(jīng)實(shí)現(xiàn)完畢。接下來我們?cè)賮韺?shí)現(xiàn) DynamicList 類。

????????B、DynamicList類的設(shè)計(jì)要點(diǎn):它也必須得是一個(gè)類模板。申請(qǐng)連續(xù)堆空間作為順序存儲(chǔ)空間;動(dòng)態(tài)設(shè)置順序存儲(chǔ)空間的大小;保證重置順序存儲(chǔ)空間時(shí)的異常安全性。

????????????a> 函數(shù)異常安全的概念:1、不泄露任何資源;2、不允許破壞數(shù)據(jù)。

????????????b> 函數(shù)異常安全的基本保證,如果對(duì)象被拋出:對(duì)象內(nèi)的任何成員仍然能保持有效狀態(tài);沒有數(shù)據(jù)的破壞及資源泄漏。

????????下來我們來看看它的定義

template?
class?DynamicList?:?public?SeqList
{
protected:
????int?m_capacity;????//?順序存儲(chǔ)空間的大小
public:
????DynamicList(int?capacity);????//?申請(qǐng)空間
????int?capacity()?const;
????
????//?重新設(shè)置順序存儲(chǔ)空間的大小
????void?resize(int?capacity);
????~DynamicList();????//?歸還空間
};

????????下來我們來實(shí)現(xiàn)這個(gè) DynamicList 類

DynamicList.h 源碼

#ifndef?DYNAMICLIST_H
#define?DYNAMICLIST_H

#include?"SeqList.h"
#include?"Exception.h"

namespace?DTLib
{

template?
class?DynamicList?:?public?SeqList
{
protected:
????int?m_capacity;?????//?順序存儲(chǔ)空間的大小
public:
????DynamicList(int?capacity)???//?申請(qǐng)空間
????{
????????this->m_array?=?new?T[capacity];

????????if(?this->m_array?!=?NULL?)
????????{
????????????this->m_length?=?0;
????????????this->m_capacity?=?capacity;
????????}
????????else
????????{
????????????THROW_EXCEPTION(NoEnoughMemoryException,?"No?memory?to?create?DynamicList?...");
????????}
????}

????int?capacity()?const
????{
????????return?m_capacity;
????}

????void?resize(int?capacity)
????{
????????if(?this->m_capacity?!=?capacity?)
????????{
????????????T*?array?=?new?T[capacity];

????????????if(?array?!=?NULL?)
????????????{
????????????????int?length?=?(this->m_length?m_length?:?capacity;

????????????????for(int?i=0;?im_array[i];
????????????????}

????????????????T*?temp?=?this->m_array;

????????????????this->m_array?=?array;
????????????????this->m_length?=?length;
????????????????this->m_capacity?=?capacity;

????????????????delete[]?temp;
????????????}
????????????else
????????????{
????????????????THROW_EXCEPTION(NoEnoughMemoryException,?"No?memory?to?resize?DynamicList?Object?...");
????????????}
????????}
????}

????~DynamicList()
????{
????????delete[]?this->m_array;
????}

};

}

#endif?//?DYNAMICLIST_H

????????我們同樣還是寫個(gè)示例代碼來驗(yàn)證下這個(gè) DynamicList 類,main.cpp 代碼如下

#include?
#include?"DynamicList.h"

using?namespace?std;
using?namespace?DTLib;

int?main()
{
????DynamicList?l(5);

????for(int?i=0;?i

????????我們來看看編譯結(jié)果

StaticList 和 DynamicList(七)

????????結(jié)果已經(jīng)正確輸出了。那么回到我們之前的問題:是否能將 DynamicList 作為 StaticList 的子類實(shí)現(xiàn)呢?答案肯定是不行的,因?yàn)?DynamicList 和 StaticList 兩個(gè)類在存儲(chǔ)結(jié)構(gòu)上完全是不同的。因此他們是等價(jià)的,所以不能將 DynamicList 作為 StaticList 的子類實(shí)現(xiàn)。通過今天對(duì) DynamicList 和StaticList 的學(xué)習(xí),總結(jié)如下:1、StaticList 通過模板參數(shù)定義順序存儲(chǔ)空間;2、DynamicList 通過動(dòng)態(tài)內(nèi)存申請(qǐng)定義順序存儲(chǔ)空間;3、DynamicList 支持動(dòng)態(tài)重置順序存儲(chǔ)空間的大?。?、DynamicList 中的 resize() 函數(shù)實(shí)現(xiàn)需要保證異常安全。


文章題目:StaticList和DynamicList(七)
網(wǎng)頁URL:http://weahome.cn/article/jjdgep.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部