陣列類封裝案例C 模板

2021-10-18 20:08:38 字數 2551 閱讀 1165

陣列類封裝案例:

實現乙個通用的陣列類,要求如下:

·可以對內建資料型別以及自定義型別的資料進行儲存

·將陣列中的資料儲存到堆區

·建構函式中可以傳入陣列的容量

·提供對應的拷貝建構函式以及operater=防止淺拷貝問題

·提供尾插法和尾刪法對陣列中的資料進行增加和刪除

·可以通過下標的方式訪問陣列中的元素

·可以獲取陣列中當前元素個數和陣列的容量

#include

using

namespace std;

#include

template

<

class

t>

class

myarray

//拷貝建構函式

myarray

(const myarray& arr)

}//operator= 防止淺拷貝問題 a = b =c

myarray &

operator=(

const myarray & arr)

//深拷貝

this

-> m_capacity = arr.m_capacity;

this

-> m_size = arr.m_size;

this

-> paddress =

new t[arr.m_capacity]

;for

(int i =

0; i <

this

-> m_size; i ++

)return

*this;}

void

push_back

(const t & val)

this

-> paddress[

this

-> m_size]

= val;

//在陣列末尾插入資料

this

-> m_size ++

;//更新陣列大小

}void

pop_back()

this

-> m_size --;}

//通過下標方式訪問陣列中的元素 arr[0] = 10;&返回引用可以作為左值存在

t &operator

(int index)

//返回陣列容量

intgetcapacity()

//返回陣列大小

intgetsize()

//析構函式

~myarray()

}private

: t * paddress;

//指標指向堆區開闢的真實陣列

int m_capacity;

//陣列容量

int m_size;

// }

;//################以下為測試**#############

class

person

;person

(string name,

int age)

string m_name;

int m_age;};

void

printintarray

(myarray<

int>

& arr)

}void

printpersonarray

(myarray

& arr)

}void

test2()

void

test()

cout <<

"arr1的列印輸出"

<< endl;

printintarray

(arr1)

; cout <<

"arr1的rongliang : "

<< arr1.

getcapacity()

<< endl;

cout <<

"arr1的rongliangde daxiao : "

<< arr1.

getsize()

<< endl;

myarray<

int>

arr2

(arr1)

; arr2.

pop_back()

; cout <<

"arr2尾刪後的列印輸出"

<< endl;

cout <<

"arr2的rongliang : "

<< arr2.

getcapacity()

<< endl;

cout <<

"arr2的rongliangde daxiao : "

<< arr2.

getsize()

<< endl;

//myarrayarr3(100);

//arr3 = arr1;

}int

main()

黑馬程式設計師c++課程案例練習

c 模板學習12之通用陣列類模板案例封裝

arr.hpp pragma once include using namespace std 通用的陣列模板類 template class t class myarray 深拷貝構造,防止淺拷貝 myarray const myarray a 賦值運算子過載,防止淺拷貝 a b c鏈式程式設計 ...

類模板案例 C

本案例要求 可以對自定義或內建資料型別進行操作 陣列中的資料儲存到堆區 按客戶要求的容量進行陣列的建立 防止淺拷貝以及過載 利用尾插法和尾刪法進行增加和刪除 可以通過下標訪問陣列元素,可以獲取當前陣列中的容量及元素個數資訊。由於類模板的成員函式再呼叫的時候才建立,不好分檔案編寫,所以新建標頭檔案用....

案例 陣列模板類

傳智掃地僧課程學習筆記。這裡的學習,是為了學習後面的資料結構,因為後面的資料結構的演算法的實現,是以模板的方式實現的,myvector.h include iostream using namespace std template class myvector protected t m space...