C++初阶——基础知识(函数重载与引用)
目录
1.命名冲突
2.命名空间
3.缺省参数
4.函数重载
1.函数重载的特点包括:
2.函数重载的好处包括:
3.引用
引用的特点包括
引用的主要用途包括
引用和指针
引用
指针
类域
命名空间域
局部域
全局域
第一个关键字
命名冲突
同一个项目之间冲突
预作用限定符::
命名空间
缺省参数
1.命名冲突
指在同一个项目中出现了命名冲突的情况。为了避免命名冲突,可以使用预作用限定符(::)进行限定。
2.命名空间
是一种组织代码的机制,用于避免不同模块或库之间的命名冲突。命名空间可以将代码进行逻辑上的分组,并提供了一种层次化的命名结构。
3.缺省参数
指在函数或方法定义时给参数设置默认值,使得在调用时可以不传递该参数的值。这样做可以增加函数的灵活性和可重用性。
4.函数重载
函数重载是指在同一个作用域内定义多个相同名称但参数列表不同的函数。通过函数重载,可以根据传入的参数类型或数量的不同来调用不同的函数。
1.函数重载的特点包括:
- 函数名称相同:重载的函数必须使用相同的名称。
- 参数列表不同:重载的函数必须有不同的参数列表,可以是参数类型不同、参数数量不同或参数顺序不同。
- 返回值类型不影响重载:函数的返回值类型对函数重载没有影响,只有参数列表不同才能实现重载。
2.函数重载的好处包括:
- 提高代码的可读性:通过使用相同的函数名称,可以更直观地表示函数的功能和意图。
- 简化函数调用:不需要记住多个不同名称的函数,只需根据不同的参数类型或数量调用相同的函数名称。
- 增加代码的灵活性:可以根据不同的需求设计适用于不同情况的函数。
需要注意的是,在进行函数重载时,编译器会根据调用时的参数类型或数量匹配最合适的函数进行调用。如果存在多个函数都能匹配到调用条件,编译器会选择最精确匹配的函数进行调用。如果出现无法唯一确定调用的情况,编译器会报错。因此,在进行函数重载时,需要保证函数之间的参数列表能够明确区分。
下面是一个使用函数重载的示例代码
#include <iostream>
using namespace std;int add(int a, int b) {return a + b;
}double add(double a, double b) {return a + b;
}int add(int a, int b, int c) {return a + b + c;
}int main() {int x = 1, y = 2, z = 3;double u = 1.5, v = 2.5;cout << add(x, y) << endl; // 调用add(int, int)函数cout << add(u, v) << endl; // 调用add(double, double)函数cout << add(x, y, z) << endl; // 调用add(int, int, int)函数return 0;
}
在这个例子中,我们定义了三个同名但参数列表不同的add函数,分别接受两个整型参数、两个浮点型参数和三个整型参数。在main函数中,我们分别调用了这三个函数,并根据传入的参数类型来选择调用哪个函数。由于函数重载的存在,编译器可以根据传入的参数类型自动选择最适合的函数进行调用。
&取地址
3.引用
在编程中,引用是指通过使用已有变量的别名来访问该变量的值或者修改它。引用提供了一种方便的方式来操作变量,而无需直接访问内存地址。
引用的特点包括
- 别名:引用是变量的别名,它与原变量共享同一块内存空间。
- 内存共享:对引用的修改会直接影响到原变量的值,因为它们指向同一块内存地址。
- 无需解引用:使用引用时无需进行解引用(*)操作,可以像直接操作变量一样使用引用。
引用的主要用途包括
- 函数参数传递:通过引用传递参数,可以实现对变量的修改,而无需返回值。
- 避免拷贝开销:使用引用可以避免对大型对象进行拷贝,提高程序的效率。
- 别名操作:使用引用可以为变量创建别名,提高代码的可读性和可维护性。
需要注意的是,引用和指针不同。引用在定义时必须初始化,并且不能改变引用的目标,而指针可以在任意时刻指向不同的对象。引用也没有空值(null)的概念,而指针可以为空。
在C++中,使用&符号来声明引用,例如:
int a = 42;
int& ref = a; // ref是a的引用
在函数参数传递中,可以使用引用参数来实现对原变量的修改,例如:
void increment(int& num) {num++;
}int main() {int a = 5;increment(a); // 通过引用修改a的值cout << a; // 输出6return 0;
}
引用和指针
都是用于间接访问变量的工具,它们在C++中有着不同的特点和用法。
-
引用
- 引用是一个别名,它必须在创建时初始化,并且一旦指向了某个变量,就无法再指向其他变量。
- 引用本质上是对变量的另一个名字,使用起来更加直观,并且不需要进行解引用操作。
- 对引用的操作会直接影响到引用所指向的变量,因为它们共享同一块内存空间。
- 通常用于函数参数传递、返回引用值以及创建别名变量等场景。
-
指针
- 指针是一个变量,它存储了另一个变量的内存地址。指针可以在程序运行过程中被重新赋值,指向不同的变量或者空地址(nullptr)。
- 操作指针需要使用解引用操作符(*)来访问所指向的变量。
- 指针相对于引用更加灵活,可以动态分配内存,并支持指针算术运算。
- 在C++中,指针需要显式地进行内存管理,包括分配和释放内存,因此使用指针需要更加小心谨慎,以避免出现内存泄漏等问题。
在选择使用引用还是指针时,可以根据具体的需求和场景来决定:
- 如果需要在函数中修改变量的值,可以使用引用作为函数参数;
- 如果需要支持动态内存分配或者需要指向多个不同对象,可以使用指针。
下面是一个使用引用和指针的示例代码,以展示它们的不同特点:
#include <iostream>
using namespace std;void increment(int& num) {num++; // 直接操作num所指向的变量
}void allocate(int*& ptr, int size) {ptr = new int[size]; // 动态分配内存,并将ptr指向该内存块
}int main() {int a = 5;int* p = &a; // 使用指针来访问变量aint& r = a; // 使用引用来访问变量aincrement(a); // 通过引用修改a的值cout << a << endl; // 输出6int* q = nullptr;allocate(q, 10); // 动态分配内存,并将q指向该内存块q[0] = 42; // 使用指针操作动态分配的内存delete[] q; // 释放动态分配的内存return 0;
}
在这个例子中,我们定义了一个increment函数,它使用引用参数来修改传入的变量的值。我们还定义了一个allocate函数,它使用指针参数来动态分配内存,并将指针指向该内存块。在main函数中,我们使用引用r和指针p来访问变量a,然后调用increment函数来修改a的值。我们还使用指针q来动态分配内存,并使用q来访问和操作动态分配的内存。最后,我们释放了动态分配的内存。
相关文章:

