C++之函数提高(HM)

目录

1.函数默认参数(缺省参数)

2.占位参数

3.函数重载

4.类和对象--封装

(1)圆类:

(2)访问权限

(3)struct&&class

(4)立方体类的设计案例

(5)点和圆的关系设计案例

(6)设计案例分文件处理

(1)test.cpp文件

(2)point.h文件

(3)point.cpp文件

(4)circle.h文件

(5)circle.cpp文件

5.对象的初始化和清理

(1)构造函数和析构函数

(2)默认构造&&自定义构造&&拷贝构造


1.函数默认参数(缺省参数)

(1)这个就是我们常见的参数的传递过程,函数定义的时候定义变量作为形参接受传递过来的参数,这里返回的是三个数字的和;我们传递参数是10,20,30,在主函数里面进行设置;

(2)我们还可以使用函数的默认参数,如图所示,我们定义函数的时候进行设置默认的参数,我们在主函数里面只传递一个参数,其他的两个是默认的参数,同样可以实现我们的目的;

(3)两个注意事项

1.如果我们定义的函数的某一个位置,有了一个默认的参数,那么从这个位置开始(从左向右)其后面的形参都必须要有默认值);

2.我们都知道函数是可以先定义后使用的,如果我们先使用,就要在主函数的前面加上函数的声明,对于函数的声明和函数的定义,两者只能够有其中的一个设置默认值,也就是说如果声明时候设置默认的参数,定义的时候就不能重复的进行默认参数的设置(因为这样就会产生歧义,编译器不知道使用哪个默认的参数);

2.占位参数

现阶段我们只需要知道占位参数的用法,后续会使用到;

占位参数的默认值:

3.函数重载

函数名相同,函数的参数类型,个数,顺序不同,提高函数的复用性:

(1)一个拥有参数,一个没有参数,构成函数的重载


(2)函数的参数个数相同,但是参数的类型不同:


(3)含有缺省参数的情况:


(4)函数重载和引用的结合:

我们创建函数的重载,这两个参数一个带有const修饰,一个没有const修饰,这个是可以构成函数的重载的,但是两个只会打印222;

          int &b=10;这个是不合法的

const int &b=10;这个是合法的;

我们传递变量的名字,就可以执行int &b就可以执行了;


4.类和对象--封装

(1)圆类:

使用class创建类,我们计算圆的周长,类里面就要设置变量r作为半径,定义函数求出圆的周长;

实例化对象操作:通过类,创建对象c1,调用我们的自定义函数求出指定对象的周长;

我们把半径的设置可以使用类里面的方法来完成(就是一个函数):

使用rr形参接收实参,设置半径的值,类里面的方法实质就是函数;

(2)访问权限

public&&protected&&private分别代表的是公开的,受保护的,私有的成员变量;

公开的在类的里面可以访问,类的外面也是可以访问的;

protected&&private都是类里面可以访问,外面不可访问;

(3)struct&&class

struct默认权限是公共,类的外面可以访问;

class默认权限是私有,类的外面不可以访问;

(4)立方体类的设计案例

tip:1.全局函数和成员函数的使用异同;2.全局函数传进去两个参数,成员函数传进去1个参数

3.传进去一个参数就是比较已知的参数和自己的,这个里面已知的就是c2对象,自己的(主函数里面的自己)就是c1,因为我们是使用c1.issame2()进行调用成员函数的,所以长宽高就是c1对象的;

4.使用引用不需要额外开辟新的空间  5.bool的返回值就是true或者是false进行判断

(5)点和圆的关系设计案例

在类中,可以让另外的一个类作为本类的成员;

(6)设计案例分文件处理

我们可以把不同的类放到不同的文件里面去:

(1)test.cpp文件

(2)point.h文件

先复制原来的point类的代码,把函数的实现全部去掉,变为函数的声明;

(3)point.cpp文件

先复制原来的point类的代码,只保留函数的实现,其余的全部去掉;包含对应的头文件;

(4)circle.h文件

因为圆类里面有点类,所以需要包含点类的头文件;还是把函数的实现变为函数的声明;

(5)circle.cpp文件

函数的实现,其余的全部去掉(主要含是原来的代码);

备注:上面的point,circle类的函数的实现都要使用类名::函数名,这样表明作用域,否则会报错

5.对象的初始化和清理

(1)构造函数和析构函数

