C++函数进阶:默认参数与函数重载,让你的代码更智能!
C函数进阶默认参数与函数重载让你的代码更智能大家好今天我们来聊聊C中两个非常实用的特性默认参数和函数重载。这两个特性能让我们的代码更灵活、更简洁提高开发效率。一、默认参数让你的函数调用更智能什么是默认参数默认参数就是当函数调用时省略了某些实参编译器会自动使用的预设值。这就像给函数设置了一个“智能默认值”。如何使用默认参数默认参数必须在函数原型中指定// 设置默认参数char*left(constchar*str,intn1);// n的默认值为1这样调用left(theory, 3)→ 返回前3个字符theleft(theory)→ 返回前1个字符t使用默认值重要规则必须从右向左设置默认值// 正确从右向左intharpo(intn,intm4,intj5);// 错误不能跳过参数intchico(intn,intm6,intj);// j没有默认值调用时不能跳过参数harpo(2);// ✓ n2, m4, j5harpo(1,8);// ✓ n1, m8, j5harpo(8,7,6);// ✓ n8, m7, j6harpo(3,,8);// ✗ 不能跳过m实用示例字符串截取函数#includeiostreamusingnamespacestd;// 函数声明设置默认参数char*left(constchar*str,intn1);intmain(){charsample[]Hello World;char*ps1left(sample,5);// 前5个字符coutps1endl;// 输出: Hellodelete[]ps1;char*ps2left(sample);// 使用默认值前1个字符coutps2endl;// 输出: Hdelete[]ps2;return0;}// 函数定义char*left(constchar*str,intn){if(n0)n0;// 修正原文代码有误应该是n0char*pnewchar[n1];// 分配内存inti;for(i0;instr[i];i)p[i]str[i];p[i]\0;// 添加终止符returnp;}二、函数重载一个名字多种功能什么是函数重载函数重载允许我们创建多个同名但参数不同的函数。编译器会根据调用时提供的参数来决定使用哪个版本。重载的关键函数特征标特征标指的是函数的参数类型、数量和顺序。只要特征标不同就可以重载// 这些函数可以重载特征标不同voidprint(constchar*str,intwidth);voidprint(doubled,intwidth);voidprint(longl,intwidth);voidprint(inti,intwidth);voidprint(constchar*str);// 参数数量不同调用时如何匹配print(Pancakes,15);// 匹配第一个print(Syrup);// 匹配最后一个print(1999.0,10);// 匹配第二个print(1999,12);// 匹配第四个不能重载的情况仅返回类型不同❌longgronk(intn,floatm);doublegronk(intn,floatm);// 错误特征标相同const和非const引用特殊情况doublecube(doublex);doublecube(doublex);// 可能导致歧义引用参数的重载技巧voidsink(doubler1);// 匹配可修改的左值voidsank(constdoubler2);// 匹配const左值和右值voidsunk(doubler3);// 仅匹配右值示例doublex55.5;constdoubley32.0;sink(x);// ✓ 调用sink(double)sank(x);// ✓ 调用sank(const double)sank(xy);// ✓ 调用sank(const double)sunk(xy);// ✓ 调用sunk(double)三、综合实战重载left函数让我们重载left函数使其既能处理字符串也能处理整数#includeiostreamusingnamespacestd;// 重载1处理字符串char*left(constchar*str,intn1);// 重载2处理整数返回前n位unsignedlongleft(unsignedlongnum,unsignedct);intmain(){constchar*tripHawaii!!;unsignedlongn12345678;// 测试字符串版本char*templeft(trip,4);cout前4个字符: tempendl;// 输出: Hawadelete[]temp;// 测试整数版本cout前3位数字: left(n,3)endl;// 输出: 123return0;}// 整数版本实现unsignedlongleft(unsignedlongnum,unsignedct){if(ct0||num0)return0;// 计算数字位数unsigneddigits1;unsignedlongnnum;while(n/10)digits;// 如果请求位数大于总位数返回原数if(digitsct)returnnum;// 否则去掉后面多余的数字ctdigits-ct;while(ct--)num/10;returnnum;}四、何时使用选择指南特性适用场景优点默认参数函数大多数情况使用相同值偶尔变化减少函数数量简化调用函数重载相同功能但需要处理不同类型数据接口统一提高可读性建议如果只是参数数量不同优先考虑默认参数如果需要处理不同类型的数据使用函数重载两者结合使用让代码既简洁又强大五、小练习你能写出一个函数既能计算圆的面积area(radius)又能计算矩形的面积area(length, width)吗设计一个打印函数可以打印整数、浮点数和字符串且浮点数可以指定精度默认2位小数。掌握默认参数和函数重载能让你的C代码更加优雅和强大。在实际开发中合理使用这两个特性可以显著提高代码的可读性和可维护性。记住好的代码不仅要能运行更要易于理解和维护

相关新闻

毕业设计 深度学习异常流量检测系统(算法+论文)

毕业设计 深度学习异常流量检测系统(算法+论文)

文章目录 0 前言1 项目运行效果2 设计原理3 背景4 恶意软件加密流量介绍4.1 恶意软件分类4.2 恶意软件加密通信方式 5 加密HTTPS流量解析5.1 Https简介 6 流量解析6.1 流量解析日志生成6.2 流量解析日志中的数据关联6.3 流量解析的证书日志 7 机器学习特征分类7.1 构建4元组7.2…

2026/7/3 15:19:05 阅读更多 →
渗透测试实战核心:ARP 欺骗攻击(ARP 断网攻击)全流程实操指南

