2023/9/7 -- C++/QT

作业

1> 思维导图

2> 封装一个结构体,结构体中包含一个私有数组,用来存放学生的成绩,包含一个私有变量,用来记录学生个数,

提供一个公有成员函数,void setNum(int num)用于设置学生个数

提供一个公有成员函数:void input(),用来对所有学生的成绩进行输入工作

提供一个公有成员函数:void sort(),用来实现对存储的学生成绩进行降序排序

提供一个公有的成员函数:void show(),用于将所有学生的成绩展示出来

在主程序中,完成相关函数的调用

#include <iostream>using namespace std;struct Stu{
private:int score_array[1024];int count;
public:void setNum(int num){count = num;}void input(){int score;for(int i = 0;i < count;i++){cout<<"请输入学生成绩:";cin>>score;score_array[i] = score;}}void sort(){int temp;for(int i = 0;i < count-1;i++){for(int j = 0;j < count-1-i;j++){if(score_array[j]<score_array[j+1]){temp = score_array[j];score_array[j] = score_array[j+1];score_array[j+1] = temp;}}}cout<<"排序成功"<<endl;}void show(){for(int i = 0;i < count;i++){cout<<score_array[i]<<' ';}cout<<endl;}
};int main()
{Stu s1;s1.setNum(8);s1.input();s1.show();s1.sort();s1.show();return 0;
}

效果图: 

一、引用 

1.1 &的用途

1、&后面跟变量名,表明取得该变量的地址

2、作为双目运算符,一个&表示按位与运算

3、作为双目运算符,两个&&表示逻辑与运算

4、定义引用时, 表明身份的象征,一个&表明是左值引用,两个&&表明是右值引用

5、对于一个&使用时,如果左侧有数据类型,表明正在定义引用,如果左侧没有数据类型,表明是取地址运算符

1.2 指针与引用的区别

1> 指针记录的是变量的地址,而引用变量本身

2> 定义引用时必须初始化,而定义指针不是必须初始化

3> 指针需要分配8字节的内存空间,而引用与目标是同一内存空间,无需额外分配

4> 指针可以有多级指针,但是引用只有一级引用

5> 指针后期可以更改指向,而引用一旦绑定后期就不能进行更改目标了

6> const修饰指针时,有修饰指向和值,而const修饰引用时,只有修饰值

7> 指针使用时,需要使用取值运算符进行解引用,而引用使用时跟目标的使用方式一致

8> 没有引用数组,但是有数组引用

二、C++中的动态内存分配和回收

2.1 new\delete与malloc\free的区别

1> new申请空间时,可以给堆区空间进行初始化,而malloc申请时不能进行初始化

2> new\delete是关键字,而malloc\free是库函数

3> new申请空间时以数据类型为单位,而malloc申请空间时以字节为单位

4> new申请的空间返回的结果申请类型的指针,而malloc申请空间时返回void*类型,需要进行强转后使用

5> new申请空间时会调用构造函数,malloc不会(后期讲)

6> delete释放空间时,会调用析构函数,free不会(后期讲)

三、C++对C的函数部分的扩充

3.1 函数重载

1> 在C语言中,同一作用域下不允许定义多个同名的函数,对于功能类似,但是只有数据类型不同的函数,也要定义多个不同名的函数,调用起来比较麻烦

2> C++中支持函数重载,即:在同一作用域下,可以定义多个同名的函数,但是要求参数列表必须不同

3> 所谓函数重载,是静态多态的一种,能够做到“一名多用”

4> 函数重载的要求:

  1. 函数名相同
  2. 形参列表必须不同:可以是参数个数不同、参数类型不同
  3. 作用域也要相同
  4. 跟返回值没有关系

5> 调用:当调用函数时,系统会根据传递的实参类型,自动匹配相应的重载函数

3.2 函数默认参数

1> C语言中定义函数时,不允许设置默认参数,函数形参的值,必须全部由实参进行传递后使用,实参的个数必须跟形参个数保持一致

2> C++定义函数时,允许给定默认参数,即:如果该参数有实参进行传递,则使用实参传递进来的值进行使用,如果实参没有对该参数进行传递,则使用默认参数

3> 默认参数的数组原则:靠右原则,只有右侧的形形参设置了默认参数后,左侧的形参才能设置默认参数,否则报错,原因是,函数实参向形参传递时是靠左原则

4> 当函数默认参数跟函数重载同时出现时,可以定义重载参数个数小于带默认参数的函数,但是,调用时会出现混乱情况

5> 当主调函数写在被调函数定义之前时,需要对对被调函数进行函数声明,函数的默认参数,写在函数声明部分,函数定义部分就不需要加默认参数了

3.3 哑元

1> 在C++中的函数中,允许将函数参数设置成哑元,即某个形参只有类型名,没有形参名,在函数体内也不使用该形参

2> 作用:哑元参数只起到占位作用,没有实质性的用途

3> 使用场景

1、在进行程序代码优化时,可能某个函数的某几个参数被优化掉了,但是,该函数已经在程序中调用多次,那么,此时就可以将这些参数设置成哑元,只起到占位作用,函数体内无需使用

2、在运算符重载时,进行区分自增自减运算符的前置和后置时,必须使用哑元完成(后期讲)

3.4 内联函数(inline)

1> C++中,允许定义内联函数,内联函数会建议编译器在编译程序的时候,将内联函数在调用处进行展开,运行时直接执行函数体内容,提供函数调用效率

2> 使用要求:要求函数体调用频繁,并且函数体内容较小,递归函数不允许定义成内联函数

3> 内联函数定义格式:在定义函数前加关键字inline即可

