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.rhkb.cn/news/298046.html

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

相关文章

C++利用键值对计算某一个数对应的最值及其索引位置

目录 一、算法概述二、代码实现1、计算最值2、计算最值及其索引 三、结果展示 本文由CSDN点云侠原创,原文链接。如果你不是在点云侠的博客中看到该文章,那么此处便是不要脸的爬虫与GPT。 一、算法概述 类似下图所示,计算第一列中1或2对应的最…

C#学生信息管理系统

一、引言 学生信息管理系统是现代学校管理的重要组成部分,它能够有效地管理学生的基本信息、课程信息、成绩信息等,提高学校管理的效率和质量。本文将介绍如何使用SQL Server数据库和C#语言在.NET平台上开发一个学生信息管理系统的课程设计项目。 二、项…

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

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

C++之类

目录 一:面向过程和面向对象的初步认识 二:类的引入 三:类的定义 3.1类的两种定义方式: 3.2成员变量命名的建议 四:类的访问限定符及封装 4.1类的访问限定符 4.2封装 一:面向过程和面向对象的初步认…

C#项目引用解决方案中其他项目dll时,出现黄色感叹号的解决方案

问题引入 今天拿着老师傅的老项目,需要做通讯调试,说测试一下,便添加了一个项目A来编写结构体,然后在窗体程序项目B中引用A,发现B一引用A,在B项目的引用下面A就多了个黄色感叹号,一编译B项目&am…

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

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

PyTorch深度学习——张量及其运算

深度学习框架的张量 张量的运算是深度学习的核心,如一张图片可以看作是四维的张量,一个迷你批次的文本可以看作是二维张量,基本上所有的深度学习模型都可以表示为张量的操作,梯度、反向传播算法也可以表示为张量和张量的运算 张…

scoped原理及使用

一、什么是scoped,为什么要用 在vue文件中的style标签上,有一个特殊的属性:scoped。 当一个style标签拥有scoped属性时,它的CSS样式就只能作用于当前的组件,通过该属性,可以使得组件之间的样式不互相污染。…

LLM大模型可视化-以nano-gpt为例

内容整理自:LLM 可视化 --- LLM Visualization (bbycroft.net)https://bbycroft.net/llm Introduction 介绍 Welcome to the walkthrough of the GPT large language model! Here well explore the model nano-gpt, with a mere 85,000 parameters. 欢迎来到 GPT 大…

深入浅出 -- 系统架构之分布式CAP理论和BASE理论

科技进步离不开理论支撑,而当下大行其道的分布式架构,透过繁荣昌盛表象,底层同样离不开诸多分布式理论撑持。当然,相信诸位在学习分布式相关技术时,必然学到过两个分布式领域中的基础理论,即:CA…

9.set容器的使用

文章目录 set容器1.构造和赋值代码工程运行结果 2.大小和交换代码工程运行结果 4.插入和删除代码工程运行结果 5.查找和统计工程代码运行结果 6.multset代码工程运行结果 7.指定排序规则代码工程运行结果 8.自定义数据类型排序代码工程运行结果 set容器 所有元素都会在插入时&a…

理解Three.js的相机

大家都知道我们生活中的相机,可以留下美好瞬间。那Three.js的相机是什么呢?Three.js创建的场景是三维的,而我们使用的显示器显然是二维的,相机就是抽象的定义了三维空间到二维显示器的投影方式。Three.js常见的相机有两类&#xf…

Stable diffusion 加载扩展列表报错解决方法

项目场景: 在使用Stable diffusion webui时,使用扩展列表出现错误 问题描述 点击loadfrom后,出现加载扩展列表报错 原因分析: 下载的扩展的时候,都是github 的url,需要科学上网,如果不能科学…

C语言动态内存空间分配

1. 前言 在讲内存分配前,咱来聊一下为什么会有内存分配这个概念呢,大家都知道C语言当中是有着许多的数据类型,使用这些数据类型就会在内存上开辟其相对应的空间,那既然会开辟相应的空间,为什么还会有内存分配呢&#x…

如何利用FLUENT计算流体力学方法解决大气与环境领域流动问题

ANSYS FLUENT是目前全球领先的商用CFD 软件,市场占有率达70%左右,是工程师和研究者不可多得的有力工具。由于采用了多种求解方法和多重网格加速收敛技术,因而FLUENT能达到最佳的收敛速度和求解精度。灵活的非结构化网格和基于解的自适应网格技…

Pycharm安装request的时候出现警告“由于目标计算机积极拒绝,无法连接”,然后出现报错无法安装

Pycharm安装request的时候出现警告“由于目标计算机积极拒绝,无法连接”,然后出现报错无法安装 一、报错二、解决办法 一、报错 二、解决办法 1、点击WinR 2、输入 regedit、进入注册表 3、在搜索框处输入:HKEY_CURRENT_USER\Software\Mic…

HTML基础知识详解(上)(如何想知道html的全部基础知识点,那么只看这一篇就足够了!)

前言:在学习前端基础时,必不可少的就是三大件(html、css、javascript ),而HTML(超文本标记语言——HyperText Markup Language)是构成 Web 世界的一砖一瓦,它定义了网页内容的含义和…

57 npm run build 和 npm run serve 的差异

前言 npm run serve 和 npm run build 的差异 这里主要是从 vue-cli 的流程 来看一下 我们经常用到的这两个命令, 他到传递给 webpack 打包的时候, 的一个具体的差异, 大致是配置了那些东西? 经过了那些流程 ? vue-cli 的 vue-plugin 的加载 内置的 plugin 列表如下, 依次…

Python云计算技术库之libcloud使用详解

概要 随着云计算技术的发展,越来越多的应用和服务迁移到了云端。然而,不同云服务商的API和接口千差万别,给开发者带来了不小的挑战。Python的libcloud库应运而生,它提供了一个统一的接口,让开发者可以轻松地管理不同云服务商的资源。本文将深入探讨libcloud库的特性、安装…

keycloak - 鉴权VUE

目录 一、前言 1、背景 2、实验版本 二、开始干活 1、keycloak配置 a、创建领域(realms) b、创建客户端 c、创建用户、角色 2、vue代码 a、依赖 b、main.js 三、未解决的问题 目录 一、前言 1、背景 2、实验版本 二、开始干活 1、keycloak配置 a、创建领域(r…