C++ 函数重载、函数模板,类模板
时间:2019-11-23
本文章向大家介绍C++ 函数重载、函数模板,类模板,主要包括C++ 函数重载、函数模板,类模板使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
1.函数重载
相同作用域下,有多个函数名相同,但形参列表不同的函数,常用于处理功能相同但数据类型不同的问题
函数重载的规则:
函数名必须相同
函数形参列表必须不同(可以是参数个数不同,或者数据类型不同,或者参数排列顺序不同)
返回值可以相同也可以不同
注意:如果函数名相同,函数形参列表也相同,只有返回值不同,属于函数重定义
1 int GetMax(int a, int b) 2 { 3 return a>b ? a:b; 4 } 5 //函数名相同,形参数据类型和返回值不同 6 float GetMax(float a, float b) 7 { 8 return a>b ? a:b; 9 } 10 //函数名相同,形参数据类型和返回值不同 11 char GetMax(char a, char b) 12 { 13 return a>b ? a:b; 14 } 15 //函数名和返回值相同,形参数据类型相同,但个数不同 16 int GetMax(char a, char b, char c) 17 { 18 int nMax = a>b ? a:b; 19 return nMax>c ? nMax:c; 20 } 21 //Error:函数重定义,和int GetMax(int a, int b)相比只有返回值不同 22 /* 23 bool GetMax(int a, int b) 24 { 25 return a>b ? true:false; 26 } 27 */ 28 int _tmain(int argc, _TCHAR* argv[]) 29 { 30 int nMax = GetMax(1, 2); //int GetMax(int a, int b) nMax = 2 31 float fMax = GetMax(1.2f, 1.36f); //float GetMax(float a, float b) fMax = 1.36f 32 char cMax = GetMax('z', 'a');//char GetMax(char a, char b) cMax ='z' 33 int nMaxThree = GetMax(5, 4, 7);//int GetMax(char a, char b, char c) nMaxThree = 7 34 35 return 0; 36 }
2.函数模板
建立一个通用函数,其函数类型和形参类型用一个虚拟的类型来代表,在调用函数时系统会根据实参的类型来取代模板中的虚拟类型,这个通用函数就称为函数模板。
和上面的函数重载相比好处在于不必为每个不同的数据类型编写单独的函数,只需在模板中定义一次即可。
template<typename 类型参数1 , typename 类型参数2 , …>
前缀以关键字 template 开始,接下来是一组尖括号,里面包含一个或多个在模板中使用的通用数据类型, 多个通用类型之间加上逗号分隔
1 //函数模板 2 template<typename T> 3 T GetMax(T a, T b) 4 { 5 return a>b ? a:b; 6 } 7 8 int _tmain(int argc, _TCHAR* argv[]) 9 { 10 int nMax = GetMax(3,6); //nmax = 6 11 float fMax = GetMax(1.25f,1.2f); //fmax = 1.25 12 char cMax = GetMax('a','g'); //cMax = 'g' 13 14 return 0; 15 }
3.类模板
和函数模板相似,也是为了数据类型参数化,不同在于类模板在实例化时必须显式地指明数据类型,编译器不能根据给定的数据推演出数据类型。
如果在类外定义成员函数,必须重新再声明一次类模板
template<class 类型参数1 , class 类型参数2 , …>
前缀以关键字 template 开始,接下来是一组尖括号,里面包含一个或多个在模板中使用的通用数据类型, 多个通用类型之间加上逗号分隔
1 //类模板 2 template<class TT> 3 class CMax 4 { 5 public: 6 CMax(){} 7 CMax(TT a, TT b) : m_a(a), m_b(b){} 8 TT GetMax() 9 { 10 return m_a>m_b ? m_a:m_b; 11 } 12 void SetValue(TT a, TT b); 13 private: 14 TT m_a; 15 TT m_b; 16 }; 17 //注意:类外定义成员函数还需要声明一次类模板 18 template<class TT> 19 void CMax<TT>::SetValue(TT a, TT b) 20 { 21 m_a = a; 22 m_b = b; 23 } 24 25 int _tmain(int argc, _TCHAR* argv[]) 26 { 27 CMax<int> maxA(3,6); 28 int nMaxA = maxA.GetMax(); //nMaxA = 6 29 CMax<float> maxB(1.25f,1.2f); 30 float fMaxB = maxB.GetMax(); //fMaxB = 1.25 31 CMax<char> maxC('a','g'); 32 char cMaxB = maxC.GetMax(); //cMaxB = 'g' 33 CMax<int> maxD; 34 maxD.SetValue(10,5); 35 int nMaxdD = maxD.GetMax(); //nMaxD = 10 36 return 0; 37 }
原文地址:https://www.cnblogs.com/fzxiaoyi/p/11918818.html
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- CentOS7 nginx安装并负载mysql
- CentOS7 zabbix安装并实现其它服务器服务监控报警与自动恢复
- CentOS7 Zookeeper安装
- 【STM32F429开发板用户手册】第38章 STM32F429的FMC总线应用之是32路高速IO扩展
- 【STM32F429开发板用户手册】第39章 STM32F429的FMC总线应用之SDRAM
- react项目搭建
- 深入理解Java泛型(三)-泛型擦除及其相关内容
- webpack实战——预处理器(loader)【下篇】
- JAVA位运算等运算符总结
- 算法实现,用机器学习模拟一个opencv的边缘识别算法
- 开源公共组件仓库的更新日志应该如何写
- 判断ABAP代码是否处于update模式下运行的工具类
- SAP CRM WebClient UI异常的持久化机制
- 在ABAP Webdynpro里显示PDF的一种办法
- ABAP Webdynpro Interface View的用法