C++初阶——基础知识(函数重载与引用)

目录

1.命名冲突

2.命名空间

3.缺省参数

4.函数重载

1.函数重载的特点包括:

2.函数重载的好处包括:

3.引用

引用的特点包括

引用的主要用途包括

引用和指针

引用

指针


类域

命名空间域

局部域

全局域

第一个关键字

命名冲突

同一个项目之间冲突

  预作用限定符::

命名空间

缺省参数

1.命名冲突

指在同一个项目中出现了命名冲突的情况。为了避免命名冲突,可以使用预作用限定符(::)进行限定。

2.命名空间

是一种组织代码的机制,用于避免不同模块或库之间的命名冲突。命名空间可以将代码进行逻辑上的分组,并提供了一种层次化的命名结构。

3.缺省参数

指在函数或方法定义时给参数设置默认值,使得在调用时可以不传递该参数的值。这样做可以增加函数的灵活性和可重用性。

4.函数重载

函数重载是指在同一个作用域内定义多个相同名称但参数列表不同的函数。通过函数重载,可以根据传入的参数类型或数量的不同来调用不同的函数。

1.函数重载的特点包括:

  1. 函数名称相同:重载的函数必须使用相同的名称。
  2. 参数列表不同:重载的函数必须有不同的参数列表,可以是参数类型不同、参数数量不同或参数顺序不同。
  3. 返回值类型不影响重载:函数的返回值类型对函数重载没有影响,只有参数列表不同才能实现重载。

2.函数重载的好处包括:

  1. 提高代码的可读性:通过使用相同的函数名称,可以更直观地表示函数的功能和意图。
  2. 简化函数调用:不需要记住多个不同名称的函数,只需根据不同的参数类型或数量调用相同的函数名称。
  3. 增加代码的灵活性:可以根据不同的需求设计适用于不同情况的函数。

需要注意的是,在进行函数重载时,编译器会根据调用时的参数类型或数量匹配最合适的函数进行调用。如果存在多个函数都能匹配到调用条件,编译器会选择最精确匹配的函数进行调用。如果出现无法唯一确定调用的情况,编译器会报错。因此,在进行函数重载时,需要保证函数之间的参数列表能够明确区分。

下面是一个使用函数重载的示例代码

#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.引用

在编程中,引用是指通过使用已有变量的别名来访问该变量的值或者修改它。引用提供了一种方便的方式来操作变量,而无需直接访问内存地址。

引用的特点包括

  1. 别名:引用是变量的别名,它与原变量共享同一块内存空间。
  2. 内存共享:对引用的修改会直接影响到原变量的值,因为它们指向同一块内存地址。
  3. 无需解引用:使用引用时无需进行解引用(*)操作,可以像直接操作变量一样使用引用。