C++初阶——基础知识(函数重载与引用)
目录 1.命名冲突 2.命名空间 3.缺省参数 4.函数重载 1.函数重载的特点包括: 2.函数重载的好处包括: 3.引用 引用的特点包括 引用的主要用途包括 引用和指针 引用 指针 类域 命名空间域 局部域 全局域 第一个关键字 命名冲突 同一个项目之间冲…...

车载电子电器架构 —— 电子电气系统开发角色定义
车载电子电器架构 —— 电子电气系统开发角色定义 我是穿拖鞋的汉子,魔都中坚持长期主义的汽车电子工程师。 注:本文12000字,深度思考者进!!! 老规矩,分享一段喜欢的文字,避免自己成为高知识低文化的工程师: 屏蔽力是信息过载时代一个人的特殊竞争力,任何消耗你的…...

最新Redis7哨兵模式(保姆级教学)
一定一定要把云服务器的防火墙打开一定要!!!!!!!!!否则不成功!!!!!!!!&…...

Redis原理及常见问题
高性能之道 单线程模型基于内存操作epoll多路复用模型高效的数据存储结构redis的单线程指的是数据处理使用的单线程,实际上它主要包含 IO线程:处理网络消息收发主线程:处理数据读写操作,包括事务、Lua脚本等持久化线程:执行RDB或AOF时,使用持久化线程处理,避免主线程的阻…...

nvm 的安装及使用 (Node版本管理器)
目录 1、nvm 介绍 2、nvm安装 3、nvm 使用 4、node官网可以查看node和npm对应版本 5、nvm安装指定版本node 6、安装cli脚手架 1、nvm 介绍 NVM 全称 node.js version management ,专门针对 node 版本进行管理的工具,通过它可以安装和切换不同版本的…...
【Yii2】数据库查询方法总结
目录 1.查找单个记录: 2.查找多个记录: 3.条件查询: 4.关联查询: 假设User模型有一个名为orders的多对一关联关系。 5.排序和分组: 6.数据操作: 7.事务处理: 8.命令查询: 9…...

