最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

C++中類模板的應用你了解多少

 更新時間:2022年02月21日 15:23:27   作者:是小明同學啊  
這篇文章主要為大家詳細介紹了C++中類模板的應用,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助

類模板應用

數(shù)組類的封裝

屬性:

1,T *pAddress 指向堆區(qū)數(shù)組的指針。
2,int m_Capacity 數(shù)組容量
3,int m_Size 數(shù)組大小

行為:

1,myArray(int capacity) 構(gòu)造函數(shù)
2,myArray(const MyArray&arr) 拷貝構(gòu)造函數(shù)
3,operator= 重載賦值操作符=
4,operator[] 重載中括號[]
5,~myArray()  析構(gòu)函數(shù)
6,getCapacity 獲取容量
7,getSize     獲取大小
8,pushback   尾插

將頭文件與實現(xiàn)文件寫到一起,后綴是.hpp

Int的.hpp文件

#pragma once
#define _CRT_SECURE_NO_WARNINGS 1
#include<iostream>
using namespace std;
#include<string>
template<class T>
class MyArray
{
public:
	MyArray() {};//默認構(gòu)造
	MyArray(int capacity)//有參構(gòu)造
	{
		this->m_Capacity = capacity;
		this->m_Size = 0;
		this->pAddress = new T[this->m_Capacity];
	}
	MyArray(const MyArray& arr)//拷貝構(gòu)造
	{
		this->m_Capacity = arr.m_Capacity;
		this->m_Size = arr.m_Size;
		this->pAddress = new T[this->m_Capacity];//這個不能直接拷貝,需要自己重新創(chuàng)建
		for (int i = 0; i < arr.m_Size; i++)//然后將數(shù)組的元素一個個的賦值過來
		{
			this->pAddress[i] = arr.pAddress[i];
		}
	}
	MyArray& operator=(const MyArray &arr)//重載賦值操作符=(返回自身的引用)
	{
		if (this->pAddress)//如果原先有數(shù)據(jù)了,那么就刪除
		{
			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];//這個不能直接拷貝,需要自己重新創(chuàng)建
		for (int i = 0; i < arr.m_Size; i++)//然后將數(shù)組的元素一個個的賦值過來
		{
			this->pAddress[i] = arr.pAddress[i];
		}
		return *this;
	}
	T& operator[](int dex)//重載[] 為了訪問數(shù)組中的值,
	{
		return this->pAddress[dex];
	}

	void pushBack(const T& val)//尾插
	{
		if (this->m_Capacity <= this->m_Size)//如果已經(jīng)超過范圍了
		{
			return;
		}
		this->pAddress[this->m_Size] = val;
		this->m_Size++;
	}
	int getCapacity()//獲取數(shù)組容量
	{
		return this->m_Capacity;
	}
	int getSize()//獲取數(shù)組大小
	{
		return this->m_Size;
	}
	~MyArray()//析構(gòu)
	{
		if (this->pAddress)
		{
			delete[] this->pAddress;
			this->pAddress = NULL;
		}
	}
private:	 
	T* pAddress;//指向堆區(qū)真實數(shù)組指針
	int m_Capacity;//數(shù)組容量
	int m_Size;
};

int的測試文件

#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;
}

輸出結(jié)果:

100
101
102
103
104
105
106
107
108
109

以上代碼證明寫的數(shù)組類的封裝對內(nèi)置數(shù)據(jù)類型是適用的,接下來試試自定義類型Person

ps:如果識別出來了是要開辟Person類的數(shù)組的空間,需要調(diào)用Person的默認構(gòu)造(有參構(gòu)造不行),所以必須在Person類中加一個默認構(gòu)造。

Person類的.hpp文件

#pragma once
#define _CRT_SECURE_NO_WARNINGS 1
#include<iostream>
using namespace std;
#include<string>

template<class T>
class MyArray
{
public:
	MyArray() {};//默認構(gòu)造
	MyArray(int capacity)//有參構(gòu)造
	{
		this->m_Capacity = capacity;
		this->m_Size = 0;
		this->pAddress = new T[this->m_Capacity];
	}
	MyArray(const MyArray& arr)//拷貝構(gòu)造
	{
		this->m_Capacity = arr.m_Capacity;
		this->m_Size = arr.m_Size;
		this->pAddress = new T[this->m_Capacity];//這個不能直接拷貝,需要自己重新創(chuàng)建
		for (int i = 0; i < arr.m_Size; i++)//然后將數(shù)組的元素一個個的賦值過來
		{
			this->pAddress[i] = arr.pAddress[i];
		}
	}
	MyArray& operator=(const MyArray &arr)//重載賦值操作(返回自身的引用)
	{
		if (this->pAddress)//如果原先有數(shù)據(jù)了,那么就刪除
		{
			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];//這個不能直接拷貝,需要自己重新創(chuàng)建
		for (int i = 0; i < arr.m_Size; i++)//然后將數(shù)組的元素一個個的賦值過來
		{
			this->pAddress[i] = arr.pAddress[i];
		}
		return *this;
	}
	T& operator[](int dex)//重載[] 為了訪問數(shù)組中的值,
	{
		return this->pAddress[dex];
	}