渗透测试实战核心:ARP 欺骗攻击(ARP 断网攻击)全流程实操指南

一、目的:通过实训理解ARP欺骗的原理。掌握中间攻击的方法。 二、场景描述: 在虚拟机环境下配置 “Win7”和“Kali Linux”虚拟系统,使得2个系统之间能够相互通信。 三、实验环境: 1.软件:VMware Workstations14以…

2026/7/3 15:19:08 阅读更多 →
AI日报 - 2026年02月03日

AI日报 - 2026年02月03日

#本文由AI生成 🌐 一、【行业深度】 1. 🌟 腾讯元宝上线“元宝派”社交生态,AI首次以“派友”身份深度融入群聊场景 🔥 热点聚焦: 2月1日,腾讯正式发布AI助手“元宝”的全新社交功能——“元宝派”&#xf…

2026/7/3 15:19:09 阅读更多 →

最新新闻

Spring Security OAuth2实战:手把手搭建认证服务器与资源服务器(JWT+密码模式)

Spring Security OAuth2实战:手把手搭建认证服务器与资源服务器(JWT+密码模式)

引言 在现代微服务架构中,安全认证与授权是绕不开的话题。OAuth2 作为业界标准的授权协议,能够帮助我们实现第三方应用授权、单点登录以及资源保护。Spring Security 提供了对 OAuth2 的一流支持,使得开发者可以快速构建符合标准的认证与资源…

2026/7/4 14:03:58 阅读更多 →
Java ECC加密报错InvalidKeyException解析:加密与签名的本质区别

Java ECC加密报错InvalidKeyException解析:加密与签名的本质区别

1. 项目概述:当“私钥加密,公钥解密”遇上ECC 最近在调试一个Java项目,用到了椭圆曲线加密(ECC)。我本想实现一个“私钥签名,公钥验签”之外的场景——尝试用私钥加密一段数据,然后用公钥去解密…

2026/7/4 13:59:35 阅读更多 →
千笔论文写作工具:本科生学术写作全流程解决方案

千笔论文写作工具:本科生学术写作全流程解决方案

1. 论文写作痛点与解决方案作为一名经历过本科论文写作的过来人,我深知学术写作过程中的种种困扰。每到deadline前夜,图书馆里总能看到无数抓耳挠腮的同学,面对空白的文档界面一筹莫展。这种"学术拖延症"几乎成了大学生群体的通病&…

2026/7/4 13:57:34 阅读更多 →
本土化AI编程助手:从通用模型到场景专家的技术路径与落地实践

本土化AI编程助手:从通用模型到场景专家的技术路径与落地实践

🚀 30款热门AI模型一站整合,DeepSeek/GLM/Claude 随心用,限时 5 折。 👉 点击领海量免费额度 最近在技术圈里,一个关于“拼多多版Codex”融资的消息,引发了不少讨论。很多人第一反应是:又一个…

2026/7/4 13:55:34 阅读更多 →
DeepSeek-V4如何重塑企业数据资产价值

DeepSeek-V4如何重塑企业数据资产价值

1. 这不是又一个模型发布,而是企业竞争逻辑的断层式重置这两天刷屏的DeepSeek-V4预览版开源,表面看是技术圈的一次常规更新,但在我连续跟踪企业AI落地三年、亲手陪37家企业做过AI增效诊断后,我敢说:这是一把切开旧商业…

2026/7/4 13:55:34 阅读更多 →
基于YOLOv8的口罩识别系统开发全流程详解

基于YOLOv8的口罩识别系统开发全流程详解

1. 项目概述口罩识别系统在公共卫生领域具有重要应用价值,特别是在疫情防控常态化背景下。基于YOLO系列算法构建的口罩识别系统,能够快速准确地检测图像或视频中人员是否佩戴口罩,为公共场所的防疫管理提供智能化解决方案。这个项目完整实现了…

2026/7/4 13:53:33 阅读更多 →

日新闻

Memcached 1.6.43 发布:关键安全修复版本,多项问题得到解决

Memcached 1.6.43 发布:关键安全修复版本,多项问题得到解决

Memcached 1.6.43 正式发布,这是一个关键的安全修复版本,修复了多个方面的问题,还对部分功能进行了优化。 安全修复亮点 此次发布在安全修复上表现突出。binprot 避免了项目引用计数溢出,mcmc 因安全问题提升了上游版本号&#xf…

2026/7/4 0:04:29 阅读更多 →
终极指南:使用HMCL启动器跨平台畅玩Minecraft的完整解决方案

终极指南:使用HMCL启动器跨平台畅玩Minecraft的完整解决方案

终极指南:使用HMCL启动器跨平台畅玩Minecraft的完整解决方案 【免费下载链接】HMCL A Minecraft Launcher which is multi-functional, cross-platform and popular 项目地址: https://gitcode.com/gh_mirrors/hm/HMCL HMCL(Hello Minecraft! Lau…

2026/7/4 0:06:29 阅读更多 →
KMX63与PIC18F66K40在嵌入式HMI中的硬件协同与低功耗设计

KMX63与PIC18F66K40在嵌入式HMI中的硬件协同与低功耗设计

1. KMX63与PIC18F66K40的硬件协同架构解析KMX63作为一款三轴加速度计和磁力计组合传感器,与PIC18F66K40微控制器的搭配堪称嵌入式HMI开发的黄金组合。这套硬件组合的核心优势在于KMX63提供的高精度运动感知能力与PIC18F66K40强大的信号处理能力形成了完美互补。KMX6…

2026/7/4 0:06:29 阅读更多 →

周新闻

月新闻