当前位置: 首页 > news >正文

初阶C++(二)

初阶C++(二)

  • 1. 重载函数
    • (一)对于重载函数的理解
    • (二)重载函数分类
    • 2.引用
    • (一) 引⽤的概念和定义
    • (二)引用的使用
    • (三)const引用

1. 重载函数

(一)对于重载函数的理解

C++⽀持在同⼀作⽤域中出现同名函数,但是要求这些同名函数的形参不同,可以是参数个数不同或者
类型不同。这样C++函数调⽤就表现出了多态⾏为,使⽤更灵活。C语⾔是不⽀持同⼀作⽤域中出现同
名函数的。

(二)重载函数分类

其中分为多种, 其一则是:

//1:参数类型不同
int Add(int x, int y)
{cout << "int Add(int x, int y)" << endl;return x + y;
}double Add(double left, double right)
{cout << "double Add(double left,double right)" << endl;return left + right;
}

第二种则是:

//2:参数个数不同
int Add(int x, int y)
{cout << "int Add(int x,int y)" << endl;
}int Add(int x)
{cout << "int Add(int x)";
}

然后再是:

//3:参数顺序不同
int cwz(char x, int y)
{cout << "int cwz(char x,int y)" << endl;
}int cwz(int x, char y)
{cout << "int cwz(int x,char y)" << endl;
}

但是有一种情况是不算做重载函数:
返回类型的不同
在这里插入图片描述

2.引用

(一) 引⽤的概念和定义

引⽤不是新定义⼀个变量,⽽是给已存在变量取了⼀个别名,编译器不会为引⽤变量开辟内存空间,
它和它引⽤的变量共⽤同⼀块内存空间。如:周树人被称作为“”鲁迅“、孙悟空被称作为“斗战神佛”…
C++中为了避免引⼊太多的运算符,会复⽤C语⾔的⼀些符号,⽐如前⾯的<< 和 >>,这⾥引⽤也和取
地址使⽤了同⼀个符号&,⼤家注意使⽤⽅法⻆度区分就可以

在这里插入图片描述
在这里插入图片描述
接下来就是对引用的定义-------

#include<iostream>
using namespace std;
int main()
{
//用b、c、d来引用aint a = 0;int& b = a;int& c = a;int& d = a;d++;//打印地址cout << &a << endl;cout << &b << endl;cout << &c << endl;cout << &d << endl;
}

我们来逐步分析--------
第一步调试:
在这里插入图片描述
在这里插入图片描述
如图所示:b、c、d成功的引用了a,当d++的时候a、b、c、d都会改变,因为他们都是表示a这个变量
在这里插入图片描述
最后打印他们的地址得出是一样的
在这里插入图片描述
##(二) 引用特性

• 引⽤在定义时必须初始化
• ⼀个变量可以有多个引⽤
• 引⽤⼀旦引⽤⼀个实体,再不能引⽤其他实体
在这里插入图片描述
在这里插入图片描述

(二)引用的使用

对于引用的简单运用:
• 引⽤在实践中主要是于引⽤传参和引⽤做返回值中减少拷⻉提⾼效率和改变引⽤对象时同时变被引⽤对象。
• 引⽤传参跟指针传参功能是类似的,引⽤传参相对更⽅便⼀些。

比如实现一个交换函数:

#include<iostream>
using namespace std;
void swap(int& x, int& y)//在这里采用引用
{int tmp = x;x = y;y = tmp;
}int main()
{int a = 10;int b = 20;swap(a, b);cout << "a = " << a << endl;cout << "b = " << b << endl;return 0;
}

在这里插入图片描述

(三)const引用

对于const引用了解-----------

• 可以引⽤⼀个const对象,但是必须⽤const引⽤。const引⽤也可以引⽤普通对象,因为对象的访
问权限在引⽤过程中可以缩⼩,但是不能放⼤。
• 不需要注意的是类似 int& rb = a3; double d = 12.34; int& rd = d; 这样⼀些场
景下a
3的和结果保存在⼀个临时对象中, int& rd = d 也是类似,在类型转换中会产⽣临时对
象存储中间值,也就是时,rb和rd引⽤的都是临时对象,⽽C++规定临时对象具有常性,所以这⾥
就触发了权限放⼤,必须要⽤常引⽤才可以。
• 所谓临时对象就是编译器需要⼀个空间暂存表达式的求值结果时临时创建的⼀个未命名的对象,
C++中把这个未命名对象叫做临时对象。