区块链的三难困境是什么,如何解决?
人们需要保持社交、工作和睡眠之间的平衡,并且努力和谐相处。同样的概念也反映在区块链的三难困境中。 区块链三难困境是一个术语,指的是现有区块链的局限性:可扩展性、安全性和去中心化。这是一个存在了几十年的设计问题,其问题的…...

oCPC实践录 | oCPM的秘密
前言 笔者从这几方面介绍oCPM,并一一分析平台侧宣称的oCPM相比oCPC的优势,并解开其中的秘密。 1)什么是oCPM? 2)oCPC与oCPM的异同 3)平台宣称oCPM的优势 4)oCPM真正的秘密 5)oCPM下的点击率与…...

【Linux Shell学习笔记】Linux Shell的位置参数与函数
一、位置参数 位置参数,也被称之为位置变量,通过位置参数,可以在执行程序的时候,向程序传递数据 1.1 shell接收参数的方法 1.2 向shell传递参数的方法 二、函数 2.1 函数基础 2.1.1 函数简介 函数本质上就是一个代码块…...

缓存cache和缓冲buffer的区别
近期被这两个词汇困扰了,感觉有本质的区别,搜了一些资料,整理如下 计算机内部的几个部分图如下 缓存(cache) https://baike.baidu.com/item/%E7%BC%93%E5%AD%98 提到缓存(cache),就…...

