C++友元&&命名空间&&数据类型&&内联&&重载&&缺省

这篇具有很好参考价值的文章主要介绍了C++友元&&命名空间&&数据类型&&内联&&重载&&缺省。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

1.友元

(1)全局函数作为友元

利用友元这个语法,我们可在函数里访问类里面定义的私有成员;

先定义了一个默认构造函数对类里面的成员进行初始化;goodgay是一个全局的函数,我们想要直接打印私有成员变量就会报错,我们只需要把这个全局函数的定义的第一行放到类里面去,在前面加上friend关键字就可以访问类里面的私有的成员变量bedroom了;

C++友元&&命名空间&&数据类型&&内联&&重载&&缺省,C++,c++,开发语言

(2)类作友元

C++友元&&命名空间&&数据类型&&内联&&重载&&缺省,C++,c++,开发语言

上面的这段代码比较长,可能比较复杂,但是并不是很难理解,我们首先从main函数开始阅读,调用了test01函数,这个函数会使用我们的goodgay实例化一个对象gg,我们让这个对象调用函数visit;我们使用goodgay实例化对象首先就要调用它的默认的构造函数,这个函数里面我们在堆区为我们创建的building1指针开辟空间;

visit函数想要访问building类里面的成员,我们是可以访问他的公共的成员的,但是我们不能访问私有的成员,我们只有在buiding这个类定义里面添加frieng class goodgay这句话,我们才可以在visit函数里面访问building类里面的私有的成员;

其实仔细观察我们就可以发现,我们在goodgay这个类里面定义了building类型的指针,这个时候就已经是在一个类里面使用另外的一个类进行定义了,所以我们的goodgay里面的函数visit可以访问building类里面的公共成员;另外,我们需要注意的就是我们这个是在类的外面去写对应的构造函数,我们在累的里面必须要进行相应的声明,而且在类的外面,我们需要先使用类名加上两个冒号指明接下来要写的函数是属于哪个类的;

(3)成员函数作友元

成员函数就是类里面的函数,这个函数要想成为友元,做法基本上是和我们的第一个的全局函数的操作方法基本是一样的,不同点就在于我们的成员函数是在一个指定的类里面的,我们需要标明函数的作用域,也就是函数的前面要加上类的名字和两个冒号;

C++友元&&命名空间&&数据类型&&内联&&重载&&缺省,C++,c++,开发语言

2.命名空间

C++友元&&命名空间&&数据类型&&内联&&重载&&缺省,C++,c++,开发语言

(1)上面的就是命名空间的一种定义的方法,我们使用namespace加上空间的名字来定义我们的命名空间,上面就是我们自己进行定义的两个命名空间,命名空间的存在的意义就是可以增加标识符的使用率,减少编程的过程中因为命名冲突而产生的影响,我们的命名空间里面定义的变量和函数就属于这个命名空间;

(2)命名空间只能够在全局区域里面进行使用,不能在主函数里面使用,我们在主函数里面初始化命名空间里面的变量和函数的调用的时候,都要注明对应的命名空间,这个时候就要使用的是::他的名字叫做作用域分辨符;我们使用这个符号就可以进行相应的函数的调用和变量的初始化C++友元&&命名空间&&数据类型&&内联&&重载&&缺省,C++,c++,开发语言

(3)我们如果感觉每次都这样做很麻烦,我们可以先使用using namespace说明对应的命名空间,这样就可以省略对应的作用域了,我们需要注意的就是当多次进行省略的时候,我们需要防止产生二义性,就是像我们这个图片里面的报错一样,我们的两个命名空间里面的变量和函数都是一样的,这个时候编译器就无法知道我们想要调用哪个,因此我们需要注意这种情况,但是如果我们使用命名空间::作用域分辨符::变量这种写法,就一定不会出错;

(4)作用域分辨符还有一个用法就是之前我们了解到的面对局部变量和全局变量相同时,会优先打印的是局部变量,我们使用预作用分辨符就可以打印全局变量,示例如下:效果显而易见

C++友元&&命名空间&&数据类型&&内联&&重载&&缺省,C++,c++,开发语言

3.C++里面新的数据类型

(1)指针&&布尔类型

原来我们学习的C语言里面的空指针是NULL,在C++里面,我们使用nullptr代表空指针;

