【C->Cpp】深度解析#由C迈向Cpp(2)
目录
(一)缺省参数
全缺省参数
半缺省参数
缺省参数只能在函数的声明中出现:
小结:
(二)函数重载
函数重载的定义
三种重载
在上一篇中,我们从第一个Cpp程序为切入,讲解了Cpp的命名空间要解决的问题,以及输入输出流。
接下来,开始本篇内容->

长长的路,慢慢的走
(一)缺省参数
缺省参数是Cpp另一个基于C上的新增加的语法,实现一个项目,离不开一个一个的功能,为了更加方便的重复使用同一个功能,我们通常将代码段封装成“高内聚,低耦合”的函数中。
想要使用函数,一般要向他传递参数。在C中,我们必须按照函数定义时的参数一一对应的传参:
#include<stdio.h>float sub(float a,int b)
{return (float)(a-b);
}int main()
{printf("%lf\n",sub(5.6,4));return 0;
}
在Cpp中,有缺省参数的语法:
在函数定义的时候,给参数一个值,这个值是“备用的”,如果这个在调用此函数时,没有给参数传值,那么这个参数就会使用这个设定的默认值。
#include<iostream>int func(int a = 50)
{return a;
}
int main()
{std::cout << func(10) << std::endl;std::cout << func() << std::endl;return 0;
}
a默认值为50,有传值按照传递的值;无传值则默认为50.

缺省参数按照缺省的情况不同,分为全缺省参数和半缺省参数
全缺省参数
在定义函数的时候,所有的参数都有默认值
//在定义的时候,对所有的参数设置有默认值void fun_c(int a = 1,int b = 2,int c = 3)
{std::cout << "a = " << a << std::endl;std::cout << "b = " << b << std::endl;std::cout << "c = " << c << std::endl;
}
半缺省参数
在定义函数的时候,部分参数有默认值
//部分参数有默认值——第一个参数a没有默认值,其余参数有默认值void fun_c2(int a,int b = 5,int c = 52)
{std::cout << "a = " << a << std::endl;std::cout << "b = " << b << std::endl;std::cout << "c = " << c << std::endl;
}
但是,有默认值的参数要放在函数定义的参数括号的最右侧,否则,编译器报错

将有默认值的参数放到函数参数括号的右侧后,没有错误提示
在使用的时候,由于有默认值的参数都放在函数的参数括号的最右侧,无默认值的参数在函数括号的左侧,所以手动传入的参数主要是给无缺省参数的参数。
无法跨过没有默认值的参数,直接给有默认值的参数传参
void func2(int a ,int b = 5, int c = 8)
{std::cout << "a = " << a << std::endl;std::cout << "b = " << b << std::endl;std::cout << "c = " << c << std::endl;std::cout << std::endl;
}int main()
{func2(,1,2);func2(1,2);return 0;
}

缺省参数只能在函数的声明中出现:
在项目内部时,缺省参数统一放在函数的声明中
main.cpp
#include"test.h"int main()
{std::cout << add(1,2) << std::endl;std::cout << add() << std::endl;return 0;
}
add.h
#ifndef TEST_H
#define TEST_Hint add(int a = 1,int b = 1);#endif
add.cpp
int add(int a,int b)
{return a+b;
}
编译成功,按照传入参数,和为3;按照默认参数,和为2;
对其他情况:
在定义中设置默认参数;
在定义和声明中都设置默认参数;
都无法编译通过。
只有在声明中设置默认参数,编译可以成功;
小结:
1.半缺省参数(有默认值的参数)必须从右向左来给出,不能间隔着给;
2.缺省参数不能在函数的声明和定义中同时出现,要将缺省参数放在声明中。
(二)函数重载
在C中,我们无法定义任何一个同名的函数。当我们想要实现一系列功能类似,知识数据类型不同的函数时,我们只能在函数名上附带上一些标记:
add_int(); add_dou(); add_flo(); ...这就不利于我们编程。因为当函数类型更多时,记忆十分繁琐。
函数重载是Cpp为了方便编程,在C的基础上添加的新的语法。
函数重载的定义
函数重载是在同一个作用域中,可以声明几个功能类似的同名函数,但是需要满足的条件是:函数的形参列表不同->
具体来说,形参列表不同指的是 参数个数,类型,类型顺序不同
三种重载
类型不同
int add_(int a,int b)
{return a+b;
}
double add_(double a,double b)
{return a+b;
}int main()
{std::cout << add_(1,2) << std::endl;std::cout << add_(1.5,2.6) << std::endl;return 0;
}

