从c到c++——02:缺省参数

       在声明或定义函数时,可以选择给参数一个具体的值(常数或者宏定义),之后调用函数时就可以选择不传该参数。


      某些函数中有这样一种形参,当函数多次被调用时他们往往都被赋予一个相同值,我们把这个反复出现的称为默认实参;在声明该函数时,可以选择直接对默认实参对应的形参赋值,之后再选择调用该函数时,就可以不传这个参数。

实现

如果不给参数的话就是默认实参,给参数的话按参数跑程序。

多个缺省参数

        当一个函数有多个缺省参数时,必须满足:

  1. 有默认实参的必须在没有的右侧
  2. 当函数声明与定义不在一个文件时,只能在声明处添加默认实参。
  3. 调用函数时参数将从左至右依次传递,不能跳过某个位置

声明与定义函数时:

void fun1(int a=10, int b =10, int c)
{;//错误,默认实参必须放在右侧,c必须放在a,b的左边
}
void fun2(int a, int b = 10, int c = 10)
{;//正确
}

调用函数时:

void fun(int a, int b = 10, int c = 10)
{;
}int main()
{//错误,因为原函数有一个参数需要传递fun();//正确, 形参a被赋值为10fun(10);//正确, 形参a被赋值为10,b被赋值为20 fun(10, 20);//错误,不可跳过b直接给c赋值fun(10, , 30);return 0;
}

多文件操作

//text.h
void fun(int a, int b, int c);//main.cpp
#include"text.h"
int main()
{fun(1,1,1);return 0;
}
//text.cpp
#include"text.h"
void fun(int a = 10, int b = 10, int c = 10)
{;
}
//错误,当函数声明与实现不在同一文件时,只能在声明处使用默认参数
//text.h
void fun(int a=10, int b=10, int c=10);//main.cpp
#include"text.h"
int main()
{fun(1,1,1);return 0;
}
//text.cpp
#include"text.h"
void fun(int a , int b , int c )
{;
}
//正确

多文件操作的原理

同c语言一样,一个cpp程序从源码到一个可执行的二进制文件需要经历预处理,编译,汇编,链接四个阶段.

  1. 预处理:执行宏定义操作,展开头文件,删除注释等
  2. 编译   :把每个c++语言程序文件翻译为汇编语言文件,后缀为i
  3. 汇编   :把每个汇编文件转成二进制文件,后缀为s
  4. 链接   :把所有的二进制文件合并成一个可执行文件,后缀为o
//text.h
void fun(int a, int b, int c);//main.cpp
#include"text.h"
int main()
{fun(1,1,1);return 0;
}
//text.cpp
#include"text.h"
void fun(int a = 10, int b = 10, int c = 10)
{;
}
//错误,当函数声明与实现不在同一文件时,只能在声明处使用默认参数

以这份代码为例

执行到链接过程时,

main.o文件中会有一份void fun(int a, int b, int c);

text.o文件中会有一份void fun(int a = 10, int b = 10, int c = 10);

执行链接过程时:

由于此时两个文件中有一份函数名,参数类型,返回值类型一模一样的函数,将这两个文件合并时就会发生重定义的错误.



本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/433479.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【Linux】Linux 环境下如何查找哪个线程使用 CPU 最长

​ 🍎个人博客:个人主页 🏆个人专栏:Linux ⛳️ 功不唐捐,玉汝于成 目录 前言 正文 1、top 命令 2、ps 命令 3、perf 工具 4、htop 工具 5、pidstat 命令 结语 我的其他博客 ​ 前言 在现代计算机系统中&am…

华清远见作业第三十二天——C++(第一天)

思维导图&#xff1a; 提示并输入一个字符串&#xff0c;统计字符中大写、小写个数、空格个数以及其他字符个数要求使用C风格完成。 代码&#xff1a; #include <iostream> #include<array> using namespace std;int main() {string str;cout << "请输…

计算机网络——TCP协议