bool类型我们之前也接触过,num我们赋值的是大写的字母A,只要不是0就表示的是真的,我们打印输出这个布尔类型的数据,打印的结果就是1(实际上布尔类型的数据的打印的结果只能是0或者1),我们使用sizeof计算大小,布尔类型的数据只会占一个字节,大大的节省了我们的内存空间

C++友元&&命名空间&&数据类型&&内联&&重载&&缺省,C++,c++,开发语言

(2)引用类型

引用可以作为函数的参数

C++友元&&命名空间&&数据类型&&内联&&重载&&缺省,C++,c++,开发语言

引用就是取别名,这个别名的符号和我们的取地址的符号是完全一样的,但是我们不要往取地址上面去想,我们就理解为取别名就可以了;

这段代码是先让指针p指向的是num=10;然后改变指针的指向,我们的函数传递的是p指针,我们是使用&temp来进行接受的,这个里面两者的数据类型要相互匹配,同样是int*类型,后面加上&表示这个temp是一个引用的类型,实际上temp就是p指针的别名;我们修改temp的指向相当于修改的是p指针的指向,我们让temp指针指向ret这个全局变量,相当于是p指针指向了这个全局变量,当我们的函数调用完成的时候,我们对p指针姐应用,就得到的是全局变量ret的值100;

引用可以作为返回值

C++友元&&命名空间&&数据类型&&内联&&重载&&缺省,C++,c++,开发语言

我们的自定义函数print返回的是一个全局变量,不能返回一个局部的变量,因为局部变量的空间可能会被释放掉,我们的引用作为返回值相当于是返回了一个变量,因此我们可以放在等式的左边,但是普通的不带引用的函数的返回值解释一个数值,如果放在等式的左边就会报错,因为左边是必须可以修改的才行;

下面的是右值引用(理解即可):

右值引用的要求是必须传递常量,而且主函数里面给函数传递的实参必须是常量,不能是变量,我们的函数里面,可以对形参的值进行改变。

C++友元&&命名空间&&数据类型&&内联&&重载&&缺省,C++,c++,开发语言

4.内联函数

内联函数是指使用inline修饰的函数,这个函数变成内联函数之后,就可以提高程序的运行的效率

(1)内联函数是以以空间换时间;

(2)短小精悍的函数才可以成为内联函数,因为这个函数一旦成为内联函数之后,就会以二进制代码的方式存储在内存里面,如果我们的函数的代码很长,就会导致这个转化之后的二进制的代码量非常大,这个就无法凸显其作为内联函数的优势了;

(3)我们在结构体里面定义的函数和类里面定义的函数默认为内联函数;

比如说我们在写OJ的时候,出现程序的运行时间过长,如果符合内联函数的使用条件,我们就可以把这个函数转换为内联函数,这样就可以提高程序的运行效率,具体是提高了多少,我们使无从得知的;C++友元&&命名空间&&数据类型&&内联&&重载&&缺省,C++,c++,开发语言

5.函数重载

允许同名但是不同参数的函数存在:参数不同可以是参数的个数不同,参数的顺序不同,参数的数目不同;

根据我们的主函数里面的传参,编译器会自动识别参数类型,自动匹配相对应的函数;

C++友元&&命名空间&&数据类型&&内联&&重载&&缺省,C++,c++,开发语言

6.函数缺省

必须从右边向左边进行缺省:

如果我们调用的时候,给了参数,计算的时候就会使用我们传递过去的参数,如果没有给定参数,编译器就会使用默认的参数。当两者同时存在的时候,我们自己传递过去的值的优先级高于默认值

C++友元&&命名空间&&数据类型&&内联&&重载&&缺省,C++,c++,开发语言文章来源地址https://www.toymoban.com/news/detail-855762.html

