首页 > 编程语言 >C++入门-命名空间、引用、函数重载

C++入门-命名空间、引用、函数重载

时间:2023-12-31 19:32:00浏览次数:36  
标签:空间 函数 形参 C++ 命名 引用 重载 入门

引言:C++是C的一个超集,即C++继承了C语言的全部特性。C++不仅包含了C的关键字、语法和语义,还增加了一些新的特性。例如命名空间、引用、函数重载等,本片博客旨在向大家分享C++相较于C语言,增加的一些新的特性。

1.命名空间namespace

我们知道,在C语言中编写程序时,有时会存在标识符名与标准库中的标识符名冲突的情况,为了解决此种命名冲突,C++中引入了命名空间namespace的概念。

使用命名空间的目的是使标识符的名称局域化,即使标识符只在某一个限定域内有效,从而防止命名冲突的问题。

C++入门-命名空间、引用、函数重载_C++

1.1命名空间的定义

定义命名空间使用的关键字:namespace

定义命名空间的格式:namespace 空间名称 {}

{}中即为该命名空间中的成员。例如:定义一个名称为qpy的命名空间。

C++入门-命名空间、引用、函数重载_命名空间_02

那么命名空间中可以定义哪些成员呢?

1)命名空间中可以定义变量/函数/类型。

C++入门-命名空间、引用、函数重载_命名空间_03

2)命名空间可以嵌套定义,即可以在一个命名空间中再定义命名空间。

C++入门-命名空间、引用、函数重载_函数重载_04

3)一个项目中允许有多个重名的命名空间,最后编译器在处理时,会把重名的命名空间合并。

1.2命名空间的使用

1)使用域作用限定符”::“

例如,我们使用C++中标准命名空间std的输出关键字。

C++入门-命名空间、引用、函数重载_C++_05

C++入门-命名空间、引用、函数重载_传引用_06

2)使用using关键字将命名空间中某个成员引入

C++入门-命名空间、引用、函数重载_传引用_07

3)使用using namespace +命名空间名称,将整个命名空间展开

C++入门-命名空间、引用、函数重载_C++_08

std是C++标准库的命名空间名,C++将标准库的定义实现都放到这个命名空间中。

在我们日常练习中,使用标准库中的一些方法或变量时,使用方法三即可,但在大型项目中建议用前面的两种方法,因为大型项目中,代码量较大,命名时容易与标准库中的命名产生冲突。

2.引用

2.1引用的定义

引用,是为已经存在的变量取别名。

就可以形象地理解为我们的大名和小名,虽然名称不一样,但实际上是指同一个人。

2.2引用的格式

类型& 引用变量名 = 引用实体名

其中,'&'表示引用符号。

C++入门-命名空间、引用、函数重载_函数重载_09

b是a的引用。

2.3引用使用的注意点

1)引用类型必须和被引用的实体是同类型的。

2)引用必须在定义时初始化

3)一个变量可以有多个引用,但一个引用只能作为一个实体的引用。即不能同时作为多个实体的引用。

4)一个引用一旦作为一个实体的引用,不能再引用其他实体。

2.4引用的使用范围

1)可以作为函数的参数传递,即传引用传参

我们常用的传值传参,形参是实参的一份临时拷贝,函数对形参进行处理后再返回结果。

如果使用引用作为参数,无需拷贝,可以直接用引用对变量进行操作。

我们以经典的swap()交换函数为例:

C++入门-命名空间、引用、函数重载_传引用_10

上图中,使用传值传参,可以发现并未实现交换,这是因为形参a,b是实参a,b的一份临时拷贝。在Swap()函数中,只对形参a,b进行了交换,实参不受影响,随着Swap()函数执行结束,形参a,b被销毁,实参a,b没有进行任何操作。

在C语言中,为解决这个问题,我们的方法是传址实现交换。

C++入门-命名空间、引用、函数重载_传引用_11

通过在Swap()函数中传入实参地址,实现了在调用的函数中直接对实参进行操作。实现了交换。

以上方法可行,成功实现了交换,但我们在了解到了C++中的引用后,也可以使用传引用传参的方法来解决这个问题。

C++入门-命名空间、引用、函数重载_函数重载_12

形参是实参的引用,对形参的修改实际就是对实参的修改,也可实现交换。并且代码更加简洁。

2)可以作为函数的返回值,即传引用返回,省去了传址返回的拷贝操作。

但是,使用传引用返回时,返回的引用对象要保证没有被销毁,否则的话,不能使用传引用返回。

C++入门-命名空间、引用、函数重载_函数重载_13

c变量只存在于sub()函数范围内,随着函数调用结束,变量c也会被操作系统回收,如果此时使用一个引用变量作为c的引用,sub()函数结束后,再用c的引用去访问c对应的变量,则这种访问是非法的。

2.5引用的实质

引用在语法概念上是给变量起别名,底层是用指针实现的。


3.函数重载

3.1函数重载的定义

C++支持在同一作用域中定义同名的函数。这些函数的形参不同。

形参不同包括:

  • 形参的类型不同
  • 形参的个数不同
  • 形参的顺序不同

通过函数重载的定义我们可以知道,C语言中是不支持定义重名函数的,这就给我们增加了编码工作量,例如在C语言中,我们实现两个整数相加的操作,则我们可以声明:

