前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >【C++ 语言】面向对象 ( 模板编程 | 函数模板 | 类模板 )

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

作者头像
韩曙亮
发布2023-03-27 16:53:33
1.5K0
发布2023-03-27 16:53:33
举报
文章被收录于专栏:韩曙亮的移动开发专栏

文章目录

函数模板

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

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

2. Java 中的泛型方法 :

代码语言:javascript
复制
void <T> fun( T t ){
}

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

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

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

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

代码语言:javascript
复制
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;
}

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

6. 代码示例 :

  • ① 模板函数定义 :
代码语言:javascript
复制
//函数模板 , 对应 Java 泛型方法
//	其中 typename 也可以写成 class
template <typename T>
T add(T a, T b) {
	return a + b;
}
  • ② 模板函数调用代码示例 :
代码语言:javascript
复制
	//调用模板函数 , 传入两个 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;

③ 执行结果 :

代码语言:javascript
复制
 函数模板 两个 int 类型相加 : 16
 函数模板 两个 float 类型相加 : 1.6
类模板

1. 类模板示例 :

代码语言:javascript
复制
//类模板
template <class T , class E>
class Template {
public:
	T add(T t, E e) {
		return t + e;
	}
};

2. 类模板调用 :

代码语言:javascript
复制
	//2. 类模板

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

3. 执行结果 :

代码语言:javascript
复制
输出模板类计算结果 : 88.8

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

代码示例

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

代码语言:javascript
复制
//函数模板 , 对应 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;
	}
};

2. 模板编程调用 :

代码语言:javascript
复制
	//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;

3. 执行结果 :

代码语言:javascript
复制
 函数模板 两个 int 类型相加 : 16
 函数模板 两个 float 类型相加 : 1.6
输出模板类计算结果 : 88.8
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2019-08-17,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 文章目录
    • 函数模板
      • 类模板
        • 代码示例
        相关产品与服务
        容器服务
        腾讯云容器服务(Tencent Kubernetes Engine, TKE)基于原生 kubernetes 提供以容器为核心的、高度可扩展的高性能容器管理服务,覆盖 Serverless、边缘计算、分布式云等多种业务部署场景,业内首创单个集群兼容多种计算节点的容器资源管理模式。同时产品作为云原生 Finops 领先布道者,主导开源项目Crane,全面助力客户实现资源优化、成本控制。
        领券
        问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档