在這個模板中,我們希望能夠建立容納任何型別元素的陣列,所以陣列元素的型別設定為型別引數template < class t>。由於陣列的空間是動態分配的,所以我們在private中定義乙個指向t型別的指標,用於存放動態分配的空間首位址。
為什麼有的函式返回引用?
如果乙個函式的返回值是乙個物件的值,就是右值,不能成為左值。如果返回值為引用。由於引用是物件的別名,通過引用可以改變物件的值,因此是左值。程式中我們通過返回值引用來保證函式返回左值。
為什麼要定義複製建構函式?
我們通過已有陣列來初始化新陣列,需要進行深層複製。按照size的大小去動態分配n個t型別的元素空間,將首位址賦給list。最後從物件x複製陣列元素到本物件。當存在複製建構函式進行深層複製時,往往也需要過載「=」運算子進行深層複製(預設賦值是淺層複製)。
過載下標運算子
過載下標運算子實現與普通陣列一樣通過下標訪問元素。將list[n]返回,我們希望返回值是左值,也就是說這個值不僅可以讀取還可以改變,為了達到這個要求,返回乙個引用。
#ifndef array_h
#define array_h
#include
template
<
class
t>
//陣列類模板定義
class
array
;template
<
class
t> array
::array
(int sz)
template
<
class
t> array::~
array()
template
<
class
t>
array
::array
(const array
&a)template
<
class
t>
array
&array
::operator=(
const array
& rhs)
//從物件x複製陣列元素到本物件
for(
int i =
0; i < size; i++
) list[i]
= rhs.list[i];}
return
*this
;//返回當前物件的引用
}//過載下標運算子,實現與普通陣列一樣通過下標訪問元素,具有越界檢查功能
template
<
class
t>
t &array
::operator
(int n)
template
<
class
t>
const t &array
::operator
(int n)
const
//取當前陣列的大小
template
<
class
t>
int array
::getsize()
const
// 將陣列大小修改為sz
template
<
class
t>
void array
::resize
(int sz)
#endif
//array_h
陣列類應用舉例
用我們自己定義的array陣列類模板來求範圍2~n中的質數,n在程式執行時由鍵盤輸入。
設定n為鍵盤輸入的數,count來統計質數的數量。演算法思想如果該書能被小於該數的質數整除則說明它不是質數。我們把符合要求的數(質數)放入定義好的a陣列裡,當a的size不夠時,可以resize成count的2倍。
#include
#include
#include
"array.h"
using
namespace std;
intmain()
if(isprime)
}for
(int i =
0; i < count; i++
) cout <<
setw(8
)<< a[i]
; cout << endl;
return0;
}```
陣列類封裝案例C 模板
陣列類封裝案例 實現乙個通用的陣列類,要求如下 可以對內建資料型別以及自定義型別的資料進行儲存 將陣列中的資料儲存到堆區 建構函式中可以傳入陣列的容量 提供對應的拷貝建構函式以及operater 防止淺拷貝問題 提供尾插法和尾刪法對陣列中的資料進行增加和刪除 可以通過下標的方式訪問陣列中的元素 可以...
c 模板學習12之通用陣列類模板案例封裝
arr.hpp pragma once include using namespace std 通用的陣列模板類 template class t class myarray 深拷貝構造,防止淺拷貝 myarray const myarray a 賦值運算子過載,防止淺拷貝 a b c鏈式程式設計 ...
C 有界陣列模板類(類模板)
題目描述編寫有界陣列模板boundarray 即檢查對陣列元素下標引用並在下標越界時終止程式的執行 能夠儲存各種型別的資料。要求實現對陣列進行排序的方法sort,及對排序後的陣列進行查詢的方法search。輸入 第一行先輸入t,表示有t個測試用例 從第二行開始輸入每個測試用例的資料。首先輸入資料型別...