第60課 陣列類模板

2021-08-15 02:51:30 字數 3491 閱讀 9398

1.1、

模板引數可以是

數值型引數

非型別引數

template

void  func()

//    函式呼叫時:func();

1.2、數值型模板引數的限制

1.2.1、

變數

不能作為模板引數(使用模板時)

1.2.2、

浮點數

不能作為模板引數(定義模板和使用模板時)

1.2.3、

類物件

不能作為模板引數(使用模板時)

1.2.4、

上述的本質是模板引數是在編譯階段被處理的單元,因此在

編譯階段必須

準確無誤的

唯一確定

/**   面試題(用最高效的方法求1+2+3+........+n的值) 利用全域性常量的遞迴來實現 **/

#include //利用模板實現。

#include

using namespace std;

template //函式模板

void func() ;

for(int i = 0; i

for(int i = 0; i

}template //模板的好處,有效避免了冗餘性。

class sum ;

template<>      //次序不能搞錯了,特化的模板必須在一般模板後面,整個是編譯有效的

class sum<1>    //遞迴頭(終止條件)          

//這是特化的 ;

int main()

/**************          陣列模板類 棧      ************/

#ifndef _array_h_

#define _array_h_

//可復用的模板。自定義陣列型別和個數,具體功能是可以復用的。

template

class array ;

template < typename t, int n>

int array::length() const

template < typename t, int n>

bool array::set(int index, t value)

return ret; }

template < typename t, int n>

bool array::get(int index, t& value)//傳進來的是引用

return ret; }

template < typename t, int n>

t& array::operator (int index)

template < typename t, int n>

t array::operator (int index) const  //const修飾不能返回引用,唯讀變數屬性。::為什麼const函式不能返回引用呢?:可能是返回引用值會被改變,而const成員函式裡面是不允許改變成員變數的值的。

template < typename t, int n>

array::~array()            //宣告時有了virtual,定義時不要了。

#endif

#include

#include "array.h"

using namespace std;

int main()

for(int i=0; i

return 0; }

/******************      堆陣列類     ***************/

#ifndef _heaparray_h_

#define _heaparray_h_

#include

template < typename t>

class heaparray ;

template

heaparray::heaparray(int len)

template

heaparray::heaparray(const heaparray& obj) //拷貝建構函式,用於物件的初始化。

template

bool heaparray::construct()

template

heaparray* heaparray::newinstance(int len)//構造完成,並且獲得堆空間上指向物件的位址

return ret;   }

template //釋放

void heaparray::releaseinstance(const heaparray* pointer)

template

int heaparray::length() const

template

bool heaparray::get(int index, t& value)

return ret; }

template

bool heaparray::set(int index, t value)

return ret; }

template

t& heaparray::operator(int index)//過載陣列操作符,返回的是引用,可以作為左值使用。

template

t heaparray::operator(int index) const

template

heaparray& heaparray::self() const

template

heaparray& heaparray::self()//小技巧,用於返回物件的引用,比指標易於操作。

template

heaparray::~heaparray()        //當物件的生命週期結束後自動呼叫。

#endif

#include

#include "heaparray.h"

using namespace std;

int main()

for(int i=0; i

} heaparray::releaseinstance(pai);    //銷毀申請的類指標

return 0; }

4.1、

模板引數可以是

數值型引數

4.2、

數值型模板引數

必須在編譯期間唯一確定

4.3、

陣列類模板是基於數值型模板引數實現的

4.4、

陣列類模板是簡易的線性表資料結構

60 陣列類模板

模板引數可以是數值型引數 非型別引數 template void func t a n 使用模板引數定義區域性陣列 func 數值型模板引數的限制 變數不能作為模板引數,浮點數 計算機內部表示不精確 不能作為模板引數,類物件不能作為模板引數。本質 模板引數是在編譯階段被處理的單元,因此,在編譯階段必...

第62課 單例類模板

本文內容來自於對狄泰學院 唐佐林老師 c 深度解析 課程的學習總結 單例模式 要控制類的物件數目,必須對外隱藏建構函式 font 思路 將建構函式的訪問屬性設定為 private 定義 instance 並初始化為 null 當需要使用物件時,訪問 instance 的值 實驗 實現乙個單例模式類 ...

第60課 自定義模型類(下)

資料層 資料解析 資料表示層 解析後的資料,用類的物件表示 資料組織層 將解析後的資料傳給這個自定義模型 類物件 右鍵是刪除選中行 右鍵彈出式選單 介面主要是乙個視窗,qwidget完成,定義qwidget子類widget,子類裡面定義檢視 按鈕 選單三個成員 模型類物件scoreinfomodel...