当前位置: 首页 > news >正文

04__C++特殊的函数语法

一、函数的重载

1、基本概念

C语言在“同一份程序”中是不能有两个同名函数,C++可以有
(函数重载:编译的时候,可以重复载入多个相同的函数代码) 多个相同名字的函数。作用:1)当你要实现 多个大同小异的功能时,譬如 都是字符串操作函数 我们可以利用函数重载语法,就不需要再去想名字了strcpy                     strctrlstrcat    函数重载:        strctrlstrlen                     strctrlstrcmp                     strctrl解决函数命名缺乏的问题2)体现接口的丰富性如何实现函数重载?具体C++语法要求如下:1:函数名称必须相同  2:参数列表必须不同(个数不同 或者 类型不同 或者 参数排列顺序不同等)3:函数的返回类型可以相同也可以不相同。仅仅返回类型不同不足以成为函数的重载条件。作用:解决函数名字资源问题,注意什么时候才能让两个函数的名字一样? 字符串操作函数: strcpy strlen strcmp...体现了 一个接口  多种方法的好处本质:在编译的汇编阶段根据形参的类型来决定要调用的函数。---- 静态绑定  静态多态Fun();
Fun(int a);
Fun(char b);
Fun(char *p);

作用:1、解决函数命缺乏的问题,2、体现接口的丰富性

多态:函数重载体现了函数的多态性。多态性可以简单地概括为“一个接口,多种方法”,程序在编译时决定调用的函数,它是面向对象编程领域的核心概念。属于C++的静态绑定概念!

② 重载示例

例子1:

#include <iostream>
#include <cstring>using namespace std;//函数重载的例子void Data(int int_data);
void Data(string str_data);void Data(int int_data)
{if(int_data % 2 == 0)cout<<"是偶数"<<endl;elsecout<<"是奇数"<<endl;return;
}void Data(string str_data)
{cout<<"输出的是string类型的数据为:";cout<<str_data<<endl;return;
}int main()
{int a = 30;string s1 = "my name is Bardb";Data(a);Data(s1);return 0;
}

例子2:

#include <iostream>using namespace std;void Fun();
void Fun(int a);
void Fun(char s);
void Fun(int a1, char s1);
void Fun(char s2, int a2);void Fun()
{cout<<"这个函数是没有数据的"<<endl;
}
void Fun(int a)
{cout<<a<<endl;
}
void Fun(char s)
{cout<<s<<endl;
}
void Fun(int a1, char s1)
{cout<<"a1的值为:";cout<<a1<<endl;cout<<"s1的值为:";cout<<s1<<endl;
}
void Fun(char s2, int a2)
{cout<<"a2的值为:";cout<<a2<<endl;cout<<"s2的值为:";cout<<s2<<endl;
}int main()
{Fun();Fun(10);Fun('B');Fun(11,'a');Fun('r', 12);return 0;
}

例子3:

#include <iostream>
#include <cstring>using namespace std;//判断整数是奇数还是偶数,判断两个整数的谁大,输出字符串的数据级长度
void Fun(int A);
void Fun(int a, int b);
void Fun(string s1);void Fun(int A)
{if(A % 2 == 0)cout<<"是偶数"<<endl;elsecout<<"是奇数"<<endl;
}void Fun(int a, int b)
{a>b?cout<<"a>b"<<endl:cout<<"a<b"<<endl;
}void Fun(string s1)
{cout<<"s1为:"<<s1<<",s1的长度为:"<<s1.size()<<endl;
}int main()
{Fun(10);Fun(12, 15);Fun("Bardb");return 0;
}

例子4:

#include <iostream>using namespace std;//获取用宏来表示PI
#define PI  3.1415926//用函数重载计算长方形的体积,和计算圆柱的体积
int Volume(int l, int w, int h);
double Volume(int r, int h);//计算长方体的体积
int Volume(int l, int w, int h)
{return l*w*h;
}//计算圆柱体的体积
double Volume(int r, int h)
{//const double PI = 3.1415926;return PI*r*r*h;
}int main()
{int res = Volume(3,4,5);double res1 = Volume(6,7);cout<<res<<endl;cout<<res1<<endl;return 0;
}

二、函数的默认参数(缺省实参数据)

1、概念

问题引入:C++中有没有一种语法支持,调用函数的时候不需要传参?C中,如果函数有形参,在调用的时候必须传参,但是在C++中,函数的调用,
如果函数的形参是默认参数,则调用的时候可以不传参。作用:在函数调用的时候提高灵活性,在调用的时候可以不传参使用默认参数,当然程序员也可以自定义传参。以下是实现默认参数的语法书写:在""""声明函数"""""的时候可以先赋予函数形参的默认值(初始化)。所谓默认值就是在调用时,可以不写某些参数的值,使用默认值编译器会自动把默认值传递给调用语句中,这也是默认参数的作用。》》》》》》》》》》》》注意《《《《《《《《《《《《《
1:在函数的声明设置默认值即可,定义的时候不需要设置默认值;
2:将变量作引用类型参数的默认值,这个变量必须是已经声明且是全局变量 

