C++编程进阶

news/2024/4/30 10:11:55/文章来源:https://blog.csdn.net/m0_60027772/article/details/127973766

目录

new运算符

new关键字的使用案例

C++的引用

C++中引用案例 

引用的注意事项

引用做函数参数

引用做函数的返回值

前言:

具体案例

引用的本质

常量引用

常量引用原理

经典案例

函数的提高

函数的默认参数

注意:

具体案例

函数的占位参数

具体案例

函数的重载

函数重载满足的条件

函数重载的注意事项

引用作为重载的条件

函数重载碰到函数默认参数

new运算符

前言:C++中利用new操作符程序员可以在堆区手动开辟数据空间;程序员也可以手动释放空间,释放空间利用操作符delete

开辟空间语法:new 数据类型

返回值:该数据对应类型的指针

释放空间语法:delete 要释放的地址;

开辟数组语法:new 数据类型[数组长度]

返回值:对应开辟出数组空间的首地址(指针)

释放数组空间语法:delete[] 要释放的地址;

new关键字的使用案例

#include <iostream>
using namespace std;
int* func() {//在堆区创建空间int* p = new int(10);return p;
}
void testArr() {//在堆中创建长度为10的整形数组int* arr = new int[10];for (int i = 0; i < 10; i++) {//给10个元素赋值arr[i] = i + 100;}for (int i = 0; i < 10; i++) {cout << arr[i] << endl;}//释放数组空间地址delete[] arr;
}
void main() {testArr();int* p = func();cout << "a的值为:" << *p << endl;cout << "a的值为:" << *p << endl;//堆内释放地址delete p;//内存已经被释放,再次访问就是非法操作cout << "a的值为:" << *p << endl;
}

C++的引用

作用:给变量起别名

语法:数据类型 &别名=原名

C++中引用案例 

#include <iostream>
using namespace std;
void main() {//引用的基本语法int a = 10;int &b = a;b = 20;cout << "a的值为:" << a << endl;//20cout << "b的值为:" << b << endl;//20system("pause");
}

引用的注意事项

  • 引用必须要初始化(必须要告诉引用的是谁,如:int &b;是不正确的)
  • 引用一旦初始化后就不可以更改

理解:变量名本身就是自己所表示的值的一块内存空间,值的地址表示变量,因此,值与别名在某种意义上是等价的,所以引用必须要初始化,并且初始化后便不可更改

引用做函数参数

作用:函数传参时可以利用引用的技术让形参修饰实参

#include <iostream>
using namespace std;
void swap(int &a,int &b) {int temp = a;a = b;b = temp;
}
void main() {int a = 10;int b = 20;swap(a, b);cout << "a的值为:" << a << "\tb的值为:" << b << endl;system("pause");
}

结果:由此观之,引用传递,那么形参的改变会影响实参

引用做函数的返回值

前言:

  • 引用是可以作为函数返回值存在的
  • 不要返回局部变量的引用
  • 引用的返回值类型:数据类型&
  • 返回值为引用类型的函数那么其调用可以作为左值

具体案例

#include <iostream>
using namespace std;
//以引用的形式返回a
int& change() {//全局区的变量astatic int a = 10;return a;
}
void main() {int &ref = change();//10cout << "ref的值为:" << ref << endl;cout << "ref的值为:" << ref << endl;system("pause");
}
#include <iostream>
using namespace std;
//以引用的形式返回a
int& change() {//全局区的变量astatic int a = 10;return a;
}
void main() {int &ref = change();//相当于将a的引用赋值为1000change() = 1000;//因为ref为a的引用所以也为1000cout << "ref的值为:" << ref << endl;system("pause");
}

结论:若函数返回值类型为引用类型,则其函数调用可以作为左值

引用的本质

本质:在C++内部实现是一个指针常量

结论:C++推荐使用引用技术,因为语法方便,引用的本质是指针常量,但是所有的指针操作编译器都帮助我们做了

常量引用

