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

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

相关文章

✔ ★算法基础笔记(Acwing)(一)—— 基础算法(20道题)【java版本】

基础算法 一、快速排序1. 快速排序例题2. 第k个数( 快速选择 ) ✔ ✔1.31★快排二刷总结( 4点 ) 二、归并排序1. 归并排序模板题 ✔ ✔1.31★二刷总结 ★2. 逆序对的数量 ✔ ✔1.31★二刷总结 三、二分1. 数的范围 ✔1.31★二刷总结(mid > x 则是 输出最左边一个)第一个大于…

Oracle数据库开发者工具

和开发者相关的数据库特性&#xff0c;功能与工具列举如下&#xff0c;但不限于以下。因为Oracle数据库中的许多功能其实都间接的和开发者发生关系&#xff0c;如Oracle高级安全选件中的透明数据加密&#xff0c;数据编辑。Oracle Spatial and Graph&#xff08;地理空间与图&a…

latex修改公式的默认编号

文章目录 问题描述省流出错演示没有载入amsmath包载入amsmath包 总结 问题描述 有时想自己定义公式的编号&#xff0c;不想用默认的编号(1) (2)…&#xff0c;我们应该怎么做呢&#xff1f; 只需看本文一分钟就能解决。 省流 开头载入amsmath包&#xff0c;然后在公式后面加…

算法——组合程序算法解析

组合就是从m个元素的数组中求n个元素的所有组合&#xff0c;代码如下&#xff1a; #include <iostream> #include <vector> using namespace std; // 递归求解组合 void combinations(vector<int>& nums, vector<int>& combination, int star…

Java死锁的原因及解决方法

要想知道死锁出现的原因和解决方法&#xff0c;首先得知道什么是死锁&#xff0c;死锁是两个或两个以上的运算单元&#xff08;进程、线程或协程&#xff09;&#xff0c;互相持有对方所需的资源&#xff0c;导致它们都无法向前推进&#xff0c;从而导致永久阻塞的问题。从字面…

【数据库事务日志碎片原理分析与方案】-分析篇

前言:说都数据库的事务日志&#xff0c;可以说我们是再熟悉不过的了。一般而言&#xff0c;我们都没有必 要去关心事务日志中的虚拟日志文件的个数。这里提到的“虚拟日志文件”的概念&#xff0c;我们 后面会进行专门的讲述。很多的时候&#xff0c;我们在建立数据库的时候&am…

element树形筛选

<el-inputv-model"projectName"placeholder"请输入名称"clearablemaxlength"10"clear"clearTree" /> <el-divider /> <el-treeref"tree"class"filter-tree":data"treeList":props"…

VSCode远程调试python

配置 1&#xff0c;进入到服务器相应的docker和conda环境中 2&#xff0c;安装debugpy pip install debugpy 3&#xff0c;VSCode 中点击调试按钮 4&#xff0c;按照提示&#xff0c;安装扩展 5&#xff0c;配置launch.json 最终的文件launch.json&#xff1a; {// 使用…

跟着视频学习java,发现swagger打不开?怎么解决

前因 现在到处都在卷java&#xff0c;不会java的前端不是好前端。 这不&#xff0c;周围有前端同学开始学java了。 昨天他突然找我问说引入依赖&#xff0c;配置之后swagger打不开了。 分析过程 1、 查看他的swagger版本&#xff0c;让他试了对应路径/swagger-ui/index.h…

爬虫数据清洗可视化实战-就业形势分析

基于采集和分析招聘网站的数据的芜湖就业形势的调查研究 一、引言 本报告旨在分析基于大数据的当地就业形势&#xff0c;并提供有关薪资、工作地点、经验要求、学历要求、公司行业、公司福利以及公司类型及规模的详细信息。该分析是通过网络爬虫技术对招聘网站的数据进行采集…

基于Simulink的用于电力系统动态分析

&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑清晰&#xff0c;为了方便读者。 ⛳️座右铭&a…

