C++之函数提高(HM)

news2025/3/10 5:59:04

目录

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.coloradmin.cn/o/1569610.html

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

相关文章

适用于车载设备无钥匙进入系统汽车用晶振FA-238A

汽车用晶振FA-238A是一款适用于车载设备无钥匙进入系统的耐高温晶振。汽车用晶振FA-238A是爱普生推出一的款MHz表贴式晶体单元,具有很好的预率性能,符合AEC-0200标准,其封装尺寸仅为3.2x2.5x0.7mm,工作温度范围在-40℃~125℃之间&…

Linux云计算之网络基础9——园区网络架构项目

要求构建大型园区网络架构,方案如下: 园区A 园区c 公司B 要求: 1、A公司园区网络 一台汇聚层三层交换机,两台接入层二层交换机。 出口有一台路由器。 2、A园区有五台服务器。 分别为两台 WEB 服务器,…

Spring Boot Mockito (三)

Spring Boot Mockito (三) 这篇文章主要是讲解Spring boot 与 Mockito 集成测试。 前期项目配置及依赖可以查看 Spring Boot Mockito (二) - DataJpaTest Spring Boot Mockito (一) - WebMvcTest Tag("Integration") SpringBootTest // TestMethodOrder(MethodOr…

分布式系统架构中的相关概念

1.1、衡量网站的性能指标 响应时间:指执行一个请求从开始到最后收到响应数据所花费的总体时间。并发数:指系统同时能处理的请求数量。 并发连接数:指的是客户端向服务器发起请求,并建立了TCP连接。每秒钟服务器连接的总TCP数量请…

MySQL 主从复制架构搭建及其原理

前言 系统的性能瓶颈一般出现在数据库上,以 mysql 为例,如果存在高并发的写请求,势必会有锁表,锁数据行的情况发生,这时候如果有读请求刚好访问到被锁的数据,那么读请求会阻塞,直到写请求处理完…

ctypes 封装c语言

一&#xff0c;python与C类型对应关系 最左边一列的ctypes type&#xff0c;以替代C库中的各种类型。 二&#xff0c;不带参数的调用 1&#xff0c;target.c #include <stdio.h>void hello_world(){printf("hello downey!!\r\n"); } 2&#xff0c;执行命令…

CKA 基础操作教程(二)

Kubernetes Deployment 理论学习 Kubernetes Deployment &#xff08;部署&#xff09;是一种 Kubernetes 资源对象&#xff0c;用于定义和管理容器化应用程序的部署和更新。Deployment 提供了一种声明性的方式来定义应用程序的期望状态&#xff0c;并负责确保所需数量的 Pod…

【简单讲解下Tauri】

&#x1f308;个人主页:程序员不想敲代码啊 &#x1f3c6;CSDN优质创作者&#xff0c;CSDN实力新星&#xff0c;CSDN博客专家 &#x1f44d;点赞⭐评论⭐收藏 &#x1f91d;希望本文对您有所裨益&#xff0c;如有不足之处&#xff0c;欢迎在评论区提出指正&#xff0c;让我们共…

Qt | Qt 的重要文件简介(推荐)

一、项目文件(pro 文件)及其语法 1、项目文件(pro 文件)的作用是列举项目中的源文件, 2、pro 文件的语法形式为:“变量 操作符 值”,比如 QT += widgets,多个值之间使用空格分开。 3、pro 文件的注释:从“#”开始,直至本行结束。 4、pro 文件的操作符见下表 5、pro 文…

Filter Listener Interceptor

文章目录 第一章 Filter1. 目标2. 内容讲解2.1 Filter的概念2.2 Filter的作用2.3 Filter的入门案例2.3.1 案例目标2.3.2 代码实现2.3.2.1 创建ServletDemo012.3.2.2 创建EncodingFilter 2.4 Filter的生命周期2.4.1 回顾Servlet生命周期2.4.1.1 Servlet的创建时机2.4.1.2 Servle…

JSON的定义和基本使用

