c 如何封裝自己的陣列類模板

2021-09-28 22:15:16 字數 2325 閱讀 7417

在這個模板中,我們希望能夠建立容納任何型別元素的陣列,所以陣列元素的型別設定為型別引數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個測試用例 從第二行開始輸入每個測試用例的資料。首先輸入資料型別...