C++ 模板与泛型编程学习笔记01





一、什么是泛型编程(通用类型编程)

泛型编程实际上就是超越特定类型的编程方式,但我们需要提供每个程序实例的类型或值,让编译器在运行中能够识别。

c++泛型编程的例子,比如:vecter、迭代器等。

二、什么是模板?

模板就是程序编码的样版,超越数据类型来描述数据处理的方法。

三、模板分类:

模板分为:函数模板、类(结构体)模板

        1、函数模板示例代码

(1)实现内容:

写一个Display函数,显示任意一个数组内容。

(2)实现代码:

#include <iostream>
#include <string>
using namespace std;

template <typename T> 
void Display(const T array[], int size);

int main()
{
	string strArray[5] = {"C++", "Is", "My", "Good", "Friend"};
	char cArray[3] = {'a','b','c'};
	int iArray[4] = {12, 34, 45,90};

	cout<<"打印字符串类型的数组:"<<endl;
	Display(strArray,5);
	cout<<"打印字符类型的数组:"<<endl;
	Display(cArray, 3);
	cout<<"打印整型类型的数组:"<<endl;
	Display(iArray, 4);
	return 0;
}


template <typename T> 
void Display(const T array[], int size)
{
	for (int i = 0; i < size; i++)
	{
		cout<<array[i]<<endl;
	}
	return ;
}
(3)代码运行结果:

        1、类模板示例代码

(1)实现内容:

重写一个栈类及一些接口函数。

(2)实现代码:


#include <iostream>
#include <string>
using namespace std;

template <typename T>//《狭义的理解,template是一个函数,typename是形态类型,T为形式参数》
class Stack
{
	T stck[5];
	int StckSize;
public:
	Stack():StckSize()
	{
		//将StckSize初始化为零
		;
	}
	void PushBack(const T &x)
	{
		stck[StckSize++] = x;
	}
	T& Top()
	{
		return stck[StckSize-1];//返回数组
	}
	void Pop()
	{
		--StckSize;
	}
	bool Empty() const
	{
		return StckSize == 0;
	}
	int size() const
	{
		return StckSize;
	}

};

int main()
{
	/**********************************************************************
	 *(1) Stack是类模板,不是类;
	 *(2)int、const char* 是类模板的形参;
	 *(3)类模板必须先实例化成类,方可基于类来创建类的实例《栈》。
	 **********************************************************************/
	
	Stack<int> iStack;
	iStack.PushBack(1);
	iStack.PushBack(2);
	iStack.PushBack(3);
	iStack.PushBack(4);

	Stack<const char*> cStack;
	cStack.PushBack("Hello ");
	cStack.PushBack("World");
	
	while (!iStack.Empty())
	{
		//栈->先进先出
		cout<<iStack.Top()<<" ";iStack.Pop();
	}
	cout<<endl;

	while (!cStack.Empty())
	{
		//栈->先进先出
		cout<<cStack.Top()<<" ";cStack.Pop();
	}
	cout<<endl;
	return 0;
}

(3)代码运行结果:





评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值