构造函数和析构函数就算我们自己不去写,编译器也会自动是实现,只不过编译器实现的时候,两个函数里面都是空语句,我们自己实现的时候,可以在函数里面加上一些内容,这样就可以把这两个函数的执行过程显示出来;

构造函数再对象创建的时候执行,析构函数再对象销毁的时候执行,构造函数里面可以有参数,支持函数的重载,但是析构函数不能够有参数,且不支持函数的重载;两个都没有返回值,而且不能写为void;

上面的代码我们把student类的对象放在了test函数里面创建,相当于是一个局部变量,test函数执行完成以后就会销毁,这个销毁同时就会执行析构函数;

(2)默认构造&&自定义构造&&拷贝构造

函数的调用有3种方法:括号法,显示法,隐式转换法

默认构造函数在调用的时候不能加括号,举个例子,这个里面我们嗲奥永的时候只需要写

person p1,不能在p1的后面加上小括号,因为加上后就会被编译器理解为函数的声明,我们的函数的声明不就是例如:void test()这样的声明,加上括号的货就会被理解为函数的声明,所以不能加小括号;

拷贝构造函数,参数是const 类的名字(对象),我们加上const是不能修改我原来的对像的属性,相当于是把参数里面的对象的属性全部拷贝到我们当前的对象上面去,谁调用谁就是当前的对象,我们这里的是person p3(p2),就是把p2对象的属性拷贝到当前对象p3上面去,参数要使用引用,这个就是拷贝构造函数的格式。

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

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

相关文章

第1讲——预备知识

一、视觉SLAM十四讲在讲些啥 SLAM:Simultaneous Localization and Mapping 翻译:同时定位与地图构建 搭载特定传感器的主体,在没有环境先验信息的情况下,于运动过程中建立环境的模型,同时估计自己的运动。 当特定传感…

WWDC24定档6月 | 崩坏3将推Mac系统版 苹果AI启航 visionOS 2.0将系数登场WWDC24

这几天又有一件苹果用户圈大事发生了!WWDC24正式定档,将在6月10日-14日召开,届时一众软件系统,包括iOS18,iPadOS,WatchOS,VisionOS等等,都将迎来更新。另外就是手游崩坏3官宣&#x…

有效感受野可视化学习

有效感受野可视化 过程记录创建环境准备数据、脚本脚本测试 其他参考尝试运行 过程记录 创建环境 conda create -n ERF python3.8 -y conda activate ERF pip3 install empy rospkg pyyaml catkin_pkg conda install pytorch2.1.0 torchvision0.16.0 torchaudio2.1.0 pytorch…

基于k8s的高性能综合web服务器搭建

目录 基于k8s的高性能综合web服务器搭建 项目描述: 项目规划图: 项目环境: k8s, docker centos7.9 nginx prometheus grafana flask ansible Jenkins等 1.规划设计整个集群的架构,k8s单master的集群环境&…

【R】Error in library(foreach) : 不存在叫‘foreach’这个名字的程辑包

Error in library(foreach) : 不存在叫‘foreach’这个名字的程辑包 此外: Warning message: package ‘parallel’ is a base package, and should not be updated 解决方法 缺少名为 foreach 的包,使用install.packages("foreach")将名为foreach 的包…

Qt事件学习案例

视频链接 https://www.bilibili.com/video/BV18B4y1K7Cs?p7&spm_id_frompageDriver&vd_sourcefa4ef8f26ae084f9b5f70a5f87e9e41bQt5跟着视频做即可,Qt6部分代码需要改动,改动的地方注释有写 素材 百度云 链接:https://pan.baidu.com/s/158j…

Mybatis——一对一映射

一对一映射 预置条件 在某网络购物系统中,一个用户只能拥有一个购物车,用户与购物车的关系可以设计为一对一关系 数据库表结构(唯一外键关联) 创建两个实体类和映射接口 package org.example.demo;import lombok.Data;import …

STM32H5 读取温度传感器校准值时进 HardFault 的原因分析

1.前言 有客户反馈,在使用 STM32H5 读取温度传感器校准值地址时,会进入 HardFault,而在其他系列芯片中读取这个参数时并没有此现象。在 NUCLEO-H563ZI 开发板上去复现此问题,发现只有开启 ICACHE 后才会复现,初步验证…

【旅行商问题TSP】基于大邻域搜索算法LNS