例如:
在const修饰下a,却想要用引用来是的a的值改变
(权限放大)<这是不能的>

int main()
{const int a = 10;int& x = a;//这很显然是错的《放大了a的权限》const int& x = a;//必须这样才行
}

权限缩小<这是可以的>

int main()
{int a = 10;const int& x = a;缩小了a的权限
}

转换成别的类型的数也要用const来修饰

#include<iostream>
using namespace std;
int main()
{
int a = 10;
const int& ra = 30;
// 编译报错: “初始化”: ⽆法从“int”转换为“int &”
// int& rb = a * 3;
const int& rb = a*3;//这里是临时变量,临时变量具有常数性,那么就要用const来修饰
double d = 12.34;
// 编译报错:“初始化”: ⽆法从“double”转换为“int &”
// int& rd = d;
const int& rd = d;
return 0;
}

初阶C++(二)到此结束,感谢大家观看! ! !

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • AI赋能OFFICE 智能化办公利器!
  • Simulink生成代码时端口名称乱码问题
  • ChatGPT-4 对比 ChatGPT-3.5:有哪些优势
  • 有线网络台式电脑打游戏每天要断线几次又自动连接解决
  • LabVIEW从测试曲线中提取特征值
  • 自动化办公004—有效解决ChatGPT数学公式无法复制到Office、MarkDown的问题
  • Apache tika 实现各种文档内容解析
  • 科普文本分类背后的数学原理——最新版《数学之美》第14、15章读书笔记
  • 南方CASS:测绘工作者的得力助手
  • 发表EI会议论文-对考研生和研究生都有好处!
  • Mysql数据库两表连接进行各种操作
  • Python 如何实现数据驱动的接口自动化测试
  • 面壁智能发布端侧 AI 应用开发平台;快手推出肖像动画技术 LivePortrait丨 RTE 开发者日报
  • 【C++中resize和reserve的区别】
  • qt 线程举例
  • JavaScript-如何实现克隆(clone)函数
  • Android组件 - 收藏集 - 掘金
  • ES学习笔记(10)--ES6中的函数和数组补漏
  • Vue 动态创建 component
  • vue+element后台管理系统,从后端获取路由表,并正常渲染
  • vue--为什么data属性必须是一个函数
  • 安装python包到指定虚拟环境
  • 对超线程几个不同角度的解释
  • 猴子数据域名防封接口降低小说被封的风险
  • 记一次删除Git记录中的大文件的过程
  • 精益 React 学习指南 (Lean React)- 1.5 React 与 DOM
  • 使用 QuickBI 搭建酷炫可视化分析
  • 适配mpvue平台的的微信小程序日历组件mpvue-calendar
  • 数据结构java版之冒泡排序及优化
  • 通过几道题目学习二叉搜索树
  • 问:在指定的JSON数据中(最外层是数组)根据指定条件拿到匹配到的结果
  • 我与Jetbrains的这些年
  • 阿里云IoT边缘计算助力企业零改造实现远程运维 ...
  • 浅谈sql中的in与not in,exists与not exists的区别
  • 专访Pony.ai 楼天城:自动驾驶已经走过了“从0到1”,“规模”是行业的分水岭| 自动驾驶这十年 ...
  • #[Composer学习笔记]Part1:安装composer并通过composer创建一个项目
  • #Lua:Lua调用C++生成的DLL库
  • #常见电池型号介绍 常见电池尺寸是多少【详解】
  • $.ajax,axios,fetch三种ajax请求的区别
  • (2024,RWKV-5/6,RNN,矩阵值注意力状态,数据依赖线性插值,LoRA,多语言分词器)Eagle 和 Finch
  • (PyTorch)TCN和RNN/LSTM/GRU结合实现时间序列预测
  • (二)构建dubbo分布式平台-平台功能导图
  • (二)七种元启发算法(DBO、LO、SWO、COA、LSO、KOA、GRO)求解无人机路径规划MATLAB
  • (六)库存超卖案例实战——使用mysql分布式锁解决“超卖”问题
  • (每日持续更新)jdk api之FileFilter基础、应用、实战
  • (一一四)第九章编程练习
  • (终章)[图像识别]13.OpenCV案例 自定义训练集分类器物体检测
  • (转)socket Aio demo
  • (转)拼包函数及网络封包的异常处理(含代码)
  • .DFS.
  • .NET Core 2.1路线图
  • .NET delegate 委托 、 Event 事件,接口回调
  • .net的socket示例
  • .Net接口调试与案例
  • // an array of int