服务器之家:专注于VPS、云服务器配置技术及软件下载分享
分类导航

PHP教程|ASP.NET教程|Java教程|ASP教程|编程技术|正则表达式|C/C++|IOS|C#|Swift|Android|VB|R语言|JavaScript|易语言|vb.net|

服务器之家 - 编程语言 - C/C++ - C++深入分析讲解函数与重载知识点

C++深入分析讲解函数与重载知识点

2022-12-15 12:05Bright-SKY C/C++

C++ 允许多个函数拥有相同的名字,只要它们的参数列表不同就可以,这就是函数的重载(Function Overloading),借助重载,一个函数名可以有多种用途

函数的默认(缺省)参数

1、默认参数的定义

c++在声明函数原型的时可为一个或者多个参数指定默认(缺省)的参数值,当函数调用的时候如果没有传递该参数值,编译器会自动用默认值代替。

//函数的默认参数 指定x的默认值为10 y为20
int my_add(int x=10,int y=20)
{
  return x+y;
}
void test02()
{
  //如果函数传参 那么各自的默认参数将无效
  cout<<"my_add = "<<my_add(100,200)<<endl;//300
  //如果某个参数未被传参 将启用默认值x=100 y使用默认值20
  cout<<"my_add = "<<my_add(100)<<endl;//120
  //x=10  y=20
  cout<<"my_add = "<<my_add()<<endl;//30
}

2、默认参数的注意点

(1)、函数的默认参数从左向右,如果一个参数设置了默认参数,那么这个参数之后的参数都必须设置默认参数

//函数的默认参数从左向右
int func01(int x,int y=20,int z=30)
{
  return x+y+z;
}
void test03()
{
  cout<<func01(100,200)<<endl;//330
  cout<<func01(100)<<endl;//150
  //cout<<func01()<<endl;//err x没有设置默认参数 必须传参
}
int fun(int a, int b, int c=10);//正確
int fun(int a, int b=20, int c=10);//正確
int fun(int a=30, int b=20, int c=10);//正確
int fun(int a, int b=20, int c);//不正确

(2)、如果函数声明和函数定义分开写,函数声明和函数定义不能同时设置默认参数

C++深入分析讲解函数与重载知识点

(3)、默认参数一般在函数声明的时候 设置

fun.cpp

int func02(int x,int y,int z)
{
  return x+y+z;
}

main.cpp

//分文件 函数定义处的默认参数 是无效的
//建议:分文件是 在声明 给默认参数
extern int func02(int x,int y=25,int z=35);
//extern int func02(int x,int y,int z);//err
void test04()
{
  cout<<func02(100,200)<<endl;//335
  cout<<func02(100)<<endl;//160
}

 

占位参数

c++在声明函数时,可以设置占位参数。

占位参数只有参数类型声明,而没有参数名声明。

如果函数的参数只有类型名 没有形参名,这个参数就是占位参数

注意:

由于有类型名 所以 函数调用的时候 必须给占位参数传参。

由于没有形参名 所以 函数内部 是无法使用占位参数。

1、占位参数 函数内部无法使用

void func03(int x,int y,int)
{
  cout<<"x = "<<x<<", y = "<<y<<endl;
  return;
}
void test05()
{
  //func03(10,30,"hehe");//err "hehe"和int类型不符
  func03(10,30,40);
}

2、占位参数 可以设置成缺省参数

void TestFunc01(int a,int b,int=100)
{ 
  //函数内部无法使用占位参数 cout << "a + b = " << a + b << endl; 
}
TestFunc01(10, 20,30);//ok
TestFunc01(10, 20);//ok

什么时候用,在后面我们要讲的操作符重载的后置++要用到这个

 

函数重载

函数重载体现了 c++ 的多态的特性

函数重载:同一个函数名在不同场景下可以具有不同的含义。

函数重载意义:方便的使用函数名。

函数重载的条件: 同一个作用域 参数个数不同 参数类型不同 参数顺序不同(重要)

void myFunc(int a)
{
  cout<<"int的myFunc"<<endl;
}
void myFunc(int a,int b)
{
  cout<<"int,int 的myFunc"<<endl;
}
void myFunc(int a,double b)
{
  cout<<"int , double的myFunc"<<endl;
}
void myFunc(double a,int b)
{
  cout<<"double,int的myFunc"<<endl;
}
void test06()
{
  myFunc(10);//int
  myFunc(10,20);//int int
  myFunc(10,20.2);//int double
  myFunc(10.1,20);//double int
}

C++深入分析讲解函数与重载知识点

注意:

1、函数的返回值类型 不能作为 函数重载的依据。

C++深入分析讲解函数与重载知识点

2、函数重载和默认参数一起使用,需要额外注意二义性问题的产生

void myFunc02(int a)
{
  cout<<"int的myFunc02"<<endl;
}
void myFunc02(int a,int b=10)//默认参数
{
  cout<<"int,int 的myFunc02"<<endl;
}
void test07()
{
  //myFunc02(int a) 和 myFunc02(int a,int b=10)都能识别
  myFunc02(10);//二义性产生
}

3、函数重载的原理(了解)

C++深入分析讲解函数与重载知识点

到此这篇关于C++深入分析讲解函数与重载知识点的文章就介绍到这了,更多相关C++函数与重载内容请搜索服务器之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持服务器之家!

原文链接:https://blog.csdn.net/qq_34981463/article/details/124993780

延伸 · 阅读

精彩推荐
  • C/C++C语言实现扫雷游戏详解(附源码)

    C语言实现扫雷游戏详解(附源码)

    大家好,本篇文章主要讲的是C语言实现扫雷游戏详解(附源码),感兴趣的同学赶快来看一看吧,对你有帮助的话记得收藏一下...

    爱编程的晖哥8442022-08-31
  • C/C++大家注意vector, list, set, map成员函数erase

    大家注意vector, list, set, map成员函数erase

    set和map是由红黑树来实现的,当erase的时候迭代器就失效了,也就是说我们要在迭代器失效之前保留一个副本,根据这个副本我们才能继续遍历下一个元素...

    C语言教程网10962020-12-31
  • C/C++详谈C语言指针

    详谈C语言指针

    这篇文章主要介绍了C语言的指针,介绍了其相关概念,然后分享了几种用法,具有一定参考价值。需要的朋友可以了解下...

    执行x7542022-02-16
  • C/C++C++中对象&类的深入理解

    C++中对象&类的深入理解

    这篇文章主要给大家介绍了关于C++中对象&类的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友...

    我是小白呀9872021-11-04
  • C/C++简单总结C语言中的运算符优先级

    简单总结C语言中的运算符优先级

    这篇文章主要介绍了C语言中的运算符优先级,文中简单总结了一些常用运算符的优先级顺序以及记忆技巧,需要的朋友可以参考下...

    C语言教程网8012021-04-01
  • C/C++Opencv使用鼠标任意形状的抠图

    Opencv使用鼠标任意形状的抠图

    这篇文章主要为大家详细介绍了Opencv使用鼠标任意形状的抠图,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...

    Traveling_DING11762021-07-30
  • C/C++VS2019 更新MSDN并创建快捷方式的实现

    VS2019 更新MSDN并创建快捷方式的实现

    这篇文章主要介绍了VS2019 更新MSDN并创建快捷方式的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋...

    Lzl6785832021-08-25
  • C/C++C语言实现图形化打砖块游戏

    C语言实现图形化打砖块游戏

    这篇文章主要为大家详细介绍了C语言实现图形化打砖块游戏,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...

    小雪菜本菜3432022-12-01