引用的主要用途包括

  1. 函数参数传递:通过引用传递参数,可以实现对变量的修改,而无需返回值。
  2. 避免拷贝开销:使用引用可以避免对大型对象进行拷贝,提高程序的效率。
  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++中有着不同的特点和用法。

  1. 引用

    • 引用是一个别名,它必须在创建时初始化,并且一旦指向了某个变量,就无法再指向其他变量。
    • 引用本质上是对变量的另一个名字,使用起来更加直观,并且不需要进行解引用操作。
    • 对引用的操作会直接影响到引用所指向的变量,因为它们共享同一块内存空间。
    • 通常用于函数参数传递、返回引用值以及创建别名变量等场景。
  2. 指针

    • 指针是一个变量,它存储了另一个变量的内存地址。指针可以在程序运行过程中被重新赋值,指向不同的变量或者空地址(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来访问和操作动态分配的内存。最后,我们释放了动态分配的内存。

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

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

相关文章

二分查找--二分查找算法(朴素二分模板)

个人主页&#xff1a;Lei宝啊 愿所有美好如期而遇 本题题目链接https://leetcode.cn/problems/binary-search/description/ 算法原理 二段性&#xff0c;我们发现这个数组可以找到某种规律将其分为两段&#xff0c;不断划分下去&#xff0c;最终可以找到target 图示 我们分…

图灵日记之java奇妙历险记--继承和多态

目录 继承概念继承语法父类成员访问子类中访问父类的成员变量子类中访问父类的成员方法 super关键字子类构造方法super和this初始化protected关键字继承方式final 关键字继承与组合 多态条件向上转型重写动态绑定&&静态绑定多态再理解向下转型多态的优缺点好处缺陷 继承…

Element|InfiniteScroll 无限滚动组件的具体使用方法

目录 InfiniteScroll 无限滚动 基本用法 详细说明 v-infinite-scroll 指令 infinite-scroll-disabled 属性 infinite-scroll-distance 属性 总结 需求背景 &#xff1a; 项目统计管理列表页面&#xff0c;数据量过多时在 IE 浏览器上面会加载异常缓慢&#xff0c;导致刚…

如何通过易舟云财务软件,查看会计账簿的明细账?

如何通过易舟云财务软件&#xff0c;查看会计账簿的明细账&#xff1f; 前言1、会计账簿2、会计明细账 财务软件操作步骤 前言 1、会计账簿 财务软件是一种用于管理和记录企业财务活动的电子工具。会计账簿是财务软件中的一个重要功能&#xff0c;用于记录和管理企业的会计信…

superset利用mysql物化视图解决不同数据授权需要写好几次中文别名的问题

背景 在使用superset时&#xff0c;给不同的人授权不同的数据&#xff0c;需要不同的数据源&#xff0c;可视化字段希望是中文&#xff0c;所以导致不同的人需要都需要去改表的字段&#xff0c;因此引入视图&#xff0c;将视图中字段名称设置为中文 原表数据 select * from …

将按键次数写入AT24C02,再读出并用1602LCD显示

#include<reg51.h> //包含单片机寄存器的头文件 #include<intrins.h> //包含_nop_()函数定义的头文件 sbit RSP2^0; //寄存器选择位&#xff0c;将RS位定义为P2.0引脚 sbit RWP2^1; //读写选择位&#xff0c;将RW位定义为P2.1引脚 s…

【面试】 Maven 的八大核心概念

Maven 的八大核心概念 在这里&#xff0c;举出这个标题&#xff0c;自然大家知道Maven是干啥的&#xff0c;就不过多进行赘述&#xff01;我们主要对于Maven的八大核心概念做一个解释补充&#xff0c;这也是我自己的一个学习历程&#xff0c;我们一起共勉&#xff01; 文章概述…

word中MathType公式编号

直接上效果图&#xff1a; 步骤如下&#xff1a; 安装MathTypeword中安装MathType选项卡。设置MathType选项卡添加分隔符插入公式&#xff0c;自动生成右编码 接下来介绍每一步。 文章目录 1. 安装MathType2. Word中安装MathType选项卡3. 配置MathType选项4. 添加分隔符5. 插…

Java注解以及自定义注解

Java注解以及自定义注解 要深入学习注解&#xff0c;我们就必须能定义自己的注解&#xff0c;并使用注解&#xff0c;在定义自己的注解之前&#xff0c;我们就必须要了解Java为 我们提供的元注解和相关定义注解的语法。 1、注解 1.1 注解的官方定义 注解是一种元数据形式。…

几种取时间的方法(附代码)

1.上古版 最原始的取时间的方法大概就是timelocaltime了&#xff0c;见代码&#xff1a; #include <stdio.h>#include <time.h>// gcc -o time_1 time_1.cint main(){time_t tm_now;time(&tm_now);// 或者写成 tm_now time(NULL);//1.直接打印&#xff1a;197…

Python入门学习篇(十二)——内置函数匿名函数

1 内置函数——数学函数 1.1 绝对值函数 1.1.1 语法 abs(参数) # 里面的参数既可以是整数,也可以是小数1.1.2 示例代码 m -1.99 n -9 print(f"{m}的绝对值为: {abs(m)}") print(f"{n}的绝对值为: {abs(n)}")1.1.3 运行截图 1.2 求商和余数 1.2.1 语…

Linux基础知识学习

开发工具&#xff1a;Xshell7VMware 首先要明确的是在Linux系统中“目录”文件夹 而所谓"家目录"指的是每个用户所拥有的一个目录&#xff0c;通常默认在 /home 目录下&#xff0c;其名称与用户的用户名相同。 ~代表的是就就是家目录 cd ~就可以直接进入当前用户下…

PostgreSQL 作为向量数据库:入门和扩展

PostgreSQL 拥有丰富的扩展和解决方案生态系统&#xff0c;使我们能够将该数据库用于通用人工智能应用程序。本指南将引导您完成使用 PostgreSQL 作为向量数据库构建生成式 AI 应用程序所需的步骤。 我们将从pgvector 扩展开始&#xff0c;它使 Postgres 具有特定于向量数据库…

ZigBee案例笔记 - 无线点灯

文章目录 无线点灯实验概述工程关键字工程文件夹介绍Basic RF软件设计框图简单说明工程操作Basic RF启动流程Basic RF发送流程Basic RF接收流程 无线点灯案例无线点灯现象 无线点灯实验概述 ZigBee无线点灯实验&#xff08;即Basic RF工程&#xff09;&#xff0c;由TI公司提供…

C语言实验3:函数的定义

目录 一、实验要求 二、实验原理 1.函数头 2.函数体 3.函数的定义及使用 三、实验内容 1. sum函数 代码 截图 分析 2. sum函数 代码 截图 分析 3. rank_grade函数 代码 截图 分析 4. rank_grade函数 代码 截图 分析 5. 函数的嵌套使用 代码 截图 分析…

uniapp中uview组件库的丰富Upload 上传上午用法

目录 基础用法 #上传视频 #文件预览 #隐藏上传按钮 #限制上传数量 #自定义上传样式 API #Props #Methods #Slot #Events 基础用法 可以通过设置fileList参数(数组&#xff0c;元素为对象)&#xff0c;显示预置的图片。其中元素的url属性为图片路径 <template>…

python文件打包实战技巧

众所周知&#xff0c;python是一种脚本语言&#xff0c;python程序必须在python环境下运行&#xff0c;所以如果想把自己写的程序给别人看的话&#xff0c;就比较麻烦&#xff0c;他需要先配置python环境&#xff0c;对于电脑小白来说这是“要命”的事情。而且如果是客户的话&a…

PulseGAN

研究背景 远程光电容积描记术 (rPPG) 是一种非接触式技术&#xff0c;用于测量面部视频中的心脏信号。健康监测和情绪识别等许多领域都迫切需要高质量的 rPPG 脉冲信号。然而&#xff0c;由于脉搏信号不准确的限制&#xff0c;现有的大多数rPPG方法只能用于获取平均心率&#…

AD域组策略

题目&#xff1a; 除manager 组和IT组&#xff0c;所有用户隐藏C盘&#xff1b;除manager 组和IT组&#xff0c;所有普通给用户禁止使用cmdIT01用户登陆域后&#xff0c;会自动增加驱动器X&#xff0c;该驱动器自动关联DC1的C:\tools文件夹&#xff1b;sales用户组的InternetE…

ESP32S3+HX8347+3线SPI运行LVGL例程

一、clone lv_port_esp32到本地 git clone https://github.com/lvgl/lv_port_esp32.git 二、增加hx8347.c、hx8347.h components\lvgl_esp32_drivers\lvgl_tft下新增2个文件&#xff1a;hx8347.c、hx8347.h。因为lv_port_esp32中没有hx8347的驱动&#xff0c;需要自己写。这两个…