【C++ 语言】面向对象 ( 模板编程 | 函数模板 | 类模板 )

举报
韩曙亮 发表于 2022/01/10 23:57:11 2022/01/10
【摘要】 文章目录 函数模板类模板代码示例 函数模板 1. 模板编程 : 类似于 Java 中的泛型编程 ; ① 函数模板 : 对应着 Java 中的泛型方法 ;...



函数模板



1. 模板编程 : 类似于 Java 中的泛型编程 ;

  • ① 函数模板 : 对应着 Java 中的泛型方法 ;
  • ② 类模板 : 对应 Java 中的泛型类 ;

2. Java 中的泛型方法 :

void <T> fun( T t ){
}

  
 
  • 1
  • 2

3. C++ 中的模板方法 :

//函数模板 , 对应 Java 泛型方法
//	其中 typename 也可以写成 class
template <typename T>
T add(T a, T b) {
	return a + b;
}

  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

4. 函数模板作用 : 避免反复定义重载函数 , 例如两个数字相加时 , 需要考虑 int 类型数字相加 , float 类型数字相加 等 , 这些函数的内部行为都是一致的 , 如果使用了模板函数 , 就可以只写一个模板方法即可 ;

5. 对应的函数重载 : 上述函数模板与下面的函数重载实现的功能部分一致 ;

int add(int a, int b) {
	return a + b;
}
float add(float a, float b) {
	return a + b;
}
double add(double a, double b) {
	return a + b;
}

  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9

模板函数功能要比重载多很多 , 上面有很多类型没有列出 ;

6. 代码示例 :

  • ① 模板函数定义 :
//函数模板 , 对应 Java 泛型方法
//	其中 typename 也可以写成 class
template <typename T>
T add(T a, T b) {
	return a + b;
}

  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • ② 模板函数调用代码示例 :
	//调用模板函数 , 传入两个 int 类型参数
	int number_int = add(8, 8);
	cout << " 函数模板 两个 int 类型相加 : " << number_int << endl;

	//调用模板函数 , 传入两个 float 类型参数
	float number_float = add(0.8f, 0.8f);
	cout << " 函数模板 两个 float 类型相加 : " << number_float << endl;

  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

③ 执行结果 :

 函数模板 两个 int 类型相加 : 16
 函数模板 两个 float 类型相加 : 1.6

  
 
  • 1
  • 2


类模板



1. 类模板示例 :

//类模板
template <class T , class E>
class Template {
public:
	T add(T t, E e) {
		return t + e;
	}
};

  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

2. 类模板调用 :

	//2. 类模板

	Template <float, int> templ;
	float result = templ.add(0.8f, 88);
	cout << "输出模板类计算结果 : " << result << endl;

  
 
  • 1
  • 2
  • 3
  • 4
  • 5

3. 执行结果 :

输出模板类计算结果 : 88.8

  
 
  • 1

C++ 中创建了大量的模板类 , 如 queue , vector , list 等容器 , 都是模板类 ;



代码示例



1. 函数模板与类模板定义 :

//函数模板 , 对应 Java 泛型方法
//	其中 typename 也可以写成 class
template <typename T>
T add(T a, T b) {
	return a + b;
}

//类模板
template <class T , class E>
class Template {
public:
	T add(T t, E e) {
		return t + e;
	}
};

  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15

2. 模板编程调用 :

	//V. 模板编程

	//1. 函数模板 

	//调用模板函数 , 传入两个 int 类型参数
	int number_int = add(8, 8);
	cout << " 函数模板 两个 int 类型相加 : " << number_int << endl;

	//调用模板函数 , 传入两个 float 类型参数
	float number_float = add(0.8f, 0.8f);
	cout << " 函数模板 两个 float 类型相加 : " << number_float << endl;

	//2. 类模板

	Template <float, int> templ;
	float result = templ.add(0.8f, 88);
	cout << "输出模板类计算结果 : " << result << endl;

  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17

3. 执行结果 :

 函数模板 两个 int 类型相加 : 16
 函数模板 两个 float 类型相加 : 1.6
输出模板类计算结果 : 88.8

  
 
  • 1
  • 2
  • 3

文章来源: hanshuliang.blog.csdn.net,作者:韩曙亮,版权归原作者所有,如需转载,请联系作者。

原文链接:hanshuliang.blog.csdn.net/article/details/99695866

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。