【Unity3D赛车游戏优化篇】【八】汽车实现镜头的流畅跟随,以及不同角度的切换

&#x1f468;‍&#x1f4bb;个人主页&#xff1a;元宇宙-秩沅 &#x1f468;‍&#x1f4bb; hallo 欢迎 点赞&#x1f44d; 收藏⭐ 留言&#x1f4dd; 加关注✅! &#x1f468;‍&#x1f4bb; 本文由 秩沅 原创 &#x1f468;‍&#x1f4bb; 收录于专栏&#xff1a;Uni…

华为mate60 上线 媒介盒子多家媒体报道

为什么你的品牌营销不见效&#xff1f;如何能推动品牌破圈&#xff1f;让媒介盒子给你一些启发。本期盒子要跟大家分享地新机上市&#xff0c;数码科技行业企业该如何做线上宣传。 HUAWEI Mate 60系列8月29日官宣发布&#xff0c;出色的拍照功能、强大的性能表现和持久的续航能…

【C++二叉树】进阶OJ题

【C二叉树】进阶OJ题 目录 【C二叉树】进阶OJ题1.二叉树的层序遍历II示例代码解题思路 2.二叉搜索树与双向链表示例代码解题思路 3.从前序与中序遍历序列构造二叉树示例代码解题思路 4.从中序与后序遍历序列构造二叉树示例代码解题思路 5.二叉树的前序遍历&#xff08;非递归迭…

科技云报道:AI+云计算共生共长,能否解锁下一个高增长空间?

科技云报道原创。 在过去近一年的时间里&#xff0c;AI大模型从最初的框架构建&#xff0c;逐步走到落地阶段。 然而&#xff0c;随着AI大模型深入到千行百业中&#xff0c;市场开始意识到通用大模型虽然功能强大&#xff0c;但似乎并不能完全满足不同企业的个性化需求。 大…

【优选算法】—— 前缀和算法

前言&#xff1a; 本期&#xff0c;我将要带大家学习的是有关前缀和算法的学习&#xff01;&#xff01;&#xff01; 目录 &#xff08;一&#xff09;什么是前缀和算法 &#xff08;二&#xff09;题目讲解 1、【模板】前缀和 2、【模板】二维前缀和 3、 和可被K整除的…

动态内存申请

动态内存申请 静态分配 1、 在程序编译或运行过程中&#xff0c;按事先规定大小分配内存空间的分配方式。int a [10] 2、 必须事先知道所需空间的大小。 3、 分配在栈区或全局变量区&#xff0c;一般以数组的形式。 4、 按计划分配 动态分配 1、在程序运行过程中&#xff0c…

python读取.txt文件中某些关键字后面的内容 并根据该数据画图

感谢一下悦姐帮忙 import re#先把文件读进来&#xff0c;用read读入的是字符串&#xff0c;readlines是list with open(resok.txt) as f:txt f.read()dataset r5low:.*|5mix:.*|5normal:.* para rMAE: (.{6})#意思是MAE&#xff1a; 后面的六个东西 row_data re.findall(d…

【Arduino27】DHT11温湿度传感器模拟值实验

硬件准备 DHT11温湿度&#xff1a;1个 面包板&#xff1a;1个 杜邦线&#xff1a;3根 硬件连线 VDD引脚接 5V 电源 DATE引脚接 4号 接口 GND引脚接 GND 接口 软件程序 #include<DHT.h>#define DHT11_pin 4 //温湿度传感器引脚DHT dht(DHT11_pin,DHT11);float tem…

QuantLib学习笔记——看看几何布朗运动有没有股票走势的感觉

⭐️ 小鹿在乱撞 小伙伴们肯定看过股票的走势&#xff0c;真是上蹿下跳啊&#xff0c;最近小编学了一丢丢关于随机过程和QuantLib的知识&#xff0c;想利用随机过程生成一个类似股票价格走势的图&#xff0c;安排&#xff01;&#xff01;&#xff01; ⭐️ 随机过程 随机过程…