C++泛型编程:模板(2)---具体化模板、类模板

模板的局限性:

  • 模板的通用性不是万能的;
    在这里插入图片描述
    (数组无法直接进行赋值操作;)
    在这里插入图片描述
    C++为了解决这种问题,提供模板的重载,可以为这些特定的类型提供具体化的模板;
class Person {
   
public:
	Person(string name,int age) {
   
		this->m_name = name;
		this->m_age = age;
	}
	string m_name;
	int m_age;
};
//普通函数模板
template<typename T>
bool compare(T& a,T& b) {
   
	if (a == b) {
   
		return true;
	}else {
   
		return false;
	}
}
//利用具体化Person的版本实现代码,具体化优先调用
//具体化,显示具体化的原型需要以template<>开头,并通过名称指出类型;
//具体化优先于常规模板
template<> bool compare(Person& p1, Person& p2) {
   
	if (p1.m_age==p2.m_age&&p1.m_name==p2.m_name) {
   
		return true;
	}
	else {
   
		return false;
	}
}
int main() {
   
	int a = 10, b = 10;
	//内置数据类型可以直接使用通用的函数模板
	if (compare(a, b)) {
   
		cout << "a与b相等!" << endl;
	}
	else {
   
		cout << "a与b不相等!" << endl;
	}
	Person p1("张三", 18);
	Person p2("李四", 18);
	//自定义数据类型,不会调用普通的函数模板
	//可以创建具体化的Person数据类型的模板,用于特殊处理这个类型;
	if (compare(p1, p2)) {
   
		cout << "p1与p2相等!" << endl;
	}else {
   
		cout << "p1与p2不相等!" << endl;
	}

	system("pause");
	return 0;
}

代码过程中的注意事项:
注意:因为模板一般为T类型,不够具体,而如果是用形参为T a 则需要复制一份一样的数据;
所以要解决这种不够具体的情况,一般是使用引用类型;T& a;直接使用原数据;

总结

  • 利用具体化的模板,可以解决自定义类型的通用化;
  • 学习模板并不是为了写模板,而是在STL能够运用系统提供的模板;

类模板

类模板语法:

  • 类模板作用:建立一个通用类,类中的成员数据类型可以不具体制定,用一个虚拟的类型来代表;
    在这里插入图片描述
    解释:
    template ——声明创建模板;
    typename ——表明其后面的符号是一种数据类型,可以用class代替;
    T —— 通用的数据类型,名称可以替换,通常为大写字母;
//类模板
template<typename nameType,typename ageType>
class Person {
   
public:
	Person(nameType name, ageType age) {
   
		this-><
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值