c语言函数参数缺省,C++缺省参数和函数重载
参数的缺省值
在C++中参数可以设置缺省值,设置了缺省值之后,这个参数在调用时可以省略。
注意:设置缺省值的参数只能是最后的几个参数。也就是说某一个参数一旦设置了缺省值,其后而的参数也必须设置缺省值。例如:f()函数有3个参数,如果只设置第2个有缺省值,这就错了。因为调用时只输入2个参数时,系统不知道究竟是第2个参数还是第3个参数。
参数缺省值举例:
#include
using namespace std;
int sum(int x=0, int y=100, int z=0) { return x+y+z; }
//int sum(int x, int y=100, int z=0) { ... } //这是正确的
//int sum(int x, int y, int z=0) { ... } //这也是正确的
//int plus(int x, int y=100, int z) { ... } //这是错误的
int main ( )
{
cout << sum() << endl;
cout << sum(6) << endl;
cout << sum(6, 10) << endl;
cout << sum(6, 10, 20) << endl;
return 0;
}
运行结果:
100
106
16
36
函数的重载
函数的重载在C++中具有重要作用,重载(overload)不要和后面要学的覆盖(override)混淆起来。重载是指相同的函数名,但参数的类型或个数中只要有所不同,便进行再定义,编译之后重载的函数都具有不同的地址,也就是说虽然函数名相同,实际上是不同的函数,在调用时,编译系统会根据不同之处自动区别是调用哪一个函数。对于普通函数和后面要学的类的成员函数都适用。
覆盖只对类的构造函数或成员函数适用,是子类继承父类是才使用的非常有用的功能。重载可以针对运算符,而覆盖不行。上一节中缺省值的设置,实际上在编译时等价于重载,被生成了4个不同的函数。
早期的C++版本,在定义重载函数时要加上关键字overload,现在不用了。在使用重载函数时,如果有类型的自动转换时要特别注意,初学者往往出错在这儿。
函数重载举例:
#include
using namespace std;
float fun(float x);
double fun(double x);
int main ( )
{
float f = 132.64;
double d = 132.64;
cout << fun(f) << endl;
cout << fun(d) << endl;
//cout << fun(5) << endl; //编译错,参数5可以转换为float,也可转换为double
return 0;
}
float fun(float x)
{
return x / 2.0 ;
}
double fun(double x)
{
return x / 3.0;
}
运行结果:
66.32
44.2133
设计时的重载错误
上面的例子中,设计时并没有问题,调用时类型自动转换时发生了二义性。下面列举的重载函数是设计时就出了问题,两个函数本身就具有重复的意义。
#include
using namespace std;
int fun(int a, int b);
int fun(int a, int &b);
int main ( )
{
int x=1, y=2;
cout << fun(x, y) << endl; //这句编译时出错
return 0;
}
int fun(int a, int b);
{
return a + b;
}
int fun(int a, int& b);
{
return a - b;
}
上面例子用到了int&,这叫“引用”,关于什么是“引用”参见下一章。
重载函数的地址
这里使用函数指针来取得函数的地址,有关函数指针已经在C语言教程中介绍,请参考C语言函数指针。
#include
using namespace std;
void space(int count);
void space(int count, char ch);
int main ( )
{
//有一个整型参数的函数指针
void (*fp1)(int);
//有一个整型参数、一个字符型参数的函数指针
void (*fp2)(int, char);
fp1 = space; //取space(int)函数的地址
fp2 = space; //取space(int, char)函数的地址
fp1(20); //输出20个空格
cout << "|" << endl;
fp2(20, '='); //输出20个等号
cout << "|" << endl;
return 0;
}
//输出count个空格字符
void space(int count)
{
for ( ; count; count--) cout << ' ';
}
//输出count个ch字符
void space(int count, char ch)
{
for ( ; count; count--) cout << ch;
}
输出结果:
c语言函数参数缺省,C++缺省参数和函数重载相关推荐
- R语言使用psych包的fa函数对指定数据集进行因子分析(输入数据为相关性矩阵)、使用rotate参数指定进行斜交旋转提取因子、使用nfactors参数指定抽取的因子个数、fa函数因子分析结果解读
R语言使用psych包的fa函数对指定数据集进行因子分析(输入数据为相关性矩阵).使用rotate参数指定进行斜交旋转提取因子.使用nfactors参数指定抽取的因子个数.fa函数因子分析结果解读( ...
- c语言不定长参数函数,DEFUN 如何定义支持不定长参数的函数
当前位置:我的异常网» C语言 » DEFUN 如何定义支持不定长参数的函数 DEFUN 如何定义支持不定长参数的函数 www.myexceptions.net 网友分享于:2015-07-15 ...
- R语言survival包的survfit函数拟合生存曲线数据、survminer包的ggsurvplot函数可视化生存曲线、size参数指定曲线粗细、palette参数自定义生存曲线的颜色
R语言survival包的survfit函数拟合生存曲线数据.survminer包的ggsurvplot函数可视化生存曲线.size参数指定曲线粗细.palette参数自定义生存曲线的颜色 目录
- R语言使用matrix函数创建空矩阵、使用nrow参数和ncol参数指定矩阵的行列数
R语言使用matrix函数创建空矩阵.使用nrow参数和ncol参数指定矩阵的行列数 目录 R语言使用matrix函数创建空矩阵.使用nrow参数和ncol参数指定矩阵的行列数 R语言是解决什么问题的 ...
- R语言ggplot2可视化散点图(scatter plot)、aes函数中的fill参数为连续变量、使用scale_fill_distiller函数自定义指定连续变量的颜色填充方案
R语言ggplot2可视化散点图(scatter plot).aes函数中的fill参数为连续变量.使用scale_fill_distiller函数自定义指定连续变量的颜色填充方案 目录
- 【C语言】函数基本知识详细讲解(库函数、自定义函数、参数、函数的套用.....
接着上次的数组的基本知识,让我们来简单了解C语言里的函数. 目录 函数的定义 库函数 自定义函数 函数的参数 函数的调用: 函数的嵌套调用和链式访问 函数的声明和定义 函数递归. 总结 函数的定义 ...
- 在c语言中怎么返回引用参数,C语言函数 函数的声明 C语言的头文件 #include的用法 形参和实参 函数的返回值 - 猫扑天空...
C语言函数 一.是什么? 是指编程中对一块功能代码的封装,可以理解一个程序片段 二.有什么用? 可以封装代码,方便调用,提高复用性 三.怎么用? 定义: 返回值类型 函数名(形参类型 参数名1-. ...
- C语言基础入门48篇_20_函数入门:为什么使用函数?(函数使得程序模块化 使用函数封装细节,使得程序员只要面向函数的接口编程(参数与返回值),而不用关心函数内部细节)
菜鸟和高手都会基本,那菜鸟为什么是菜鸟,高手为什么是高手呢?很大的区别在于,高手写的程序[结构性]更好,更容易维护.而函数就是C语言结构化的一种手段. 函数可以将大的计算任务划分为多个较小的任务(解耦 ...
- R语言使用rnorm函数基于不同的均值、方差参数生成正太分布的随机数、使用plot函数和density函数可视化正太分布的随机数对应的密度图、自定义设置均值和方差
R语言使用rnorm函数基于不同的均值.方差参数生成正太分布的随机数.使用plot函数和density函数可视化正太分布的随机数对应的密度图.自定义设置均值和方差(Normal distributio ...
最新文章
- document.all与WEB标准
- 运维实战案例之文件已删除但空间不释放问题解析
- C++win32平台日志类
- jquery元素节点操作
- 2012二级java真题_2012年计算机二级JAVA模拟试题及答案详解汇总
- 如何在Ubuntu上安装MySQL
- c 函数 字符串 find_如何在C ++中使用字符串find()
- 引入Hub再生的最短帧长及主机之间距离的最大值计算
- scala---中的一些string方法
- 如何把握软件产品的质量
- oracle not in 改为 not exist
- PING用一生诠释了TCP/IP(4)------二三层转发为PING劈荆斩棘
- php 正则匹配座机号、手机号
- “爱心帮”APP走进厦门高校
- 中国航天日,让我们一起遨游浩瀚宇宙,拥抱星辰大海
- 投资绩效约束下的有限套利(Shleifer,Vishny)
- 开源众包积分新功能上线啦
- STC89C51森林防火系统设计
- android字库,android L 上切换字库方法
- 独立产品灵感周刊 DecoHack #027 - 今天的天气适合穿短裤
热门文章
- spring:Failed to convert property value of type ‘java.lang.String‘ to required type ‘java.util.Date‘
- linux宝塔杰奇安装,杰奇2.4安装教程+远程采集
- 列举三种强制类型转换
- 终极五笔 v6.02 正式版 下载
- 万粉博主为CSDN增加粉丝数据分析模块【硬核】
- 软件设计原则 — 开放封闭原则
- 【MySQL】错误代码1366,数据表编码问题的解决办法
- JDK1.8 or JDK8傻傻分不清楚
- sprite实现影子
- 阿里云视频直播 web前端[移动端] Aliplayer的简单案例