注意它的作用是:在调用函数时提高了灵活性。

注意:将默认参数赋值的是变量,那么该变量需要提前定义⭐

函数默认参数例子:

#include <iostream>using namespace std;//函数的默认参数例子
void printf_message(int a, char s1, const char * str = "Bardb");void printf_message(int a, char s1, const char * str)
{cout<<"a="<<a<<",s1="<<"my name is:"<<str<<endl;return;
}int main()
{printf_message(10,'A');return 0;
}

2、默认参数 和 普通参数 一起使用的时候需要注意的地方

注意:函数参数有默认值的参数需要在没有默认值的参数的最右边定义

3、函数默认参数的总结

1、默认参数是在函数的声明确定的,不能在定义的时候设置(C++语言设计时考虑到了与C语言的兼容性和可维护性。C语言没有默认参数,C++引入默认参数时,”遵循了函数声明即接口的原则“,这样能够明确区分声明和定义的职责)2、如果默认参数是赋值变量,赋值的变量是全局变量并且要在函数声明之前(作用域要满足函数参数赋值)3、设置默认值要从函数参数列表的最右边设置,基于参数列表中有普通参数的情况下。4、函数重载和默认参数结合,注意二义性!

三、占位参数

1、概念:

        在“”“函数定义时“”“”,形参只写类型,不写形参变量名

2、基本语法

返回值类型  函数名(type ) //type --- int char{    }作用:
① 函数接口一致性:在某些情况下,为了与其他函数保持一致的接口,
需要在函数声明和定义中提供参数列表,而实际上函数体内并不需要使用这些参数。
这时可以使用占位参数来达到接口一致的目的。② 避免警告:在一些情况下,编译器可能会发出警告,指出函数声明和定义中的参数未被使用。使用占位参数可以避免这些警告,因为编译器知道这些参数是有意未被使用的。③ 未来扩展性:有时候在函数初始设计时可能并不需要使用所有的参数,但为了在未来的扩展中保持灵活性,可以先留下一些占位参数的位置,以便日后扩展功能时不需要修改函数接口。

占位参数的例子:

#include <iostream>using namespace std;//占位参数的例子
void Fun(int)
{cout<<"占位操作0"<<endl;
}void Fun1(char)
{cout<<"占位操作1"<<endl;
}void Fun1(int a, char * = "/dev/input/event")
{cout<<"占位操作2"<<endl;
}int main()
{int a = 10;Fun(12);Fun1('B');Fun1(a);return 0;
}

四、函数的重载与函数占位参数、函数默认参数 ---- 小知识补充

1、下面是函数重载和默认参数,占位参数的混淆

解决方法:

2、函数的重载与函数默认参数的结合,很容易误导你,让你觉得函数重载了

当函数重载  和 默认参数 以及 占位参数结合:1:重载  默认2:重载  默认 占位
都有可能出现 二义性的情况,我们要避免!

相关文章:

  • spring boot2 +java-jwt轻量实现jwt
  • 数据结构(9)排序
  • 成功在 Conda Python 2.7 环境中安装 Clipper(eCLIP peak caller)
  • 01.pycharm整合conda
  • 【数据结构】图论最短路圣器:Floyd算法如何用双矩阵征服负权图?
  • C# TextBox 控件限制输入字符为十六进制字符串
  • 什么是哈希函数
  • AIGC 基础篇 Python基础 05 元组,集合与字典
  • 深入理解 PCIe 协议中 BDF(Bus/Device/Function)分配与管理机制
  • 华为云Flexus+DeepSeek征文 | 基于Dify构建多语言文件翻译工作流
  • Qwen家族系列模型概述
  • 二刷苍穹外卖 day02
  • 强化学习入门:交叉熵方法实现CartPole智能体
  • 【案例实战】轻创业技术手册:如何用最小MVP模型验证市场需求?低成本创业可以做什么?低成本创业项目排行榜前十名!轻资产创业项目做什么比较好?格行代理怎么样?
  • 计算机网络 : 数据链路层
  • Java/Kotlin selenium 无头浏览器 [Headless Chrome] 实现长截图
  • 2025神经网络动力学理论、优化算法及应用专题研讨会 ( NOTAA 2025)
  • 一键生成活动页面的智能体开发实践:从策划到分发的全自动化解决方案
  • Android studio中git突然看不了提交记录
  • flink1.19.2+cdc-3.2.1遇到的问题及解决方案
  • 做网站常见程序/快速关键词排名首页
  • 旅游网站前台怎么做/搜索网站关键词
  • 物流门户网站源码/个人网站设计图片
  • 上海网站建设 浦东/今天的重要新闻
  • 大连做网站哪家服务好/青岛招聘seo
  • 网站前端模板下载/如何优化关键词的方法