作用:常量引用主要用来修饰形参,防止误操作

常量引用原理

#include <iostream>
using namespace std;
void main() {//加上const后,编译器将代码改为:int temp=10; int& ref=temp;const int& ref = 10;//下面报错,加了const后引用的值不可更改//ref = 20;cout << "ref的值为:" << ref << endl;system("pause");
}

注意:加了const后,那么被引用的别名值不可被更改 

经典案例

#include <iostream>
using namespace std;
void showValue(const int& a) {//这里形参到的改变会影响实参,因此加const来防止误操作cout << "a的值为:" << a << endl;
}
void main() {int a = 100;showValue(a);system("pause");
}

函数的提高

函数的默认参数

前言:在C++中函数的形参列表中的形参是可以有默认值的

语法:
返回值类型 函数名(参数=默认值){函数体;
}

注意:

  • 若某个位置已经有了默认值,那么从这个位置往后,从左到右都必须有默认值
  • 若函数的声明有默认参数,那么函数的实现就不能有默认参数(函数的声明和函数的实现只能有1个有默认参数)
  • 调用函数传递的实参从左到右依次与形参一一匹配,其中传入的参数会覆盖掉对应位置的默认值

具体案例

#include <iostream>
using namespace std;
int add(int a, int b=20, int c=30) {return a+b+c;
}
void main() {int sum=add(10);cout << "sum等于:" << sum << endl;//60system("pause");
}

函数的占位参数

C++中函数的形参列表里可以有占位参数,用来做占位,调用函数时必须填补该位置

语法:
返回值类型 函数名(数据类型){函数体;
}

注意:占位参数也可以有默认值 

具体案例

#include <iostream>
using namespace std;
//占位参数
void func(int a,int) {cout << "占位参数实例!" << endl;
}
void main() {//占位参数函数的调用func(10, 20);system("pause");
}
#include <iostream>
using namespace std;
//占位参数的默认参数
void func(int a,int =10) {cout << "占位参数实例!" << endl;
}
void main() {//占位参数函数的调用func(10);system("pause");
}

函数的重载

含义:函数名相同,但参数列表不同,进而提高函数的复用性

函数重载满足的条件

  • 同一个作用域下
  • 函数名称相同
  • 函数参数类型不同或者参数个数不同,或者参数顺序不同

注意:函数的返回值不可以作为函数重载的条件的

#include <iostream>
using namespace std;
void func() {cout << "func的调用:" << endl;
}
void func(int a) {cout << "func(int a)的调用:"<<a<< endl;
}
void main() {func();func(10);system("pause");
}

函数重载的注意事项

引用作为重载的条件

#include <iostream>
using namespace std;
void func(int &a) {cout << "func(int &a)的调用:" << endl;
}
void func(const int &a) {cout << "func(const int &a)的调用:"<<a<< endl;
}
void main() {int a = 10;//调用第一个func(a);//调用第二个func(10);system("pause");
}

函数重载碰到函数默认参数

#include <iostream>
using namespace std;
void func(int a,int b=10) {cout << "func(int a,int b=10)的调用:" << endl;
}
void func(int a) {cout << "func(int a)的调用:"<< endl;
}
void main() {int a = 10;//若传一个参数的话会出现二义性func(10,20);system("pause");
}

注意:当函数重载碰到默认参数时,会出现二义性,报错,应尽量避免这种情况

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

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

相关文章

数据库:Centos7安装解压版mysql5.7图文教程,亲测成功

目录 1、卸载Centos7默认自带的mariadb数据库&#xff0c;避免冲突 2、下载解压版mysql并安装 3、配置mysql 4、mysql客户端访问 Centos7安装mysql5.7解压版完整教程避免踩坑&#xff0c;可以把数据目录和系统目录分开设置。 1、卸载Centos7默认自带的mariadb数据库&#xff0c…

net.sf.json.JSONObject 类的日常使用,非阿里巴巴的JSONObject,附上作者的jsonDemo