参数个数不同
int add_(int a,int b)
{return a+b;
}int add_(int a,int b,int c)
{return a+b+c;
}int main()
{std::cout << add_(1,2) << std::endl;std::cout << add_(3,5,9) << std::endl;return 0;
}

类型顺序不同
void fun_c4(int a,char c)
{std::cout << a << std::endl;std::cout << c << std::endl;
}void fun_c4(char c,int a)
{std::cout << a << std::endl;std::cout << c << std::endl;
}int main()
{fun_c4(5,'v');fun_c4('p',5);return 0;
}

以上三种情况都是正确的,可以编译通过;编译器似乎可以自动识别函数的参数类型,他根据我们传入参数的类型来自动调用参数类型合适的函数。
但是为什么呢? 编译的时候,编译器是怎么识别的呢?
与C不同的是,Cpp对函数名进行了不同的修饰,同名的函数,由于修饰的内容不同,所以最终Cpp编译器对于同名函数的名称能够区分开。
至于如何区分,具体请听下回解析~
完~
未经作者同意禁止转载
相关文章:
【C->Cpp】深度解析#由C迈向Cpp(2)
目录 (一)缺省参数 全缺省参数 半缺省参数 缺省参数只能在函数的声明中出现: 小结: (二)函数重载 函数重载的定义 三种重载 在上一篇中,我们从第一个Cpp程序为切入,讲解了Cpp的…...
WPS中如何根据身份证号生成出生日期并排序
1. wps中如何根据身份证号导出出生日期并排序 1.1 wps中建一张表 1.2 使用转日期格式导出出生日期 DATE(VALUE(MID(C2,7,4)),VALUE(MID(C2,11,2)),VALUE(MID(C2,13,2)))MID(C2, 7, 4):这部分从单元格 C2 中提取文本字符串,从第7个字符开始提取长度为4的…...
20231222给NanoPC-T4(RK3399)开发板的适配Android11的挖掘机方案并跑通AP6398SV
20231222给NanoPC-T4(RK3399)开发板的适配Android11的挖掘机方案并跑通AP6398SV 2023/12/22 7:54 简略步骤:rootrootrootroot-X99-Turbo:~/3TB$ cat Android11.0.tar.bz2.a* > Android11.0.tar.bz2 rootrootrootroot-X99-Turbo:~/3TB$ tar jxvf Android11.0.tar.…...
iClient for JavaScript如何以mvt矢量瓦片的形式加载数据服务
刘大 这里写目录标题 前言1.iServer中的预览页面2.iClient for JavaScript加载2.1 构建Style2.2 iCient加载2.2.1Leaflet & MapboxGL2.2.2 OpenLayers 前言 在提到查看iServer REST数据服务的概况的时候,大家总会想到说,通过发布对应的地图服务或者…...
全方位掌握卷积神经网络:理解原理 优化实践应用
计算机视觉CV的发展 检测任务 分类与检索 超分辨率重构 医学任务 无人驾驶 整体网络架构 卷积层和激活函数(ReLU)的组合是网络的核心组成部分 激活函数(ReLU) 引入非线性,增强网络的表达能力。 卷积层 负责特征提取 池化层…...
视频批量处理:随机分割方法,创新剪辑方式
随着数字媒体技术的飞速发展,视频处理已是日常生活和工作中不可或缺的一部分。在处理大量视频时,要一种高效、自动化的方法来满足需求。现在一起来看云炫AI智剪如何批量随机分割视频的批量处理方法,给视频剪辑工作带来创新。 视频随机分割4段…...
Gaussian-Splatting 训练并导入Unity中
这个周末玩点啥~🐞 🍥环境安装💡安装C编译工具💡安装Python💡安装CUDA💡添加ffmpeg到环境变量Path添加COLMAP-3.8-windows-cuda文件路径到环境变量Path💡pytorch安装💡tqdm 安装&…...
账号和权限管理
目录 一、用户账号和的概述 (一)用户类别 (二)组账号 编辑(三)UID号 编辑(四)GID号 (五)配置文件 二、用户账号管理 (一)…...
前端---表单标签
1. 表单的介绍 表单用于搜集不同类型的用户输入(用户输入的数据),然后可以把用户数据提交到web服务器 。 2. 表单相关标签的使用 <form>标签 表示表单标签,定义整体的表单区域 <label>标签 表示表单元素的文字标注标签,定义文字…...
Matplotlib 绘制基本的图表
# 导入包 import pandas as pd import numpy as np import matplotlib.pyplot as plt plt.rcParams[font.sans-serif][SimHei] # 用来显示中文 plt.rcParams[axes.unicode_minus] False # 显示负坐标轴# 读取源数据,后续大部分数据基于词文件的数据,需…...
【JavaScript】异步解决方案的发展历程
✨ 专栏介绍 在现代Web开发中,JavaScript已经成为了不可或缺的一部分。它不仅可以为网页增加交互性和动态性,还可以在后端开发中使用Node.js构建高效的服务器端应用程序。作为一种灵活且易学的脚本语言,JavaScript具有广泛的应用场景&#x…...
前端性能优化三十四:花裤衩模板引入打包分析工具
测量各个插件和loader所花费的时间 (1). install: yarn add speed-measure-webpack-plugin -D(2). Vue-cli 3.x设置: const SpeedMeasurePlugin require(speed-measure-webpack-plugin) const smp new SpeedMeasurePlugin({outputFormat: human }) // 包裹configureWebpac…...
求职小程序列表基础配置-移动端通用列表模块配置教程(1)
求职小程序列表基础配置-移动端通用列表模块配置教程(1) 移动端通用列表页开发指南 准备工作 注册多八多AIIDE账号: 访问多八多AIIDE官网并注册新账号。完成邮箱和手机号的验证。 创建移动应用: 登录后,在工作台新建一个移动应用。填写应用名称,选择“…...
牛客设计模式
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言一、pandas是什么?二、使用步骤 1.引入库2.读入数据总结 前言 提示:这里可以添加本文要记录的大概内容: 例如:…...
从零构建tomcat环境
一、官网构建 1.1 下载 一般来说对于开源软件都有自己的官方网站,并且会附上使用文档以及一些特性和二次构建的方法,那么我们首先的话需要从官网或者tomcat上下载到我们需要的源码包。下载地址:官网、Github。 这里需要声明一下ÿ…...
MySQL递归公用表表达式
😇作者介绍:一个有梦想、有理想、有目标的,且渴望能够学有所成的追梦人。 🎆学习格言:不读书的人,思想就会停止。——狄德罗 ⛪️个人主页:进入博主主页 🗼专栏系列:MySQL知识 &…...
深入 K8s 网络原理(一)- Flannel VXLAN 模式分析
1. 概述 这周集中聊下 K8s 的集群网络原理,我初步考虑分成3个方向: Pod-to-Pod 通信(同节点 or 跨节点),以 Flannel VXLAN 模式为例; Pod/External-to-Service 通信,以 iptables 实现为例&…...
fpga 8段4位数码管verilator模拟
8段4位数码管verilator模拟 seg.v module seg(input wire clk,input wire rst_n,output wire[7:0] SEG,output wire[3:0] SEL );reg[7:0] digit[0:15] {8h3f, 8h06, 8h5b, 8h4f, 8h66, 8h6d, 8h7d,8h07,8h7f,8h6f, 8h77, 8h7c, 8h39, 8h5e, 8h79, 8h71};reg[31:0] cnt 32…...
HttpURLConnection发送各种内容格式
通过java.net.HttpURLConnection类实现http post发送Content-Type为multipart/form-data的请求。 json处理使用com.fasterxml.jackson 图片压缩使用net.coobird.thumbnailator log使用org.slf4j 一些静态变量 private static final Charset charset StandardCharsets.UTF_8;…...
摇杆控制人物移动
摇杆控制人物移动 一、UI搭建二、3d模型搭建三、脚本JoyStickBar.csPlayerController.cs 工程在我资源里名字叫Joystickbar.unitypackage [连接](https://download.csdn.net/download/qq_42194657/12043019?spm1001.2014.3001.5503) 一、UI搭建 JoyStickBar是图片背景 JoySt…...
铭豹扩展坞 USB转网口 突然无法识别解决方法
当 USB 转网口扩展坞在一台笔记本上无法识别,但在其他电脑上正常工作时,问题通常出在笔记本自身或其与扩展坞的兼容性上。以下是系统化的定位思路和排查步骤,帮助你快速找到故障原因: 背景: 一个M-pard(铭豹)扩展坞的网卡突然无法识别了,扩展出来的三个USB接口正常。…...
JVM垃圾回收机制全解析
Java虚拟机(JVM)中的垃圾收集器(Garbage Collector,简称GC)是用于自动管理内存的机制。它负责识别和清除不再被程序使用的对象,从而释放内存空间,避免内存泄漏和内存溢出等问题。垃圾收集器在Ja…...
2.Vue编写一个app
1.src中重要的组成 1.1main.ts // 引入createApp用于创建应用 import { createApp } from "vue"; // 引用App根组件 import App from ./App.vue;createApp(App).mount(#app)1.2 App.vue 其中要写三种标签 <template> <!--html--> </template>…...
镜像里切换为普通用户
如果你登录远程虚拟机默认就是 root 用户,但你不希望用 root 权限运行 ns-3(这是对的,ns3 工具会拒绝 root),你可以按以下方法创建一个 非 root 用户账号 并切换到它运行 ns-3。 一次性解决方案:创建非 roo…...
云原生玩法三问:构建自定义开发环境
云原生玩法三问:构建自定义开发环境 引言 临时运维一个古董项目,无文档,无环境,无交接人,俗称三无。 运行设备的环境老,本地环境版本高,ssh不过去。正好最近对 腾讯出品的云原生 cnb 感兴趣&…...
C++使用 new 来创建动态数组
问题: 不能使用变量定义数组大小 原因: 这是因为数组在内存中是连续存储的,编译器需要在编译阶段就确定数组的大小,以便正确地分配内存空间。如果允许使用变量来定义数组的大小,那么编译器就无法在编译时确定数组的大…...
Linux nano命令的基本使用
参考资料 GNU nanoを使いこなすnano基础 目录 一. 简介二. 文件打开2.1 普通方式打开文件2.2 只读方式打开文件 三. 文件查看3.1 打开文件时,显示行号3.2 翻页查看 四. 文件编辑4.1 Ctrl K 复制 和 Ctrl U 粘贴4.2 Alt/Esc U 撤回 五. 文件保存与退出5.1 Ctrl …...
Python 训练营打卡 Day 47
注意力热力图可视化 在day 46代码的基础上,对比不同卷积层热力图可视化的结果 import torch import torch.nn as nn import torch.optim as optim from torchvision import datasets, transforms from torch.utils.data import DataLoader import matplotlib.pypl…...
DeepSeek源码深度解析 × 华为仓颉语言编程精粹——从MoE架构到全场景开发生态
前言 在人工智能技术飞速发展的今天,深度学习与大模型技术已成为推动行业变革的核心驱动力,而高效、灵活的开发工具与编程语言则为技术创新提供了重要支撑。本书以两大前沿技术领域为核心,系统性地呈现了两部深度技术著作的精华:…...
ubuntu系统文件误删(/lib/x86_64-linux-gnu/libc.so.6)修复方案 [成功解决]
报错信息:libc.so.6: cannot open shared object file: No such file or directory: #ls, ln, sudo...命令都不能用 error while loading shared libraries: libc.so.6: cannot open shared object file: No such file or directory重启后报错信息&…...
