从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被赋值为10
	fun(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);

执行链接过程时:

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



相关推荐

  1. C++】参数

    2024-01-26 22:56:04       39 阅读
  2. C++基础】参数

    2024-01-26 22:56:04       29 阅读
  3. C++中函数的默认参数参数

    2024-01-26 22:56:04       55 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-01-26 22:56:04       98 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-01-26 22:56:04       106 阅读
  3. 在Django里面运行非项目文件

    2024-01-26 22:56:04       87 阅读
  4. Python语言-面向对象

    2024-01-26 22:56:04       96 阅读

热门阅读

  1. 速盾:服务器CDN加速配置的技术文章

    2024-01-26 22:56:04       57 阅读
  2. linux下安装JRE

    2024-01-26 22:56:04       56 阅读
  3. [Oracle] [最全] 服务及文件

    2024-01-26 22:56:04       57 阅读
  4. oracle、oracle functions、oracle calls

    2024-01-26 22:56:04       65 阅读
  5. 力扣295:数据流的中位数

    2024-01-26 22:56:04       55 阅读
  6. redis在rhel7/centos7环境下的安装与配置指导

    2024-01-26 22:56:04       46 阅读
  7. 前端笔试题(十)

    2024-01-26 22:56:04       67 阅读
  8. 69.x 的平方根(力扣LeetCode)

    2024-01-26 22:56:04       50 阅读
  9. mysql sql查询

    2024-01-26 22:56:04       58 阅读
  10. 学习 canvas标签 这一篇文章足以

    2024-01-26 22:56:04       40 阅读