&#x1f4a1;TCP的可靠不在于它是否可以把数据100%传输过去&#xff0c;而是 1.发送方发去数据后&#xff0c;可以知道接收方是否收到数据&#xff1b;2.如果接收方没收到&#xff0c;可以有补救手段&#xff1b; 图1.TCP组成图 TCP的可靠性是付出代价的&#xff0c;即传输效率…

【华为 ICT HCIA eNSP 习题汇总】——题目集10

1、以下哪个动态路由协议不能应用在 IPv6 网络中&#xff1f; A、IS-IS B、RIPng C、BGP4 D、OSPFv3 考点&#xff1a;路由技术原理 解析&#xff1a;&#xff08;A&#xff09; IS-ISv6 是在 IPv6 环境下&#xff0c;IS-IS 协议进行了相应的扩展和改进&#xff0c;以适应 IPv6…

【蓝桥杯冲冲冲】[NOIP2000 提高组] 方格取数

蓝桥杯备赛 | 洛谷做题打卡day19 文章目录 蓝桥杯备赛 | 洛谷做题打卡day19[NOIP2000 提高组] 方格取数题目背景题目描述输入格式输出格式样例 #1样例输入 #1样例输出 #1 提示题解代码我的一些话 [NOIP2000 提高组] 方格取数 题目背景 NOIP 2000 提高组 T4 题目描述 设有 N N…

九、Kotlin 注解

1. 什么是注解 注解是对程序的附件信息说明。 注解可以作用在类、函数、函数参数、属性等上面。 注解的信息可用于源码级、编译期、运行时。 2. 注解类的定义 使用元注解 Retention 声明注解类的作用时期。 使用元注解 Target 声明注解类的作用对象。 定义注解类时可以声…

阅读go语言工具源码系列之gopacket(谷歌出品)----第二集 layers-巧妙的抽象与无聊的协议包

上一集中我们讲到了wpcap.dll的go封装方法&#xff0c;对于linux系统下libpcap的go封装采用的是常用的cgo方式&#xff0c;想了解的可以看看pcap文件夹中的pcap_unix.go。 我们得到了wpcap.dll的go调用&#xff0c;就可以利用它来进行列举所有网络设备&#xff0c;例如以下代码…

Golang中make与new有何区别

&#x1f4d5;作者简介&#xff1a; 过去日记&#xff0c;致力于Java、GoLang,Rust等多种编程语言&#xff0c;热爱技术&#xff0c;喜欢游戏的博主。 &#x1f4d7;本文收录于go进阶系列&#xff0c;大家有兴趣的可以看一看 &#x1f4d8;相关专栏Rust初阶教程、go语言基础系…

手把手教学:AD09制作BOM及小技巧

BOM&#xff08;Bill of Material&#xff09;物料清单&#xff0c;是以数据格式来描述产品结构的文件&#xff0c;即生产一件产品所需的子零件及其产品中零件数量的完全组合。这里生成BOM表用作对你制作的pcb板进行成本预估和制作生产资料文件。同时也是样品制作时&#xff0c…

5款好用的万能AI写作软件强推

目前AI写作软件已经成为了现代写作的新宠&#xff0c;这些软件利用强大的自然语言处理和机器学习算法&#xff0c;能够帮助用户快速生成高质量的文章、报告、论文等文本内容。在这篇文章中&#xff0c;我将向大家推荐5款好用的万能AI写作软件&#xff0c;希望能够帮助大家提高写…

响应式Web开发项目教程(HTML5+CSS3+Bootstrap)第2版 例4-9 HTML5 表单验证

代码 <!doctype html> <html> <head> <meta charset"utf-8"> <title>HTML5 表单验证</title> </head><body> <form action"#" method"get">请输入您的邮箱:<input type"email&q…

在ubuntu上在安装Squid代理服务器

Squid 是一个代理和缓存服务器&#xff0c;它将请求转发到所需的目的地&#xff0c;同时保存请求的内容&#xff0c;当你再次请求相同内容时&#xff0c;他可以向你提供缓冲内容&#xff0c;从而提高访问速度。Squid代理服务器目前支持的协议有&#xff1a;http、SSL、DNS、FTP…