文章目录Json介绍作者的Demo项目地址常见的转化使用测试json的添加属性&#xff0c;打印bean与json互转deepBean与json互转list与json互转map与json互转demo所用到的实体类StudentGrade个人使用的依赖常用方法其他参考文档Json介绍 1、JSONObject只是一种数据结构&#xff0c;可…

Qt OpenGL(二十四)——Qt OpenGL 核心模式-实现彩色三角形

Qt OpenGL(二十四)——Qt OpenGL 核心模式-实现彩色三角形 我们之前在Qt OpenGL 核心模式版本中,看到了Qt关于OpenGL的例程,是一个旋转的彩色三角形,本篇文章我们就使用OpenGL核心模式,实现这个彩色三角形。 图1 旋转的三角形 一、彩色三角形 上一篇文章(Qt OpenGL 核心…

半导体新能源智能装备上位机工业软件设计方案

一、什么是上位机软件 如果说PLC是工业控制的小脑&#xff0c;那么上位机软件就是其大脑。在概念上&#xff0c;控制者和提供服务者是上位机&#xff0c;被控制者和被服务者是下位机&#xff0c;上位机往往是数字信号的处理和命令的下发&#xff0c;下位机往往是模拟量的处理和…

【python实战】朋友因股票亏了,很惨常愤恨不平,当天我就分析出原因:怎么做到的?(听说关注我的人会暴富)

导语 有温度 有深度 有广度 就等你来关注哦~ 所有文章完整的素材源码都在&#x1f447;&#x1f447; 粉丝白嫖源码福利&#xff0c;请移步至CSDN社区或文末公众hao即可免费。 对于大部分股票投资者来说&#xff0c;一年能拿住翻倍的股票就实属不易。一年10倍&#xff0c;甚至…

LIN通讯

LIN通讯 一、LIN通讯的背景与意义 随着汽车电子的发展&#xff0c;汽车上的电子零件正在逐渐地增加。而电子零件的增加也导致更多的设备&#xff08;传感器、执行器、电子控制器&#xff09;需要加入汽车的局部网络&#xff0c;这些零件的增加还会带来配线的增加&#xff0c;…

OSI七层参考模型和TCP/IP四层(五层)参考模型

OSI七层参考模型 OSI&#xff08;OSI&#xff0c;Open System Interconnection&#xff09;七层模型&#xff0c;是参考模型是国际标准化组织&#xff08;ISO&#xff09;制定的一个用于计算机或通信系统间互联的标准体系。它是一个七层的、抽象的模型体&#xff0c;不仅…

H264码流中SPS PPS详解

1 SPS和PPS从何处而来&#xff1f; 2 SPS和PPS中的每个参数起什么作用&#xff1f; 3 如何解析SDP中包含的H.264的SPS和PPS串&#xff1f; 1 客户端抓包 在做客户端视频解码时&#xff0c;一般都会使用Wireshark抓包工具对接收的H264码流进行分析&#xff0c;如下所示&…

艾美捷nickases-Cas9内切酶裂解试验展示

核酸内切酶&#xff08;endonuclease&#xff09;在核酸水解酶中&#xff0c;为可水解分子链内部磷酸二酯键生成寡核苷酸的酶&#xff0c;与核酸外切酶相对应。从对底物的特异性来看&#xff0c;可分为DNaseⅠ、DNaseⅡ等分解DNA的酶&#xff1b;RNase、RNaseT1等分解RNA的酶。…

在 Spring Boot中配置日志

Spring Boot 在引擎盖下使用Apache Commons Logging。但是&#xff0c;它允许您选择所需的日志记录库。让我们来看看使用 Spring Boot 时的一些配置和最佳实践。 目录 概述简单日志记录示例配置日志记录 更改日志级别将日志写入文件在 Spring 引导中更改日志记录模式对日志条…

弹簧(压簧)力度计算与设计

弹簧&#xff08;压簧&#xff09;力度计算与设计弹簧的种类什么是弹性系数弹簧的材料常用材料与用途弹性系数与哪些因素有关弹簧力度设计与计算弹簧收尾设计弹簧是一种利用弹性来工作的机械零件。一般用弹簧钢制成。利用它的弹性可以控制机件的运动、缓和冲击或震动、储蓄能量…

优思学院|精益六西格玛的成本效益怎么样?

所有精益六西格玛的实施都以项目工作为中心&#xff0c;因此可以用投资回报率&#xff08;ROI&#xff09;确定成本效益。项目可以集中在通过改善营收或降低成本&#xff08;或两者&#xff09;来提高净利润。 它们也可以侧重于通过减少资产&#xff08;通常是库存或应收账款&…

项目实战——匹配系统(上)

ps&#xff1a;从这篇文章开始&#xff0c;整个项目最精华&#xff08;困难&#xff09;的部分就要来了&#xff0c;因此这里会把每一个步骤细分&#xff0c;并且说一下自己对于每个步骤的思考和理解&#xff08;博主水平有限&#xff0c;错误在所难免&#xff0c;欢迎指出讨论…

【web渗透思路】敏感信息泄露(网站+用户+服务器)

目录 一、信息泄露示例 1、示例&#xff1a; 二、泄露方式 1、原理&#xff1a; 三、泄露危害 1、危害&#xff1a; 四、泄露挖掘 1、爬虫文件 2、目录信息 3、越权访问 4、开发注释、js文件 5、错误提示 6、调试信息 7、备份等目录文件 8、配置不安全 9、版本控…

相控阵天线(五):稀疏阵列(概率密度稀疏法、多阶密度加权法、迭代傅里叶(IFT)法)

目录简介稀疏线阵概率密度稀疏法多阶密度加权法迭代傅里叶(IFT)综合法对称分布稀疏阵列建模仿真简介 稀疏阵是在不明显改变阵列波束宽度的情况下去掉一些阵元&#xff0c;可以用满阵列的几分之一的阵元构造一个减低了增益的高方向性阵列&#xff0c;符合大型阵列设计中降低成本…

丰田+比亚迪「围攻」大众,明年或将「让出」榜首之位

大众&#xff0c;正在经历最艰难的时刻。 高工智能汽车研究院监测数据显示&#xff0c;今年1-10月&#xff0c;大众集团旗下大众品牌乘用车在中国市场的交付上险同比下滑11.5%&#xff0c;而作为老对手&#xff0c;排名第二的丰田&#xff0c;则是同比增长13.72%。 豪华品牌部…

解析分布式数据库的技术框架及其在金融行业中的应用规划

早期银行业务系统处理的主要是交易型数据,数据量较少,传统关系型数据库(如Oracel、DB2等)已足够应对。随着互联网金融业务的快速发展,业务系统需要处理的数据呈爆炸式增长,传统数据库无法满足业务系统越来越高的数据处理能力要求。于是,新型的分布式数据库系统应运而生。…

Java内部类解析

作者&#xff1a;~小明学编程 文章专栏&#xff1a;JavaSE基础 格言&#xff1a;目之所及皆为回忆&#xff0c;心之所想皆为过往 目录 什么是内部类 静态内部类 静态内部类访问外部类的规则 外部类访问静态内部类的规则 实例化静态内部类 非静态内部类 内部类访问外部类…

双向链表的实现

这里以结构体的方式来实现链表&#xff0c;也可以使用类。结构体在没有修饰符的情况下&#xff0c;默认是共有访问。如有不对&#xff0c;希望能指出。 目录 一、链表和结点结构体的声明 (ListNode.h) 二、链表各个功能的实现 1、增 (1) 构造函数&#xff08;创建链表头结点…

信息安全工程实践笔记--Day1 信息收集漏洞扫描

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录实验目标&#xff08;一&#xff09;信息收集一、搜索引擎二、域名1.whois 查询2.子域名查询3.真实ip(1)什么是cdn&#xff1f;(2) 如何验证目标服务器是否挂载cdn&a…