<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
屬性:
1,T *pAddress 指向堆區陣列的指標。 2,int m_Capacity 陣列容量 3,int m_Size 陣列大小
行為:
1,myArray(int capacity) 建構函式 2,myArray(const MyArray&arr) 拷貝建構函式 3,operator= 過載賦值操作符= 4,operator[] 過載中括號[] 5,~myArray() 解構函式 6,getCapacity 獲取容量 7,getSize 獲取大小 8,pushback 尾插
將標頭檔案與實現檔案寫到一起,字尾是.hpp
#pragma once #define _CRT_SECURE_NO_WARNINGS 1 #include<iostream> using namespace std; #include<string> template<class T> class MyArray { public: MyArray() {};//預設構造 MyArray(int capacity)//有參構造 { this->m_Capacity = capacity; this->m_Size = 0; this->pAddress = new T[this->m_Capacity]; } MyArray(const MyArray& arr)//拷貝構造 { this->m_Capacity = arr.m_Capacity; this->m_Size = arr.m_Size; this->pAddress = new T[this->m_Capacity];//這個不能直接拷貝,需要自己重新建立 for (int i = 0; i < arr.m_Size; i++)//然後將陣列的元素一個個的賦值過來 { this->pAddress[i] = arr.pAddress[i]; } } MyArray& operator=(const MyArray &arr)//過載賦值操作符=(返回自身的參照) { if (this->pAddress)//如果原先有資料了,那麼就刪除 { delete[] this->pAddress; this->pAddress = NULL; } //然後進行深拷貝 this->m_Capacity = arr.m_Capacity; this->m_Size = arr.m_Size; this->pAddress = new T[this->m_Capacity];//這個不能直接拷貝,需要自己重新建立 for (int i = 0; i < arr.m_Size; i++)//然後將陣列的元素一個個的賦值過來 { this->pAddress[i] = arr.pAddress[i]; } return *this; } T& operator[](int dex)//過載[] 為了存取陣列中的值, { return this->pAddress[dex]; } void pushBack(const T& val)//尾插 { if (this->m_Capacity <= this->m_Size)//如果已經超過範圍了 { return; } this->pAddress[this->m_Size] = val; this->m_Size++; } int getCapacity()//獲取陣列容量 { return this->m_Capacity; } int getSize()//獲取陣列大小 { return this->m_Size; } ~MyArray()//解構 { if (this->pAddress) { delete[] this->pAddress; this->pAddress = NULL; } } private: T* pAddress;//指向堆區真實陣列指標 int m_Capacity;//陣列容量 int m_Size; };
#define _CRT_SECURE_NO_WARNINGS 1 #include<iostream> using namespace std; #include<string> #include"myArray.hpp" void myPrint(MyArray<int> &myIntArray) { for (int i = 0; i < myIntArray.getSize(); i++) { cout << myIntArray[i] << endl; } } int main() { MyArray<int> myIntArray(100); for (int i = 0; i < 10; i++) { myIntArray.pushBack(i + 100); } myPrint(myIntArray); return 0; }
輸出結果:
100
101
102
103
104
105
106
107
108
109
以上程式碼證明寫的陣列類的封裝對內建資料型別是適用的,接下來試試自定義型別Person
ps:如果識別出來了是要開闢Person類的陣列的空間,需要呼叫Person的預設構造(有參構造不行),所以必須在Person類中加一個預設構造。
#pragma once #define _CRT_SECURE_NO_WARNINGS 1 #include<iostream> using namespace std; #include<string> template<class T> class MyArray { public: MyArray() {};//預設構造 MyArray(int capacity)//有參構造 { this->m_Capacity = capacity; this->m_Size = 0; this->pAddress = new T[this->m_Capacity]; } MyArray(const MyArray& arr)//拷貝構造 { this->m_Capacity = arr.m_Capacity; this->m_Size = arr.m_Size; this->pAddress = new T[this->m_Capacity];//這個不能直接拷貝,需要自己重新建立 for (int i = 0; i < arr.m_Size; i++)//然後將陣列的元素一個個的賦值過來 { this->pAddress[i] = arr.pAddress[i]; } } MyArray& operator=(const MyArray &arr)//過載賦值操作(返回自身的參照) { if (this->pAddress)//如果原先有資料了,那麼就刪除 { delete[] this->pAddress; this->pAddress = NULL; } //然後進行深拷貝 this->m_Capacity = arr.m_Capacity; this->m_Size = arr.m_Size; this->pAddress = new T[this->m_Capacity];//這個不能直接拷貝,需要自己重新建立 for (int i = 0; i < arr.m_Size; i++)//然後將陣列的元素一個個的賦值過來 { this->pAddress[i] = arr.pAddress[i]; } return *this; } T& operator[](int dex)//過載[] 為了存取陣列中的值, { return this->pAddress[dex]; } void pushBack(const T& val)//尾插 { if (this->m_Capacity <= this->m_Size)//如果已經超過範圍了 { return; } this->pAddress[this->m_Size] = val; this->m_Size++; } int getCapacity()//獲取陣列容量 { return this->m_Capacity; } int getSize()//獲取陣列大小 { return this->m_Size; } ~MyArray()//解構 { if (this->pAddress) { delete[] this->pAddress; this->pAddress = NULL; } } private: T* pAddress;//指向堆區真實陣列指標 int m_Capacity;//陣列容量 int m_Size; };
#define _CRT_SECURE_NO_WARNINGS 1 #include<iostream> using namespace std; #include<string> #include"myArray.hpp" class Person { public: Person() {}; string m_name; int m_age; Person(string name, int age) { this->m_age = age; this->m_name = name; } }; void myPrintInt(MyArray<int> &myIntArray)//int的 { for (int i = 0; i < myIntArray.getSize(); i++) { cout << myIntArray[i] << endl; } } void myPrintPerson(MyArray<Person>& myPersonArray)//Person的 { for (int i = 0; i < myPersonArray.getSize(); i++) { cout << myPersonArray[i].m_name << " " << myPersonArray[i].m_age << endl; } } int main() { /*MyArray<int> myIntArray(100); for (int i = 0; i < 10; i++) { myIntArray.pushBack(i + 100); } myPrintInt(myIntArray);*/ MyArray<Person>myPersonArray(100); Person p1("小明", 18); Person p2("小宏", 18); Person p3("小量", 19); Person p4("小應", 18); myPersonArray.pushBack(p1); myPersonArray.pushBack(p2); myPersonArray.pushBack(p3); myPersonArray.pushBack(p4); myPrintPerson(myPersonArray); cout << "陣列容量:"<<myPersonArray.getCapacity()<< endl;//100 cout << "陣列大小:" << myPersonArray.getSize() << endl;//4 return 0; }
本篇文章就到這裡了,希望能夠給你帶來幫助,也希望您能夠多多關注it145.com的更多內容!
相關文章
<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
综合看Anker超能充系列的性价比很高,并且与不仅和iPhone12/苹果<em>Mac</em>Book很配,而且适合多设备充电需求的日常使用或差旅场景,不管是安卓还是Switch同样也能用得上它,希望这次分享能给准备购入充电器的小伙伴们有所
2021-06-01 09:31:42
除了L4WUDU与吴亦凡已经多次共事,成为了明面上的厂牌成员,吴亦凡还曾带领20XXCLUB全队参加2020年的一场音乐节,这也是20XXCLUB首次全员合照,王嗣尧Turbo、陈彦希Regi、<em>Mac</em> Ova Seas、林渝植等人全部出场。然而让
2021-06-01 09:31:34
目前应用IPFS的机构:1 谷歌<em>浏览器</em>支持IPFS分布式协议 2 万维网 (历史档案博物馆)数据库 3 火狐<em>浏览器</em>支持 IPFS分布式协议 4 EOS 等数字货币数据存储 5 美国国会图书馆,历史资料永久保存在 IPFS 6 加
2021-06-01 09:31:24
开拓者的车机是兼容苹果和<em>安卓</em>,虽然我不怎么用,但确实兼顾了我家人的很多需求:副驾的门板还配有解锁开关,有的时候老婆开车,下车的时候偶尔会忘记解锁,我在副驾驶可以自己开门:第二排设计很好,不仅配置了一个很大的
2021-06-01 09:30:48
不仅是<em>安卓</em>手机,苹果手机的降价力度也是前所未有了,iPhone12也“跳水价”了,发布价是6799元,如今已经跌至5308元,降价幅度超过1400元,最新定价确认了。iPhone12是苹果首款5G手机,同时也是全球首款5nm芯片的智能机,它
2021-06-01 09:30:45