	void pushBack(const T& val)//尾插
	{
		if (this->m_Capacity <= this->m_Size)//如果已經(jīng)超過范圍了
		{
			return;
		}
		this->pAddress[this->m_Size] = val;
		this->m_Size++;
	}
	int getCapacity()//獲取數(shù)組容量
	{
		return this->m_Capacity;
	}
	int getSize()//獲取數(shù)組大小
	{
		return this->m_Size;
	}
	~MyArray()//析構(gòu)
	{
		if (this->pAddress)
		{
			delete[] this->pAddress;
			this->pAddress = NULL;
		}
	}
private:	 
	T* pAddress;//指向堆區(qū)真實數(shù)組指針
	int m_Capacity;//數(shù)組容量
	int m_Size;
};

Person類的測試文件

#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 << "數(shù)組容量:"<<myPersonArray.getCapacity()<< endl;//100
	cout << "數(shù)組大小:" << myPersonArray.getSize() << endl;//4
	return 0;
}

總結(jié)

本篇文章就到這里了,希望能夠給你帶來幫助,也希望您能夠多多關注腳本之家的更多內(nèi)容! 

相關文章

  • C++實現(xiàn)簡單遺傳算法

    C++實現(xiàn)簡單遺傳算法

    這篇文章主要介紹了C++實現(xiàn)簡單遺傳算法,以實例形式較為詳細的分析了遺傳算法的C++實現(xiàn)技巧,具有一定參考借鑒價值,需要的朋友可以參考下
    2015-05-05
  • C++深入探究類與對象之友元與運算符重載

    C++深入探究類與對象之友元與運算符重載

    友元就是讓一個函數(shù)或者類,訪問另一個類中的私有成員;打個比方,這相當于是說:朋友是值得信任的,所以可以對他們公開一些自己的隱私,運算符重載的實質(zhì)就是函數(shù)重載或函數(shù)多態(tài),運算符重載是一種形式的C++多態(tài),目的在于讓人能夠用同名的函數(shù)來完成不同的基本操作
    2022-04-04
  • 詳解C語言中const關鍵字的用法

    詳解C語言中const關鍵字的用法

    這篇文章主要對C語言中const關鍵字的用法進行了詳細的分析介紹,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2015-08-08
  • 簡單講解哈希表

    簡單講解哈希表

    本文主要介紹了哈希表簡單知識及C語言實現(xiàn)哈希表實例,文中利用圖片以及代碼簡單講解了相關知識,感興趣的小伙伴可以多多學習這篇文章
    2021-09-09
  • OpenCV圖像輪廓提取的實現(xiàn)

    OpenCV圖像輪廓提取的實現(xiàn)

    本文主要介紹了OpenCV圖像輪廓提取的實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2022-08-08
  • 基于C++編寫一個簡單的服務器

    基于C++編寫一個簡單的服務器

    這篇文章主要為大家詳細介紹了如何基于C++編寫一個簡單的服務器,文中的示例代碼講解詳細,具有一定的參考價值,感興趣的小伙伴可以了解一下
    2023-03-03
  • C++中的ilst使用以及模擬實現(xiàn)

    C++中的ilst使用以及模擬實現(xiàn)

    list是一個類模板,加<類型>實例化才是具體的類,可以在任意位置進行插入和刪除的序列式容器,本文將通過代碼示例給大家介紹一下C++中的ilst使用以及模擬實現(xiàn),需要的朋友可以參考下
    2023-08-08
  • C++使用jsoncpp解析json的方法示例

    C++使用jsoncpp解析json的方法示例

    這篇文章主要介紹了C++使用jsoncpp解析json的方法示例,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2020-03-03
  • C++深入講解類與封裝的概念與使用

    C++深入講解類與封裝的概念與使用

    我們都知道C++有三大特性:封裝、繼承、多態(tài),現(xiàn)在我們來總結(jié)一下封裝的相關知識與類的概念,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助
    2022-04-04
  • 構(gòu)建mfc窗體的簡單示例

    構(gòu)建mfc窗體的簡單示例

    這篇文章主要介紹了構(gòu)建mfc窗體的簡單示例,需要的朋友可以參考下
    2014-04-04

最新評論

凤冈县| 中超| 铁岭县| 武强县| 阳泉市| 隆回县| 绩溪县| 灌阳县| 军事| 长武县| 正阳县| 娱乐| 上虞市| 登封市| 油尖旺区| 彭泽县| 海宁市| 桂平市| 深泽县| 阿坝县| 大关县| 牡丹江市| 竹山县| 庆元县| 临朐县| 德保县| 贵溪市| 杭锦后旗| 会昌县| 尤溪县| 淮安市| 米易县| 泗水县| 漠河县| 万全县| 冕宁县| 清丰县| 清原| 安顺市| 诏安县| 长白|