C++函数的重载
时间:2019-09-16
本文章向大家介绍C++函数的重载,主要包括C++函数的重载使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
C++函数的重载
课题目的
学生通过本课了解函数重载的优点,掌握并熟用函数重载。
课题引入
由例题引入函数重载
1)函数重载的数据类型
例题
编写函数求不同的数据类型(int型,float型,double型)的绝对值
以前解法为依次将int型,float型,double型的对应函数打出
int abs1(int x) { if (x<0) x=-x ; return x ;} float abs2(float x) { if (x<0) x=-x ; return x ;} double abs3(double x) { if (x<0) x=-x ; return x ;} int main() { cout<<abs1(-1)<<abs2(-1.0f)<<abs3(-1.0); return 0; }
观察以上三条函数,发现除了数据类型之外,完全完全相同,然而需要三个函数来实现其功能。
讨论:这样做有些什么缺点
答:编写起来麻烦,更何况功能接近,受数据类型的干扰,太多的函数名麻烦 >>>>>可读性太低
如果使用函数重载的话,例题应这样书写:
int abs(int x) { if (x<0) x=-x ; return x ;} float abs(float x) { if (x<0) x=-x ; return x ;} double abs(double x) { if (x<0) x=-x ; return x ;} int main() { cout<<abs(-1)<<abs(-1.0f)<<abs(-1.0); return 0; }
如上可见,这样做减少了函数名的数量,避免了名字空间的污染,对于程序的可读性有很大的好处。
2)函数重载的元素个数
阅读以下代码,谈谈函数重载的特别处:
void f() { cout<<"1"<<endl; } void f(int x) { cout<<"2"<<endl; } void f(int x,int y) { cout<<"3"<<endl; } int main() { f(); f(1); f(3,4);return 0; }
如上可见,可以实现重载函数多个参数数目种类的使用,这样使函数功能更能满足多个元素。
综上所述 :
函数重载的特点
1)函数的参数个数不同。
2)函数的参数类型不同或者参数类型顺序不同。
函数重载的优点
1)函数重载方便在后期动态调用。便于扩充方法内容,可以少写重复代码。
2)函数重载也让函数多态,让函数可以对于多种多个参数的相似功能的实现。
函数重载的使用
函数重载时需要对函数的各种情况以同样的函数名进行声明。
如下列代码
#include<iostream> using namespace std; int add();//分别对函数进行声明 int add(int a); int add(double a); double add(int a,double b); int main() { add(); add(5); add(2.0); add(1,2.0); return 0; } int add() { return 1+2; } int add(int a) { return a+2; } int add(double a) { return a+2; } double add(int a,double b) { return a+b; }
课题实验
编写一函数,能求两个或三个整数或实数的最大值。
解题思路:将两个整数,三个整数,两个实数,三个实数的四种可能的函数通过函数重载以max函数来寻找其最大值,而解决三个参数的最大值获取时可以利用已写出的两个参数求最大值函数
1 #include<iostream> 2 using namespace std; 3 int max(int i, int j);//重载函数 4 int max(int i, int j, int k);//不同参数数目 5 double max(double i, double j);//不同参数类型 6 double max(double i, double j, double k); 7 int max(int i, int j) 8 { 9 return i > j ? i : j; //如果i大于j 返回i,否则返回j; 10 } 11 12 int max(int i, int j, int k) 13 { 14 return max( max(i, j), k); //线比较i和j,最后比较k 15 } 16 17 double max(double i, double j) 18 { 19 return i > j ? i : j; //如果i大于j 返回i,否则返回j; 20 } 21 22 double max(double i, double j, double k) 23 { 24 return max( max(i, j), k); //线比较i和j,最后比较k 25 } 26 27 int main() 28 { 29 cout<<max(1,5) <<" "<<max(1.5,0.9)<<" "<<max(5,3,7)<<" " 30 <<max(5.1,3.1,7.5)<<endl; 31 return 0; 32 }
原文地址:https://www.cnblogs.com/LGboy/p/11530701.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 数组属性和方法
- Linux中出现“No space left on device”错误的排查与解决方法
- 浏览器是如何调度进程和线程的?
- Linux shell利用sed如何批量更改文件名详解
- linux下通过xinetd服务管理 rsync 实现开机自启动
- linux实现自动删除最旧的几个文件详解
- 基于Ubuntu 16.04设置固定IP的方法教程
- CentOS添加和删除用户以及用户组的方法
- Linux下使用inode删除指定文件方法示例
- Apache虚拟目录配置及vue-cli反向代理的设置方法
- linux socket通讯获取本地的源端口号的实现方法
- 初识centos7与centos6的区别整理(内核、命令等)
- Apache下通过shell脚本提交网站404死链的方法
- centos查找已安装的jdk路径的方法
- CentOS7+apache+php7+mysql5.7配置教程详解
- 如何利用SystemTap统计函数执行耗时详解