C++学习(十八)—模板(二)

模板机制
  • 编译器并不是把函数模板处理成能够处理任何类型的函数
  • 函数模板通过具体类型产生不同的函数(产生了模板函数)
  • 编译器会对函数模板进行两次编译,在声明的地方对模板代码本身进行编译,在调用的地方对参数替换后的代码进行编译。
模板的局限性

模板并不是真正的通用的代码,对于一些自定义数据类型,模板有时候不能实现效果
可以通过具体化实现对自定义数据类型进行操作。

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



class  Person
{
public:
	Person(string name, int age)
	{
		this->m_Name = name;
		this->m_Age = age;
	}
	string m_Name;
	int m_Age;
protected:
private:
};


//	通过模板进行两个数的比较
template<class T>
bool myCompare(T &a, T&b)
{
	if (a == b)
	{
		return true;
	}
	return false;
}

//  利用具体化Person函数,告诉编译器走 Person对比代码
template<>bool myCompare<Person>(Person &a, Person &b)
{
	if (a.m_Name == b.m_Name&&a.m_Age == b.m_Age)
	{
		return true;
	}
	return false;
}


void test01()
{
	Person p1("Tom", 19);
	Person p2("Jerry", 20);

	bool ret = myCompare(p1, p2);
	if (ret)
	{
		cout << "a和b相等" << endl;
	}
	else
	{
		cout << "a和b不相等" << endl;
	}
}






int main()
{
	test01();
	system("pause");
	return 0;
}
类模板基本语法

template 下面紧跟着的是个类,那么这个类称为类模板
类模板和函数模板的区别:

  • 类模板使用时候不可以自动类型推导,必须显示指定类型
  • 类模板中的类型,可以有默认参数
    泛型编程主要体现在模板技术,特点是将类型参数化
#include<iostream>

using namespace std;

//  template  下面紧跟着的内容是类,那么这个类称为类模板
//  类模板中的类型,也可以有默认参数

//  泛型编程  类型参数化
template<class NAMETYPE,class AGETYPE>
class Person
{
public:
	Person(NAMETYPE name, AGETYPE age)
	{
		this->m_Age = age;
		this->m_Name = name;
	}

	NAMETYPE m_Name;
	AGETYPE  m_Age;
};


void test01()
{
	//	Person p1("Tom", 11);  //  对于类模板,使用时候不能自动类型推导

	Person<string, int>p1("Ton", 20);  //  类模板必须使用显示数据类型


}



int main()
{
	system("pause");
	return 0;
}



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

walkerrev_ll

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值