【带头学C++】----- 八、C++面向对象编程 ---- 8.10 函数的默认参数

news2025/1/11 6:04:47

8.10 函数的默认参数

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

      通过为函数参数指定默认值,可以在调用函数时省略相应的参数,而该参数将使用默认值。如果调用函数时提供了该参数的值,则它将覆盖默认值。

// 使用默认参数的函数示例
int add(int a, int b = 0) {
    return a + b;
}

// 调用函数时省略默认参数
int result1 = add(5);       // 此时 b 默认为 0,结果为 5 + 0 = 5

// 调用函数时提供参数值来覆盖默认参数
int result2 = add(5, 3);    // 此时 b 被覆盖为 3,结果为 5 + 3 = 8

再看案例:

 

代码:

void TestFunc01(int a = 10,int b = 20){
    cout << "a + b = "<< a+b<<endl;
}
//注意点:
//1.形参b设置默认参数值,那么后面位置的形参c也需要设置默认参数
void TestFunc02(int a,int b = 10,int c = 10){
     cout << "a + b + c  = "<< a+b+c<<endl;
}
//2。如果函数声明和函数定义分开,函数声明设置了默认参数,函数定义不能再设置默认参数
void TestFunc03(int a = 0,int b = 0);     //函数声明
void TestFunc03(int a,int b){}            //函数定义

void test03(){
    //如果没有传参数,那么使用默认参数
    TestFunc01();
    //2.如果传一个参数,那么第二个参数使用默认参数
    TestFunc01(100);
    //3. 如果传入两个参数,那么两个参数都使用我们传入的参数
    TestFunc01(100,200);
}

强调一下:

注意点1:形参按照参数位置的顺序传值,最左边参数设置了默认参数,右边也必须设置参数。 

注意点2:默认函数碰上函数重载的时候,注意调用时的二义性

 

8.11 占位参数

c++在声明函数时,可以设置占位参数,占位参数只有参数类型,而没有参数名。一般情况下,在函数体内部无法使用占位参数。

 

代码:

void zwTestFunc01(int x,int y,int){
    //函数内部无法使用占位参数
    cout << "x+y = " << x+y <<endl;
}
//占位参数也可以使用默认参数
void zwTestFunc02(int x,int y,int = 20){
    //但是函数内部还是无法使用占位参数
    cout << "x+y = " << x+y <<endl;
}
void test05(){
    //错误调用
    //zwTestFunc01(10,20);  //少一个参数,不行
    //正确
    zwTestFunc01(10,20,30);

    //正确
    zwTestFunc02(11,22); //第三个是默认参数

    //正确
    zwTestFunc02(11,22,33);//可以修改默认参数进行赋值
}

8.12 extern C使用C语言来进行C++混合编程的处理方法

在Linux下测试例如:

c函数: void MyFunc(){}  被编译成函数: MyFunc
c++函数: void MyFunc(){}  被编译成函数:_Z6Myfuncv
通过这个测试,由于C++中需要支持函数重载,所以(和C++中对同一个函数经过编译后生成的函数名是不相同的,这就导致了一个问题,如果在C++中调用一个使用C语言编写模块中的某个函数,那么C++是根据C++的名称修饰方式来查找并接这个函数,那么就会发生链接错误,以上例,C++中调用MyFunc函数,在链接阶段会去找_Z6MVfuncy,结里是没有找到的,因为这个MyFunc数是语言编写的,生成的符号是MFunc。

那么如里我想在++调C的函数怎么办?extern "C" 的主要作用就是为了实现C++代码能够调用其他C语言代码。加上extern“C”后,这部分代码编译器按C语言的方式进行编译和链接,而不是按C++的方式。

案例分析:定义一个fun.c fun.h文件

错误分析:

1.fun.c文件

2.fun.h文件

3.此时main文件是报错的,直接使用C文件的代码是报错的

正确案例:

在头文定义的时候,使用extern "C"声明该段代码是C语言的代码,这时候编译器会使用c编译器去编译。

代码:

fun.h

#ifndef FUNC_H
#define FUNC_H

#if __cplusplus
    extern "C"{
#endif
    extern int myAddfunc(int x,int y);

#if __cplusplus
    }
#endif
#endif // FUNC_H

fun.c

#include <stdio.h>
#include "func.h"

int myAddfunc(int x,int y){
    return x+y;
}

main

#include <iostream>
#include <string>
#include "func.h"

using namespace std;

void test06(){
    cout << myAddfunc(14,29)<<endl;
}
int main()
{
    test06();
    return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1267369.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

喜报 | 再获影响力产品奖!擎创科技实力亮相GOPS全球运维大会

10月26日-27日&#xff0c;为期两天&#xff0c;共1100余人签到的 GOPS 全球运维大会 2023 上海站已经圆满落幕。 此次会议的“2023 IT技术领导力年度颁奖典礼”中&#xff0c;擎创夏洛克AIOps数智运维管理平台凭借成熟的产品能力及广泛且优异的落地实践效益&#xff0c;得到了…

【寒武纪(6)】MLU推理加速引擎MagicMind,最佳实践(二)混合精度

混合精度在精度损失范围内实现数倍的性能提升。 支持的量化特性 构建混合精度的流程 构建混合精度的流程如下&#xff0c;支持浮点或半精度编程&#xff0c;以及量化精度编程两种方式。 浮点或半精度 无需提供tensor分布量化编程需要设置tensor分布。 网络粒度和算子粒度的设…

【智能算法】季节优化算法Seasons optimization algorithm【2023最新智能优化算法合集】

本文介绍了一种基于成吉思汗鲨鱼(Genghis Khan shark&#xff0c;GKS)行为的自然启发的元启发式算法(MA)&#xff0c;称为成吉思汗鲨鱼优化器(Genghis Khan shark optimizer&#xff0c;GKSO)&#xff0c;用于数值优化和工程设计。GKSO的灵感来自于GKS的捕食和生存行为。该成果…

【分布式系统学习】CAP原理详解

CAP原理详解 前言CAP一张图 一、概念1.1 关键词解读1.2 关于CAP&#xff08;拆分解读&#xff09;1.3 CAP原理精髓 二、CAP模拟场景举例理解三、CAP原理证明为什么不能同时满足&#xff08;下面举例说明&#xff09;3.1 必须满足分区容错性P下的处理方式3.2 不是必须满足分区容…

自定义Windows服务启动失败

文章目录 自定义Windows服务启动失败报错内容解决方案管理员身份运行cmd进入到InstallUtil.exe的路径&#xff0c;使用cd命令。使用InstallUtil.exe工具安装服务。 自定义Windows服务启动失败 报错内容 “无法从命令行或调试器启动服务&#xff0c;必须首先安装Windows服务(使…

《opencv实用探索·四》Mat图像数据类型转换和归一化显示

一种数据类型转为另一种数据类型&#xff0c;不改变图像大小&#xff0c;但每个像素值可能会变 src.convertTo(dst, type, scale, shift);Scale和shitf默认为0&#xff08;这两个参数也相当于对比度和亮度&#xff09; 现在有个8位图像&#xff0c;把8位转成32位 可以看到像素…

【EI稳定检索】第三届绿色能源与电力系统国际学术会议(ICGEPS 2024)

第三届绿色能源与电力系统国际学术会议&#xff08;ICGEPS 2024&#xff09; 2024 3rd International Conference on Green Energy and Power Systems 绿色能源是指可以直接用于生产和生活的能源。它包括核能和“可再生能源”。随着世界各国能源需求的不断增长和环境保护意识…

人工智能 -- 技术概览

1、我们身处人工智能的时代 人们从早期做web开发&#xff0c;到移动端的开发&#xff1b;之后随着数据量的增大&#xff0c;人们开始研究高并发的问题&#xff1b;当数据量不断的增大&#xff0c;而人们希望数据不被浪费时&#xff0c;产生了大数据的技术&#xff0c;包括&…

国标GB28181协议/RTSP视频监控汇聚平台EasyCVR(V.3.4)页面UI大更新

为提高用户体验&#xff0c;增强平台功能&#xff0c;旭帆科技的Easy系列平台也在不断优化更新中。在最新的EasyCVR&#xff08;V.3.4&#xff09;中&#xff0c;其最显著的区别即为首页UI的调整。 其亮点是在【配置中心】-【基础配置】-【展示信息】中&#xff0c;首页UI可分…

Spark经典案例分享

Spark经典案例 链接操作案例二次排序案例 链接操作案例 案例需求 数据介绍 代码如下&#xff1a; package base.charpter7import org.apache.hadoop.conf.Configuration import org.apache.hadoop.fs.{FileSystem, Path} import org.apache.spark.SparkContext import org.a…

品牌全渠道营销系统如何与不同经销商ERP打通

品牌商在与各经销商ERP系统打通方面面临的挑战。传统的ERP系统往往使得数据收集和合作变得繁琐且低效&#xff0c;导致市场响应迟缓&#xff0c;影响整体的供应链管理和市场决策。我们的解决方案旨在破解这一难题&#xff0c;提供一个全渠道营销系统&#xff0c;它能自动与各类…

啊哒-MISC-bugku-解题步骤

——CTF解题专栏—— 题目信息&#xff1a; 题目&#xff1a;啊哒 作者&#xff1a;第七届山东省大学生网络安全技能大赛 提示&#xff1a;无 解题附件&#xff1a; 解题思路&#xff1a; 图片的话还是老三样斧winwalk、010Editor、Stegsolve。ok直接开搞&#xff01; 解题…

Typora .MD笔记中本地图片批量上传到csdn (.PNG格式)(无需其他任何图床软件)

Typora .MD笔记中本地图片批量上传到csdn &#xff08;.PNG格式&#xff09;(无需其他任何图床软件) 截图软件推荐 qq 截图 快捷键 ctrlshiftA. 步骤一 设置Typora 的图片 点击文件. 点击偏好设置 ->图像 我们可以选择将图片复制到我们的文件夹中。 建议刚写好文件标题就…

element ui 表格合计项合并

如图所示&#xff1a; 代码&#xff1a; <el-table height"400px" :data"tableData " borderstyle"width: 100%"stripe show-summaryref"table"id"table"> </el-table>监听表格 watch: { //监听table这个对象…

OBC、DCDC自动化测试解决方案!

OBC(车载充电机&#xff09;和DCDC&#xff08;直流-直流变换器&#xff09;是电动汽车的核心部件&#xff0c;DCDC和OBC的功能质量对于整车的性能和安全性至关重要。在OBC和DCDC&#xff0c;以及整车开发测试过程中&#xff0c;需要对OBC和DCDC进行功能和性能方面进行全面的测…

银河麒麟高级服务器操作系统V10安装达梦数据库管理系统DM8——单实例

一、介绍 之前介绍过供个人学习在VMware虚拟机上安装银河麒麟高级服务器操作系统V10&#xff0c;有兴趣的可以去看看&#xff08;银河麒麟V10安装&#xff09;&#xff0c;本次主要学习在银河麒麟V10上安装达梦数据库-DM8。DM8是达梦公司在总结DM系列产品研发与应用经验的基础…

明天就删,限时领取。zui全拼多多直播问题答疑文档合集。

直播流程是什么&#xff1f;什么时间要做什么事&#xff1f;直播带货播出什么数据才算好?怎么提高直播间流量指标&#xff1f;付费起号还是自然起号好&#xff1f;大小循环话术和场控话术怎么说?今天为大家分享一份“zui全直播500问”&#xff1a; 以上内容为“zui全直播500问…

消息队列进阶-3.消息队列常见问题解决方案

&#x1f44f;作者简介&#xff1a;大家好&#xff0c;我是爱吃芝士的土豆倪&#xff0c;24届校招生Java选手&#xff0c;很高兴认识大家&#x1f4d5;系列专栏&#xff1a;Spring源码、JUC源码、Kafka原理&#x1f525;如果感觉博主的文章还不错的话&#xff0c;请&#x1f44…

产品软文撰写思路,媒介盒子分享

产品软文的目的是为了将产品卖出去&#xff0c;然而想把产品卖出去&#xff0c;不是靠几句话就能实现的&#xff0c;还需要进行多方面分析&#xff0c;今天媒介盒子就来和大家分享&#xff1a;产品软文撰写思路。 一、 产品体验分享 自己要成为自己产品的深度用户并不是一句空…

洗牙器亚马逊UL1431测试报告检测标准

洗牙器是一种电动口腔清洁工具&#xff0c;用于移除食物残渣和牙菌斑&#xff0c;提高口腔卫生水平。 亚马逊要求商家上架的产品检测报告必须是ISO17025/ILAC ISO 17025标准认可的实验室出具的合格报告。 UL测试报告是根据产品选用相应的UL标准进行测试合格后&#xff0c;出具…