4> 有参宏和内联函数的区别

  1. 本质的区别:有参宏是宏替换,内联函数是函数调用
  2. 替换时机:有参宏替换发生在预处理阶段,内联函数替换发生在编译阶段

四、C++对结构体的扩充

1> C语言中的结构体,仅仅只是属性(变量)的聚合体,不允许在结构体中定义函数,如果想要定义函数,需要使用函数指针,完成函数回调

2> C++中的结构体内可以包罗万象,既可以封装属性、也可以封装函数、还可以封装一个结构体

3> C++中的结构体在定义属性时,可以直接给定初始值,而C语言中不行

4> C++中的结构体在定义结构体变量时,可以不用加关键字struct,而C语言中不可以

5> C++中的结构体可以有访问权限控制,C语言中的结构体没有访问权限控制

6> C++中的结构体可以被继承,C语言中的结构体不可以

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

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

相关文章

Python足球训练打卡系统SpringBoot足球场地预约系统源码 调试 lw

&#x1f495;&#x1f495;作者&#xff1a;计算机源码社 &#x1f495;&#x1f495;个人简介&#xff1a;本人七年开发经验&#xff0c;擅长Java、Python、PHP、.NET、微信小程序、爬虫、大数据等&#xff0c;大家有这一块的问题可以一起交流&#xff01; &#x1f495;&…

MySQL的故事——MySQL架构与历史

MySQL架构与历史 文章目录 MySQL架构与历史一、MySQL逻辑架构二、并发控制三、事务四、多版本并发控制(MVCC) 一、MySQL逻辑架构 第一层&#xff1a;连接处理、授权认证、安全等等 第二层&#xff1a;查询解析、分析、优化、缓存以及所有的内置函数。包含跨存储引擎的功能&…

双系统时间问题、虚拟机扩展空间问题

文献阅读计划&#xff1a; 首先要用ChatGPT查文献&#xff0c;用关键字查询&#xff0c;然后去搜索 add cyun 9.8 但是我发现好难搜啊&#xff0c;或者说相关的关键词搜不出来东西啊。不过师兄倒是搜的挺多的&#xff0c;这一点要再去好好学习一下 双系统时间问题&#xff1a…

SpringBoot整合Swagger3

前言 swagger是啥&#xff0c;是干什么的&#xff0c;有什么用&#xff0c;我想在这里我就不用介绍了&#xff0c;下面直接代码演示。 添加依赖 <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache.org/POM/4.0.0…

Android 大图显示优化方案-加载Gif 自定义解码器

基于Glide做了图片显示的优化&#xff0c;尤其是加载Gif图的优化&#xff0c;原生Glide加载Gif图性能较低。在原生基础上做了自定义解码器的优化&#xff0c;提升Glide性能 Glide加载大图和Gif 尤其是列表存在gif时&#xff0c;会有明显卡顿&#xff0c;cpu和内存占用较高&…

【8章】Spark编程基础(Python版)

课程资源&#xff1a;&#xff08;林子雨&#xff09;Spark编程基础(Python版)_哔哩哔哩_bilibili 第8章 Spark MLlib&#xff08;6节&#xff09; 机器学习算法库 &#xff08;一&#xff09;MLlib简介 1、机器学习 机器学习可以看做是一门人工智能的科学&#xff0c;该领…

07-Spring Cloud

1、如何设计一个注册中心&#xff1f; 高可用&#xff1a;通过集群的方式 高并发&#xff1a;减少响应时间、提高吞吐量 并发用户数等&#xff0c;通过增加服务器性能、 扩展服务实例的方式 高性能&#xff1a;程序处理速度 考虑 数据存储结构、通信机制、集群同步。 集群…

知识图谱项目实践

目录 步骤 SpaCy Textacy——Text Analysis for Cybersecurity Networkx Dateparser 导入库 写出页面的名称 ​编辑 自然语言处理 词性标注 可能标记的完整列表 依存句法分析&#xff08;Dependency Parsing&#xff0c;DEP&#xff09; 可能的标签完整列表 实例理…

多线程快速入门

线程与进程区别 每个正在系统上运行的程序都是一个进程。每个进程包含一到多个线程。线程是一组指令的集合&#xff0c;或者是程序的特殊段&#xff0c;它可以在程序里独立执行。也可以把它理解为代码运行的上下文。所以线程基本上是轻量级的进程&#xff0c;它负责在单个程序里…

【漏洞库】Fastjson_1.2.47_rce

文章目录 漏洞描述漏洞编号漏洞评级影响版本漏洞复现- 利用工具- 漏洞环境- 漏洞扫描- 漏洞验证- 深度利用- GetShell- EXP 编写 漏洞挖掘- 寻找入口点- 指纹信息 修复建议- 漏洞修复 漏洞原理 漏洞描述 Fastjson是阿里巴巴公司开源的一款json解析器&#xff0c;其性能优越&am…

2023国赛C题解题思路代码及图表:蔬菜类商品的自动定价与补货决策

2023国赛C题&#xff1a;蔬菜类商品的自动定价与补货决策 C题表面上看上去似乎很简单&#xff0c;实际上23题非常的难&#xff0c;编程难度非常的大&#xff0c;第二题它是一个典型的动态规划加仿真题目&#xff0c;我们首先要计算出销量与销售价格&#xff0c;批发价格之间的…

Jenkins发送邮件(简洁版)

需求背景 Jenkins构建结束需要通知客户下载项目WAR包&#xff0c;太麻烦且构建时间久的话可能忘记通知客户&#xff0c;想要构建结束自动邮件通知客户。 实现方法 # 安装mailx command -v mailx &> /dev/null || sudo yum -y install mailx# 发送邮件 recipient"ch…