Vue常见面试问答
vue响应式数据 vue2 Vue2 的对象数据是通过 Object.defineProperty 对每个属性进行监听,当对属性进行读取的时候,就会触发 getter,对属性进行设置的时候,就会触发 setter。 /** * 这里的函数 defineReactive 用来对 Object.def…...
Eureka相关面试题及答案
1、什么是Eureka? Eureka是一个由Netflix开发的服务发现(Service Discovery)工具,它是Spring Cloud生态系统中的一个关键组件。服务发现是微服务架构中的一个重要概念,它允许服务实例在启动时注册自己,以便…...

想要学会JVM调优,先掌握JVM内存模型和JVM运行原理
1、前言 今天将和你一起探讨Java虚拟机(JVM)的性能调优。 JVM算是面试中的高频问题了,通常情况下总会有人问到:请你讲解下 JVM 的内存模型,JVM 的 性能调优做过? 2、为什么 JVM 在 Java 中如此重要 首…...
详解C语言入门程序:HelloWorld.c
#include <stdio.h> // 头文件,使用<>编译系统会在系统头文件目录搜索在C语言中,#include 是预处理指令,用于将指定的头文件内容插入到当前源文件中。这里的 <stdio.h> 是一个标准库头文件,其中包含了与输入输出…...

【elk-day01】es和kibana搭建及验证---Mac-Docker
Mac系统使用Docker下载搭建和验证eskibana Docker下载安装es安装es验证kibana安装kibana验证 Docker下载安装 Docker Desktop官网安装下载地址 说明一下为什么要安装desktop版本的docker,因为docker作为工具使用,我们需要的是开箱即用,没有必…...

探索 3D 图形处理的奥秘
最近一年多来,在 3Dfx、Intel 们的狂轰滥炸中,在 Quake、古墓丽影们的推波助澜下,三维图形已经成为计算机迷眼中的又一个热点。3D 世界到底是怎样的神奇,我们又是怎样享受它的乐趣呢?就让我们来一探究竟吧。 图形基础…...
R语言孟德尔随机化研究工具包(1)---friendly2MR
friendly2MR是孟德尔岁随机化研究中的一个重要补充工具,可以批量探索因素间的因果关系,以及快速填补缺失eaf的数据,但是存在细微差异需要注意。 remotes::install_github("xiechengyong123/friendly2MR") library(friendly2MR)lib…...
CentOS7下使用Docker安装Nacos
CentOS7下使用Docker安装Nacos 一、查看和nacos相关的镜像二、拉去镜像三、创建容器四、查看日志 一、查看和nacos相关的镜像 docker search nacos二、拉去镜像 拉取 nacos/nacos-server:1.2.0 镜像 docker pull nacos/nacos-server:1.2.0三、创建容器 docker run --env MO…...

用 Node.js 写一个爬虫
自己设计一个网站,然后去爬取别人家页面的数据来做一个自己的网站。哈哈哈,如果自己写着玩可能没啥事,但如果用这个网站来获利,你可能就要被寄律师函了,毕竟这有点‘刑’。这篇文章呢,就带大家爬取豆瓣TOP2…...

关于HTTPS
目录 什么是加密 对称加密 非对称加密 中间人攻击 引入证书 HTTPS是一个应用层的协议,是在HTTP协议的基础上引入了一个加密层. HTTP协议内容都是按照文本的方式明文传输,这就导致在传输的过程中出现一些被篡改的情况. 运营商劫持事件 未被劫持的效果,点击下载按钮,就会…...
RestClient
什么是RestClient RestClient 是 Elasticsearch 官方提供的 Java 低级 REST 客户端,它允许HTTP与Elasticsearch 集群通信,而无需处理 JSON 序列化/反序列化等底层细节。它是 Elasticsearch Java API 客户端的基础。 RestClient 主要特点 轻量级ÿ…...

边缘计算医疗风险自查APP开发方案
核心目标:在便携设备(智能手表/家用检测仪)部署轻量化疾病预测模型,实现低延迟、隐私安全的实时健康风险评估。 一、技术架构设计 #mermaid-svg-iuNaeeLK2YoFKfao {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg…...

linux arm系统烧录
1、打开瑞芯微程序 2、按住linux arm 的 recover按键 插入电源 3、当瑞芯微检测到有设备 4、松开recover按键 5、选择升级固件 6、点击固件选择本地刷机的linux arm 镜像 7、点击升级 (忘了有没有这步了 估计有) 刷机程序 和 镜像 就不提供了。要刷的时…...
C++ 基础特性深度解析
目录 引言 一、命名空间(namespace) C 中的命名空间 与 C 语言的对比 二、缺省参数 C 中的缺省参数 与 C 语言的对比 三、引用(reference) C 中的引用 与 C 语言的对比 四、inline(内联函数…...
服务器--宝塔命令
一、宝塔面板安装命令 ⚠️ 必须使用 root 用户 或 sudo 权限执行! sudo su - 1. CentOS 系统: yum install -y wget && wget -O install.sh http://download.bt.cn/install/install_6.0.sh && sh install.sh2. Ubuntu / Debian 系统…...
基于Java Swing的电子通讯录设计与实现:附系统托盘功能代码详解
JAVASQL电子通讯录带系统托盘 一、系统概述 本电子通讯录系统采用Java Swing开发桌面应用,结合SQLite数据库实现联系人管理功能,并集成系统托盘功能提升用户体验。系统支持联系人的增删改查、分组管理、搜索过滤等功能,同时可以最小化到系统…...

【p2p、分布式,区块链笔记 MESH】Bluetooth蓝牙通信 BLE Mesh协议的拓扑结构 定向转发机制
目录 节点的功能承载层(GATT/Adv)局限性: 拓扑关系定向转发机制定向转发意义 CG 节点的功能 节点的功能由节点支持的特性和功能决定。所有节点都能够发送和接收网格消息。节点还可以选择支持一个或多个附加功能,如 Configuration …...
华为OD最新机试真题-数组组成的最小数字-OD统一考试(B卷)
题目描述 给定一个整型数组,请从该数组中选择3个元素 组成最小数字并输出 (如果数组长度小于3,则选择数组中所有元素来组成最小数字)。 输入描述 行用半角逗号分割的字符串记录的整型数组,0<数组长度<= 100,0<整数的取值范围<= 10000。 输出描述 由3个元素组成…...
《Offer来了:Java面试核心知识点精讲》大纲
文章目录 一、《Offer来了:Java面试核心知识点精讲》的典型大纲框架Java基础并发编程JVM原理数据库与缓存分布式架构系统设计二、《Offer来了:Java面试核心知识点精讲(原理篇)》技术文章大纲核心主题:Java基础原理与面试高频考点Java虚拟机(JVM)原理Java并发编程原理Jav…...
[特殊字符] 手撸 Redis 互斥锁那些坑
📖 手撸 Redis 互斥锁那些坑 最近搞业务遇到高并发下同一个 key 的互斥操作,想实现分布式环境下的互斥锁。于是私下顺手手撸了个基于 Redis 的简单互斥锁,也顺便跟 Redisson 的 RLock 机制对比了下,记录一波,别踩我踩过…...