int Add(int a,int b);

那么如果我们实现两个浮点数的加法呢?

则我们就必须想一个与Add不同的函数名

int AddFloat(float a,float b);

那么如果还要实现两个double类型的数的加法呢?

...

在C++中,我们只用一个函数名就可以实现这些不同的需求,只需借助函数重载,我们传入参数,由编译器自动识别参数类型。

int Add(int a,int b);
float Add(float a,float b);
double Add(double a,double b);

...

3.2C++支持函数重载的原因

编译器编译时会对函数根据其参数进行修饰。

C++可以通过函数修饰规则来区分,只要参数不同,修饰出来的名字就不一样,具体我们不详细分享,大家可以下去自行查阅相关资料。

注意:

仅仅返回值类型不同,在C++中是不构成重载的。


结语:以上就是本期小Q和大家分享的内容,如果文章中有错误或不恰当之处,欢迎在评论区指出或者给小Q私信,希望大家可以从本篇分享中有所收获,如果觉得文章不错,希望给个一键三连,你的支持是小Q进步的动力,我们下篇文章再见!

标签:空间,函数,形参,C++,命名,引用,重载,入门
From: https://blog.51cto.com/u_16191221/9049855

相关文章

  • 【C/C++】通过下面的工作来改进String类声明(即将String1.h升级为String2.h)。 a. 对+运
    通过下面的工作来改进String类声明(即将String1.h升级为String2.h)。a.对+运算符进行重载,使之可将两个字符串合并成一个。b.提供一个Stringlow()成员函数,将字符串中所有的字母字符转换为小写(别忘了cctype系列字符函数)。c.提供String()成员函数,将字符串中所有字母字符转换成大......
  • 小白入门Typora
    Markdown学习标题(1-6)一个#代表一级标题(类推),#后面加空格、XX、回车也可以Ctrl+数字(快捷键)字体粗体:两边加**斜体:两边加*加粗且斜体:两边加***删除线:两边加~~引用大于号(加空格)+文本HelloJAVA!分割线三个杠(减号)或者三个*+换行图片![名字]+(图片路径,可以......
  • 【环境配置】vscode配置C C++开发和调试环境
    【环境配置】vscode配置CC++开发和调试环境首先区分一些基本概念,其中部分内容可能有所出入,同时本文截至2023/12/31,更多的详细区别,请查阅官方文档MinGW,MinimalistGNUforWindows,前身为mingw32,是一个用于创建MicrosoftWindows应用程序的免费开源软件开发环境。包括GNU编译器......
  • Python趣味入门13:类中的各种变量
    小牛叔带你飞越类的门槛其中我们已知道定义变量在类中就表示为属性。但是在不同的位置定义变量会有不同的作用,并且采用不同的命名方式,也会让变量具有不同的作用本文假设有一个类指南针(compass),可想象成某个地图游戏中帮助主角寻找方向,也是本节主要的示例。1.类属性与实例属性c......
  • CSS3入门
    一.CSS3的概述 1.定义:层叠样式表;d2.意义:把内容与形式分开;html:内容;CSS:形式3.浏览器:chrome4.css样式规则e选择器(属性1:值,属性2:值;.......)选择器区分大小写,“5.css样式表的导入(1)行内式例:style="font-size:50px;font[amily:隶书;写在标记内;“  ......
  • IDEA 创建 Gradle 工程入门实例
    1.概述Gradle是专注于灵活性和性能的开源构建自动化工具。Gradle构建脚本是使用Groovy或KotlinDSL编写的用户手册链接:https://docs.gradle.org/current/userguide/userguide.html。用户手册中文版链接:https://legacy.gitbook.com/book/dongchuan/gradle-user-guide-/details......
  • 什么是 Shell,Shell 功能介绍和脚本编程入门实例
    1.概述Shell一种特殊的交互工具,用于用户和Linux系统交互,其功能和构成如下所示:交互工具,为用户提供了启动程序、管理文件系统中的文件和运行在Linux系统上的进程。核心是命令行提示符,命令行提示符是Shell负责交互的部分,允许输入命令,然后解释命令,并在内核中执行。包含了一组内部命......
  • Python趣味入门12:初遇类与实例
    小牛叔用轻松有趣的故事,带你进入Python的编程世界。1、类一提到类大神们就经常说封装。说白了,封装即把围绕同一个对象相同的代码、数据整合在一起。比如在某段游戏代码中(比如熊猫厨房),有一个“面包”:1、游戏提供“烘烤”的操作。->很明显这是动作->类的方法2、面包有硬度指......
  • C++ opencv检测圆
     #include<opencv2/opencv.hpp>#include<opencv2/highgui/highgui.hpp>#include<opencv2/imgproc/imgproc.hpp>#include<iostream>usingnamespacecv;usingnamespacestd;intmain(intargc,char**argv){//读取图像Matsrc......
  • C++U3-第07课-模拟枚举
    学习目标 枚举算法意思示例枚举重点[【模拟枚举】水仙花数]  【题意分析】我们需要找出区间内所有的水仙花数【思路分析】用for循环的方式去判断从100到999的每一个数将当前的数个位、十位、百位求出判断每一位的数的次方之和是否等于本身【参考代码】......