参数的缺省值

在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++缺省参数和函数重载相关推荐

  1. R语言使用psych包的fa函数对指定数据集进行因子分析(输入数据为相关性矩阵)、使用rotate参数指定进行斜交旋转提取因子、使用nfactors参数指定抽取的因子个数、fa函数因子分析结果解读

    R语言使用psych包的fa函数对指定数据集进行因子分析(输入数据为相关性矩阵).使用rotate参数指定进行斜交旋转提取因子.使用nfactors参数指定抽取的因子个数.fa函数因子分析结果解读(  ...

  2. c语言不定长参数函数,DEFUN 如何定义支持不定长参数的函数

    当前位置:我的异常网» C语言 » DEFUN 如何定义支持不定长参数的函数 DEFUN 如何定义支持不定长参数的函数 www.myexceptions.net  网友分享于:2015-07-15   ...

  3. R语言survival包的survfit函数拟合生存曲线数据、survminer包的ggsurvplot函数可视化生存曲线、size参数指定曲线粗细、palette参数自定义生存曲线的颜色

    R语言survival包的survfit函数拟合生存曲线数据.survminer包的ggsurvplot函数可视化生存曲线.size参数指定曲线粗细.palette参数自定义生存曲线的颜色 目录

  4. R语言使用matrix函数创建空矩阵、使用nrow参数和ncol参数指定矩阵的行列数

    R语言使用matrix函数创建空矩阵.使用nrow参数和ncol参数指定矩阵的行列数 目录 R语言使用matrix函数创建空矩阵.使用nrow参数和ncol参数指定矩阵的行列数 R语言是解决什么问题的 ...

  5. R语言ggplot2可视化散点图(scatter plot)、aes函数中的fill参数为连续变量、使用scale_fill_distiller函数自定义指定连续变量的颜色填充方案

    R语言ggplot2可视化散点图(scatter plot).aes函数中的fill参数为连续变量.使用scale_fill_distiller函数自定义指定连续变量的颜色填充方案 目录

  6. 【C语言】函数基本知识详细讲解(库函数、自定义函数、参数、函数的套用.....

    接着上次的数组的基本知识,让我们来简单了解C语言里的函数. 目录 函数的定义 库函数 自定义函数 函数的参数 函数的调用: 函数的嵌套调用和链式访问 函数的声明和定义 函数递归. 总结  函数的定义 ...

  7. 在c语言中怎么返回引用参数,C语言函数 函数的声明 C语言的头文件 #include的用法 形参和实参 函数的返回值 - 猫扑天空...

    C语言函数 一.是什么? 是指编程中对一块功能代码的封装,可以理解一个程序片段 二.有什么用? 可以封装代码,方便调用,提高复用性 三.怎么用? 定义:  返回值类型  函数名(形参类型 参数名1-. ...

  8. C语言基础入门48篇_20_函数入门:为什么使用函数?(函数使得程序模块化 使用函数封装细节,使得程序员只要面向函数的接口编程(参数与返回值),而不用关心函数内部细节)

    菜鸟和高手都会基本,那菜鸟为什么是菜鸟,高手为什么是高手呢?很大的区别在于,高手写的程序[结构性]更好,更容易维护.而函数就是C语言结构化的一种手段. 函数可以将大的计算任务划分为多个较小的任务(解耦 ...

  9. R语言使用rnorm函数基于不同的均值、方差参数生成正太分布的随机数、使用plot函数和density函数可视化正太分布的随机数对应的密度图、自定义设置均值和方差

    R语言使用rnorm函数基于不同的均值.方差参数生成正太分布的随机数.使用plot函数和density函数可视化正太分布的随机数对应的密度图.自定义设置均值和方差(Normal distributio ...

最新文章

  1. document.all与WEB标准
  2. 运维实战案例之文件已删除但空间不释放问题解析
  3. C++win32平台日志类
  4. jquery元素节点操作
  5. 2012二级java真题_2012年计算机二级JAVA模拟试题及答案详解汇总
  6. 如何在Ubuntu上安装MySQL
  7. c 函数 字符串 find_如何在C ++中使用字符串find()
  8. 引入Hub再生的最短帧长及主机之间距离的最大值计算
  9. scala---中的一些string方法
  10. 如何把握软件产品的质量
  11. oracle not in 改为 not exist
  12. PING用一生诠释了TCP/IP(4)------二三层转发为PING劈荆斩棘
  13. php 正则匹配座机号、手机号
  14. “爱心帮”APP走进厦门高校
  15. 中国航天日,让我们一起遨游浩瀚宇宙,拥抱星辰大海
  16. 投资绩效约束下的有限套利(Shleifer,Vishny)
  17. 开源众包积分新功能上线啦
  18. STC89C51森林防火系统设计
  19. android字库,android L 上切换字库方法
  20. 独立产品灵感周刊 DecoHack #027 - 今天的天气适合穿短裤

热门文章

  1. spring:Failed to convert property value of type ‘java.lang.String‘ to required type ‘java.util.Date‘
  2. linux宝塔杰奇安装,杰奇2.4安装教程+远程采集
  3. 列举三种强制类型转换
  4. 终极五笔 v6.02 正式版 下载
  5. 万粉博主为CSDN增加粉丝数据分析模块【硬核】
  6. 软件设计原则 — 开放封闭原则
  7. 【MySQL】错误代码1366,数据表编码问题的解决办法
  8. JDK1.8 or JDK8傻傻分不清楚
  9. sprite实现影子
  10. 阿里云视频直播 web前端[移动端] Aliplayer的简单案例