c++缺省参数与函数重载(超详细)

文章目录

  • 前言
  • 一、缺省参数
    • 1.缺省参数的概念与使用
    • 2.缺省参数的分类
    • 3.缺省参数注意事项
  • 二、函数重载
    • 1.什莫事函数重载
    • 2.函数重载的几种形式
    • 3.函数重载与缺省值的结合
    • 4.为什么c++支持函数重载??
  • 总结


前言

在本文章中,我们将要详细介绍一下C++c++缺省参数与函数重载的内容,具体包括定义,使用以及等缺省参数的概念,使用,分类,注意事项和函数重载中的一系列知识以及二者结合会产生什么样的效果相关的知识等。

一、缺省参数

1.缺省参数的概念与使用

缺省参数是声明或定义是为函数参数指定的一个缺省值。在调用该函数时,如果没有指定实参,则采用这个缺省值作为函数参数。否则使用指定形参。
c++缺省参数与函数重载(超详细)_第1张图片
在调用fun函数时,没有传参,则采用给形参赋的那个缺省值。

2.缺省参数的分类

.全缺省

函数的形参全部给缺省值。c++缺省参数与函数重载(超详细)_第2张图片

.半缺省

函数的形参只有一部分给缺省值。
c++缺省参数与函数重载(超详细)_第3张图片

3.缺省参数注意事项

1.半缺省参数必须从右往左依次赋值,不能连续给。

2.声明和定义不能同时给缺省值,会产生调用歧义
c++缺省参数与函数重载(超详细)_第4张图片

我们一般建议声明给缺省值,定义正常写。

3.缺省值必须是全局变量或者常量
c++缺省参数与函数重载(超详细)_第5张图片

4.c语言不支持

二、函数重载

1.什莫事函数重载

函数重载:在同一作用域下,实现几个功能相似的同名函数。

c++缺省参数与函数重载(超详细)_第6张图片

2.函数重载的几种形式

参数类型不同

int Add(int left, int right)
{
cout << "int Add(int left, int right)" << endl;
return left + right;
}
double Add(double left, double right)
{
cout << "double Add(double left, double right)" << endl;
return left + right;
}

参数数量不同

void f()
{
	cout << "f()" << endl;
}
void f(int a)
{
	cout << "f(int a)" << endl;
}

参数顺序不同

void f(int a, char b)
{
cout << "f(int a,char b)" << endl;
}
void f(char b, int a)
{
cout << "f(char b, int a)" << endl;
}

仅仅对参数有要求,对返回值无要求

为什莫呢??
调用函数时,返回值并不重要,考虑的是函数名称和参数,返回值是调用处理数据之后考虑的事情

3.函数重载与缺省值的结合

函数重载与缺省值的结合是否可行呢??
c++缺省参数与函数重载(超详细)_第7张图片
这样四可以的,传参调用第一个f函数,虽然有缺省值,但是进行了传参,缺省值不进行使用。

看一下这段代码》》

c++缺省参数与函数重载(超详细)_第8张图片
这个进行了报错,在传参时我们发现调用第一个第二个都是合理的,这样两个就发生了冲突

函数重载与缺省值结合,不传参数调用有二义性

4.为什么c++支持函数重载??

项目一般都是由多个头文件和源文件构成。
比如a.cpp在调用b.cpp中的Add函数,编译后生成a.obj的目标文件,但是没有Add函数的地址。
因为Add函数是在b.cpp中定义的。函数地址在b.obj中。
编译器在链接时,看到a.obj在调用Add,但是没有Add函数的地址,就回到b.obj的符号表中去找Add的地址,然后连接到一起。
那么链接时,面对Add函数,链接接器会使用哪个名字去找呢?这里每个编译器都有自己的
函数名修饰规则
在Linux中g++采用(_Z+函数长度+函数名+类型首字母),window中也有自己独特的函数名修饰规则。只要参数不同,所形成的名字就会不同,这样就完成重载。
但是c语言采用本来的函数名取进行寻找,不加任何修饰,同名函数没办法区分,不支持重载

总结

以上就是今天要讲的内容,本文仅仅详细介绍了C++c++缺省参数与函数重载,希望对大家的学习有所帮助,仅供参考 如有错误请大佬指点我会尽快去改正 欢迎大家来评论~~

你可能感兴趣的:(C嘎嘎,c++,开发语言)