课题名称:大规模邻域搜索算法LNS求解TSP问题 版本时间:2024-04-01 程序运行:直接运行LNS_TSP.m 文件即可 代码获取方式: QQ:491052175 VX:Matlab_Lover 模型介绍: 第一步:设定…

如何对抓取的文本进行分词、词频统计、词云可视化和情感分析

目录 一、引言 二、文本分词 三、词频统计 四、词云可视化 五、情感分析 六、总结 一、引言 在大数据时代,文本数据的处理和分析显得尤为重要。对于爬虫抓取的大量文本数据,如何进行高效、准确的处理和分析,是每一个数据分析师和开发…

9Proxy,跨境电商一站式解决方案

文章目录 跨境电商什么是跨境电商跨境电商的机遇跨境电商技术支撑 海外代理IP什么是海外代理IP海外代理IP的作用如何选择海外代理IP 9Proxy9Proxy的优势9Proxy的解决方案价格汇总搜索引擎优化市场调查多重核算数据抓取广告技术 价格上手体验注册登录下载安装数据采集 总结福利 …

【Unity每日一记】如何从0到1将特效图集制作成一个特效

👨‍💻个人主页:元宇宙-秩沅 👨‍💻 hallo 欢迎 点赞👍 收藏⭐ 留言📝 加关注✅! 👨‍💻 本文由 秩沅 原创 👨‍💻 收录于专栏:Uni…

Java毕业设计 基于SSM jsp商城系统 美妆系统

Java毕业设计 基于SSM jsp商城系统 美妆系统 SSM jsp 商城系统 美妆系统 功能介绍 首页 分类展示商品 搜索商品 登录 注册 邮箱激活 购物车 结算 支付 我的订单 个人信息设置 后台管理 登录 商品管理 添加修改下架商品 商品类型管理 添加修改删除分类 订单管理 确认发货 取消…

Vue使用高德地图(快速上手)

1.在高德平台注册账号 2.我的 > 管理管理中添加Key 3.安装依赖 npm i amap/amap-jsapi-loader --save 或 yarn add amap/amap-jsapi-loader --save 4.导入 AMapLoade import AMapLoader from amap/amap-jsapi-loader; 5.直接上代码,做好了注释(初…

Lafida多目数据集实测

Lafida 数据集 paper:J. Imaging | Free Full-Text | LaFiDa—A Laserscanner Multi-Fisheye Camera Dataset 官网数据:https://www.ipf.kit.edu/english/projekt_cv_szenen.php 官网:KIT-IPF-Software and Datasets - LaFiDa 标定数据下载&…

Spring 详细总结

文章目录 第一章 IOC容器第一节 Spring简介1、一家公司2、Spring旗下的众多项目3、Spring Framework①Spring Framework优良特性②Spring Framework五大功能模块 第二节 IOC容器概念1、普通容器①生活中的普通容器②程序中的普通容器 2、复杂容器①生活中的复杂容器②程序中的复…

单细胞RNA测序(scRNA-seq)SRA数据下载及fastq-dumq数据拆分

单细胞RNA测序(scRNA-seq)入门可查看以下文章: 单细胞RNA测序(scRNA-seq)工作流程入门 单细胞RNA测序(scRNA-seq)细胞分离与扩增 1. NCBI查询scRNA-seq SRA数据 NCBI地址: https…

[RV1106-LINUX-IPC] 关于 rndis 功能无法使用的解决办法

问题描述 按照开发文档文档,修改对应的BoardConfig.mk,增加 export RK_ENABLE_RNDISy 使用编译命令: ./build.sh sysdrv ./build.sh firmware 烧录固件后,开机使用命令: rndis.sh,出现 rndis 无法识别的情…

腾讯云(CVM)托管进行权限维持

前言 刚好看到一个师傅分享了一个阿里云ECS实战攻防,然后想到了同样利用腾讯云CVM的托管亦可实现在实战攻防中的权限维持。 简介 腾讯云自动化助手(TencentCloud Automation Tools,TAT)是一个原生运维部署工具,它可…

SD-WAN组网面临的安全挑战?如何提供有效的安全措施

SD-WAN(软件定义广域网)技术的广泛应用,企业面临着越来越多的网络安全挑战。尽管SD-WAN带来了灵活性和效率的提升,但其开放性和基于云的特性也带来了一系列安全威胁。本文将探讨SD-WAN组网面临的安全挑战,并提供一些有…