到了这里,关于C++友元&&命名空间&&数据类型&&内联&&重载&&缺省的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【C++】命名空间、缺省参数和函数重载

    在一个大型的项目中,不同成员写的程序中会不可避免的带来 命名冲突 的问题,这种情况下命名空间可以很好的解决这种命名冲突大的问题,它可以用来避免不同的库或模块中的名称(name)发生冲突。 名称可以是变量、函数、类、结构、枚举等等。此外,命名空间可以让我

    2024年02月17日
    浏览(44)
  • 【开懂C++】命名空间 函数重载 缺省参数

    在编写C语言代码时,当工程较大时,很容易产生变量命名冲突的情况——一般有两种冲突的情况 1.变量名与库中的函数名、冲突 。 2.工程模块化搭建时不同文件的命名冲突 。 而C++为了优化这一缺陷,提出了命名空间的概念。 命名空间使用的是 namespace ,命名空

    2023年04月18日
    浏览(90)
  • C++入门 上(命名空间 缺省参数 函数重载)

    在C/C++中,变量、函数和后面要学到的类都是大量存在的,这些变量、函数和类的名称将都存在于全局作用域中,可能会导致很多冲突。使用命名空间的目的是对标识符的名称进行本地化,以避免命名冲突或名字污染,namespace的出现就是针对这种问题的。 定义命名空间

    2024年02月19日
    浏览(46)
  • C++基础知识 (命名空间、输入输出、函数的缺省参数、函数重载)

    🌠 例1: #include iostream 标准输入输出 std 是 c++ 标准库的命名空间,将标准库的定义实现都放到这个命名空间中 using namespace std 展开 std 里的内容 cout   c 代表的是 console 控制台的意思, out 有输出的意思 流运算符 流插入 endl 等价于 \\\'n\\\' 在 c++ 中,变量、函数和类的名称存在于

    2024年02月15日
    浏览(45)
  • [C++] C++入门第一篇 -- 命名空间,输入输出,缺省函数,函数重载底层原理

      目录 1、  2、命名空间 2.1 命名空间的定义 2.2 命名空间的使用方式 2.2.1 加命名空间名称及作用域限定符 2.2.2 使用using将命名空间中某个成员引入 2.2.3 使用using namespace 命名空间名称引入 3、C++输入与输出 4、缺省参数 4.1 缺省参数的概念 4.2 缺省参数分类 4.2.1 全缺省参

    2024年02月15日
    浏览(54)
  • 开启C++之旅(上):探索命名空间与函数特性(缺省参数和函数重载)

    之前浅显的讲解了数据结构的部分内容:数据结构专栏 那么今天我们迎来了新的起点:C++的探索之旅 在c中: 严格的编译器会直接 报错 : rand我们都知道是产生随机数的函数,现在我定义了一个全局变量rand,显然是有 命名冲突 所以c++就提供了解决方案 想必学过c的大家第一

    2024年02月01日
    浏览(48)
  • 【C++初阶】关键字&命名空间&缺省函数&函数重载入门必看!!!超详解!!!

     ========================================================================= 主页点击直达: 个人主页 我的小仓库:代码仓库 C语言偷着笑: C语言专栏 数据结构挨打小记: 初阶数据结构专栏 Linux被操作记:Linux专栏 LeetCode刷题掉发记: LeetCode刷题 算法: 算法专栏  C++头疼记: C++专栏 计算机

    2024年02月07日
    浏览(48)
  • 【C++深入浅出】初识C++上篇(关键字,命名空间,输入输出,缺省参数,函数重载)

         目录 一. 前言 二. 什么是C++ 三. C++初探 四. 命名空间 4.1 为什么要引入命名空间 4.2 命名空间的定义 4.3 命名空间使用 五. C++的输入输出 六. 缺省参数 6.1 缺省参数的概念 6.2 缺省参数的分类 七. 函数重载  7.1 函数重载的概念 7.2 函数重载的条件 7.3 C++支持函数重载

    2024年02月13日
    浏览(181)
  • 【C++初阶】C++基础(上)——C++关键字、命名空间、C++输入&输出、缺省参数、函数重载

    目录 1. C++ 2. 命名空间 2.1 命名空间的定义 2.2 命名空间的使用 3. C++输入输出 4. 缺省参数 4.1 缺省参数概念 4.2 缺省参数分类 5. 函数重载 5.1 函数重载概念 5.2 C++支持函数重载的原理——名字修饰(name Mingling) 5.3 extern \\\"C\\\" ❀❀❀ 没有坚持的努力,本质上并没有多

    2024年02月15日
    浏览(58)
  • 【C++初阶】一、入门知识讲解(C++关键字、命名空间、C++输入&输出、缺省参数、函数重载)

    ========================================================================= 相关代码gitee自取 : C语言学习日记: 加油努力 (gitee.com)  ========================================================================= 接上期 : 【数据结构初阶】十一、归并排序(比较排序)的讲解和实现 (递归版本 + 非递归版本 -- C语言实

    2024年02月05日
    浏览(52)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包