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上面去,参数要使用引用,这个就是拷贝构造函数的格式。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

OAuth 2.0 的四种方式

RFC 6749 OAuth 2.0 的标准是 RFC 6749 文件。该文件先解释了 OAuth 是什么。 OAuth 引入了一个授权层,用来分离两种不同的角色:客户端和资源所有者。…资源所有者同意以后,资源服务器可以向客户端颁发令牌。客户端通过令牌,去请…

爬虫 新闻网站 并存储到CSV文件 以红网为例 V1.0

爬虫:红网网站, 获取当月指定关键词新闻,并存储到CSV文件 V1.0 目标网站:红网 爬取目的:为了获取某一地区更全面的在红网已发布的宣传新闻稿,同时也让自己的工作更便捷 环境:Pycharm2021&#…

Cisco交换机安全配置

Cisco交换机安全配置 前提 我们以下命令一般都要先进入Config模式 S1> enable S1# conf t S1(config)#端口安全保护 禁用未使用的端口 以关闭fa0/1到fa0/24的端口为例 S1(config)# interface range fa0/1-24 S1(config-if-range)# shutdown缓解MAC地址表攻击 防止CAM…

关联规则(理论及实例)

目录 一、啤酒和尿布的故事 二、理论 三、实例 1. 自定义数据集 2. 数据需转换成one-hot编码 3.电影题材关联分析 一、啤酒和尿布的故事 在美国,一些年轻的父亲下班后经常要到超市去购买婴儿尿布,超市因此发现一个规律,在购买婴儿尿布的…

微信小程序上传到gitee

共三步 1、新建gitee仓库 点号,新建仓库,填入仓库信息新建即可 2、修改版本管理参数 微信开发者工具中点开版本管理,未初始化,需要先点初始化 接下来将设置中的通用、网络认证、远程3个部分的参数填写好 通用:核对…

idea的后端环境配置

首先,在你刚打开idea时红色箭头所指的是你进行配置的地方,接下来我把具体步骤说一下 1,直接点击箭头所指的地方就会出现如图界面,然后点击Tomcat server,使其展开点击第一个 第二步取消勾选,第三步选择bin的上一级然后…

51单片机入门_江协科技_21~22_OB记录的笔记

21. LED点阵屏 21.1. LED点阵屏介绍 •LED点阵屏由若干个独立的LED组成,LED以矩阵的形式排列,以灯珠亮灭来显示文字、图片、视频等。LED点阵屏广泛应用于各种公共场合,如汽车报站器、广告屏以及公告牌等 •LED点阵屏分类 按颜色:单…

基于SpringBoot+Vue实现前后端分离的房屋租赁系统

一、🚀选题背景介绍 📚推荐理由: 计进行房屋租赁工作的管理,不仅能够保证各项信息准确无误、快速输出,同时计算机具有手工管理所无法比拟的优点,例如:检索迅速、查找方便、可靠性高、存储量大、保密性好、寿…

2024整理一些前端面试题库一

以下是一些2024年前端面试题及其答案: HTML、XML、XHTML之间的区别是什么? HTML是一种标记语言,用于创建网页,定义页面的结构和内容,如标题、段落、表格、链接、图片等。 XML(可扩展标记语言)…

screen服务器后台使用

screen服务器后台使用 想用远程服务器跑程序,想让自己的电脑关机后继续运行,可以使用screen 1.查看已有screen screen -ls2.删除screen screen -X -S 2758463 quit3.新建screen screen -S elsevier查看,显示创建成功: 4.切…

免费的 AIGC工具( 7个 )

人工智能技术有好的一方面,又不好的地方,要区别对待,吸取精华,去其糟粕。目前市场上有很多AI大模型,可以支持聊天,写文稿,创作等,部分可以生成图片,以下是7个很不错的免费…

2024/4/5 AT24C02 总线(I²C总线)

存储器的介绍: 一、易失性存储器RAM:存储速度快,掉电丢失 SRAM(静态RAM):极快DRAM(动态RAM):需要配一个扫描电路,进行“补电”(动态刷新&#x…

02 _ 分布式系统的指标:啥是分布式的三围

你好,我是聂鹏程。 在上一篇文章中,通过对分布式发展历程的学习,我们对分布式技术有了一个整体印象。接下来,我们就再来看看可以用哪些指标去具体地衡量一个分布式系统。如果你已经对分布式系统的指标了解得很清楚了,…

刷题之Leetcode34题(超级详细)

34. 在排序数组中查找元素的第一个和最后一个位置 力扣链接(opens new window)https://leetcode.cn/problems/find-first-and-last-position-of-element-in-sorted-array/ 给定一个按照升序排列的整数数组 nums,和一个目标值 target。找出给定目标值在数组中的开始…

Jenkins 安装部署

1、安装下载 官网地址:Jenkins 下载 war 包 1、前置环境 JDK 环境(根据 Jenkins 版本不同,需要的 JDK 版本不同,目前需要 JDK11 的版本来支持)Maven maven 官网下载压缩包 ,并将其传输到服务器&#xf…

【Python】免费的图片/图标网站

专栏文章索引:Python 有问题可私聊:QQ:3375119339 这里是我收集的几个免费的图片/图标网站: iconfont-阿里巴巴矢量图标库icon(.ico)INCONFINDER(.ico)

clickhouse MPPDB数据库--新特性使用示例

clickhouse 新特性: 从clickhouse 22.3至最新的版本24.3.2.23,clickhouse在快速发展中,每个版本都增加了一些新的特性,在数据写入、查询方面都有性能加速。 本文根据clickhouse blog中的clickhouse release blog中,学…

【C++入门】关键字、命名空间以及输入输出

💞💞 前言 hello hello~ ,这里是大耳朵土土垚~💖💖 ,欢迎大家点赞🥳🥳关注💥💥收藏🌹🌹🌹 💥个人主页&#x…

基于Python近红外光谱分析与机器学、深度学习方法融合技术应用

郁磊副教授,主要从事MATLAB 编程、机器学习与数据挖掘、数据可视化和软件开发、人工智能近红外光谱分析、生物医学系统建模与仿真,具有丰富的实战应用经验,主编《MATLAB智能算法30个案例分析》、《MATLAB神经网络43个案例分析》相关著作。已发…

6:算法基础--6.1:线性结构 ,6.2:查找算法

转上一节: http://t.csdnimg.cn/ql5Cdhttp://t.csdnimg.cn/ql5Cd 课程内容提要: 6:知识点考点详解 6.1:线性结构 通常分析时间复杂度的方法是从算法中选取-种对于所研究的问题来说是基本运算的操作,以 该操作重…