news 2026/9/23 7:21:34

C++学习日记 Day3:函数高级(默认参数、占位参数、函数重载)

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
C++学习日记 Day3:函数高级(默认参数、占位参数、函数重载)

## 今天学了什么

今天学习C++函数默认参数、占位参数及函数重载的语法和规则。

## 函数的默认参数

函数形参列表的形参可以有默认值,语法 返回类型 函数名(参数=默认值){}。

#include<iostream> using namespace std; //函数的默认参数 int func(int a, int b = 10,int c=20) { return a + b+c; } //默认参数声明实现只能有一个 如果在实现里,实现必须在main函数前面 int func02(int a, int b); int func02(int a = 10, int b = 1) { return a + b; } int main() { cout << "func 的运行结果:" << func(1,1,1)<<endl; cout << "func02 的运行结果:" << func02() << endl; return 0; }

通过对上述代码进行调试,发现:

  • - 设置默认参数后,传入新值,会替换默认值,不传入新值则会使用默认值;
  • - 默认参数后面的参数也必须有默认值,前面没有。即默认参数必须从右往左连续定义,否则会报错;
  • - 函数声明有默认参数,则函数实现就不能有默认参数,反正也是。并且如果默认参数在实现,函数的实现必须在main函数前,否则默认参数设置无效。

## 函数的占位参数

语法:返回值类型 函数名(数据类型){}

  • 参数只有类型,不写变量名,作用是占位;
  • 调用函数时必须填补该位置;
  • 占位参数可以设置默认值。

int func03(int a, int) //占位参数可以有默认值 例:int func03(int a, int=10)
{
a = a + 1;
return a;
}

## 函数重载

** 作用:同一个作用域下,函数名可以相同,依靠参数区分函数,提高复用性。**

** 函数重载条件:**

  1. 同一个作用域;
  2. 同一个函数名;
  3. 函数参数的类型不同/个数不同/顺序不同。

**重点:函数的返回值不同不能作为重载条件,原因:调用函数时,编译器只看传入参数,可以不接收返回值,编译器无法仅靠返回值区分调用函数。**

#include<iostream> using namespace std; int func(int a, int b ,int c) { return a + b + c; } //函数重载 类型不同 int func(float a) { return a + 100; } //函数重载 个数不同 int func(int a, int b) { return a + 2 + b; } //函数重载 顺序不同 int func(int a, double b) { return a * b; } int func(double a, int b) { return a / b; } int main() { cout << "func 的运行结果:" << func(1,1,1)<<endl; cout << "func 重载函数的运行结果:" << func((float)1.0) << endl; return 0; }

## 引用作为重载条件

当函数参数为引用时,也有可重载的情况,int &a 和 const int &a 可以构成重载:

  • 传入变量(左值):调用void func04(int &a);
  • 传入常量、字面量:调用void func04(const int &a);
//引用作为重载条件 void func04(int &a) { cout << "func(int &a)调用" << endl; } void func04(const int &a) { cout << "func(const int &a)调用" << endl; } int main() { int i=1; func04(i);//输出结果:func(int &a)调用 func04(2);//输出结果:func(const int &a)调用 return 0; }

## 发现:函数重载遇到默认参数(坑:二义性)

例:①void func(int a,int b=10){}

②void func (int a) {}

func(1);

虽然满足函数重载的条件-参数个数不同,但运行依旧错误。原因:编译器在调用时发现①②两个 函数都能调用,存在二义性,导致运行出错。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/9/23 7:20:28

Codex AI编程助手应用指南:安装配置到实际项目开发

1. 认识 Codex&#xff1a;它到底是什么1.1 一个藏在终端里的 AI 编程搭档不少朋友拿到 Codex 之后卡在了第一步——打开终端&#xff0c;不知道让它干什么。我第一次用的时候也这样&#xff1a;安装好了、登录成功了&#xff0c;光标停在提示符后面&#xff0c;半天打不出一个…

作者头像 李华
网站建设 2026/9/23 7:19:58

NHANES炎症指标全解析:从CRP到12种标志物与衍生评分实操

如果你的研究对象还在用“CRP高不高”一档来定义炎症暴露&#xff0c;那我建议你花十分钟把NHANES这个公共数据库重新翻一遍。做临床流行病学和公共数据库研究的人&#xff0c;对NHANES应该不陌生&#xff0c;里面能直接用来评估系统性炎症的检测指标远不止C反应蛋白这一项&…

作者头像 李华
网站建设 2026/9/23 7:19:50

OpenAI记忆功能与Sora视频模型技术解析

1. OpenAI近期两大动作的技术解读上周三凌晨&#xff0c;OpenAI突然宣布ChatGPT新增"记忆功能"&#xff0c;允许AI记住用户偏好和对话历史。这个看似简单的功能更新背后&#xff0c;是Transformer架构的重大突破——通过改进KV缓存机制&#xff0c;实现了跨会话的长期…

作者头像 李华
网站建设 2026/9/23 7:19:27

220V强电与弱电安全间距怎么留?FR4实测数据与设计指南

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华
网站建设 2026/9/23 7:18:24

局部特征尺度分解(LCD)技术原理与MATLAB实现

1. 局部特征尺度分解&#xff08;LCD&#xff09;技术概述局部特征尺度分解&#xff08;Local Characteristic-scale Decomposition, LCD&#xff09;是一种新兴的非线性、非平稳信号处理方法。它通过自适应地将复杂信号分解为若干具有物理意义的固有尺度分量&#xff08;Intri…

作者头像 李华
网站建设 2026/9/23 7:18:02

Agent Skills实战:从设计到落地,打造可复用的AI技能包

1. 从“会聊天”到“能干活”&#xff1a;Agent Skills到底补上了什么先说个现象。过去一年大家都在搭Agent&#xff0c;但真正把Agent用出生产力的人并不多。很多团队卡在同一个地方&#xff1a;模型虽然聪明&#xff0c;但让它去操作现实系统、跑完整流程、处理多步任务时&am…

作者头像 李华