1、JSON的特点: JSON是一种轻量级的数据交换格式&#xff0c;是由字符串化的键值对构成。基于网络的前后端通信&#xff0c;数据在服务端和客户端之间进行传输&#xff0c;采用的就是JSON的格式来进行交互。JSON采用完全独立于语言的文本格式&#xff0c;JSON的数据格式完全独…

【VSCode】修改插件地址

不想放在原始C盘下面C:\Users\{用户}\.vscode\extensions为了后续存储空间考虑&#xff0c;想通过添加环境变量创建名为VSCODE_EXTENSIONS的环境变量&#xff0c;内容指向vs Code扩展所在目录即可 直接配置环境变量&#xff0c;不要在有空格的文件夹下面 变量名称&#xff1a;…

C语言要点细细梳理——番外:运算符优先级

C语言中的运算符优先级决定了在没有括号的情况下&#xff0c;表达式中的各个部分应如何求值。这个优先级是固定的&#xff0c;并且遵循一定的规则。当运算符的优先级相同时&#xff0c;运算的方向&#xff08;从左到右或从右到左&#xff09;则称为运算符的结合性。 下面是一个…

中间件漏洞!!!

上次好像记得讲过了框架漏洞&#xff0c;&#xff08;weblogic不是&#xff09;那么&#xff0c;今天我们就来讲一些中间件的漏洞 1.Apache解析漏洞 众所周知&#xff0c;Apache是一个非常出名的中间件&#xff0c;本来呢&#xff0c;他是不存在漏洞的&#xff0c;但是如果用…

OpenAI推出VoiceEngine语音引擎技术:让声音更逼真,更富情感

继openAI GPT3.5免登录后&#xff0c;OpenAI最近推出了一款名为VoiceEngine的语音引擎技术&#xff0c;这技术能通过简单的文本输入和15秒的音频样本&#xff0c;就能生成跟原始说话者声音一模一样的语音&#xff0c;不仅逼真&#xff0c;还充满了情感。 这VoiceEngine技术&am…

三、keepalived双机热备

一、双机热备概述 1、为什么需要双机热备&#xff1a; 双机热备主要为了解决服务器的单点故障问题。 在主机 MASTER 宕机之后可以马上切换到备选服务器 BACKUP。 服务器规划&#xff1a; 2、克隆产生web01服务器&#xff1a; (1) 基于LNMP克隆生成Web01服务器&#xff1a; (…

[计算机知识] TCP/IP网络模型、MySQL的结构

TCP/IP网络模型 应用层 给用户提供应用功能&#xff0c;如HTTP, DNS 应用层处于用户态&#xff0c;传输层及以下处于内核态 传输层 给应用层提供网络支持&#xff0c;如TCP, UDP TCP提供稳定、面向连接的网络传输协议 应用层的数据可能会太大&#xff0c;就需要进行拆分…

深入浅出 -- 系统架构之分布式架构

​​​​​​分布式架构&#xff1a; 根据业务功能对系统做拆分&#xff0c;每个业务功能模块作为独立项目开发&#xff0c;称为一个服务。 当垂直应用越来越多时&#xff0c;应用之间的交互不可避免&#xff0c;可将共用的基础服务或核心模块抽取出来作为独立服务&#xff0c…

与机器对话:ChatGPT 和 AI 语言模型的奇妙故事

原文&#xff1a;Talking to Machines: The Fascinating Story of ChatGPT and AI Language Models 译者&#xff1a;飞龙 协议&#xff1a;CC BY-NC-SA 4.0 从 ELIZA 到 ChatGPT&#xff1a;会话式人工智能的简史 会话式人工智能是人工智能&#xff08;AI&#xff09;的一个分…

【C++ STL迭代器】iterator

文章目录 【 1. 迭代器的属性 】【 2. 不同容器支持的迭代器 】【 3. 迭代器的定义方式 】【 4. 实例 】4.1 定义方式&#xff1a;正向迭代器和反向迭代器4.2 迭代器属性&#xff1a;前向迭代、双向迭代、随机迭代4.2 迭代器的遍历方法4.3 auto关键字 自动指定迭代器定义类型 背…