陣列類封裝案例:
實現乙個通用的陣列類,要求如下:
·可以對內建資料型別以及自定義型別的資料進行儲存
·將陣列中的資料儲存到堆區
·建構函式中可以傳入陣列的容量
·提供對應的拷貝建構函式以及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...