【C++】C++入门1

文章目录

  • 前言
  • 一.命名空间
    • 1.语法
    • 2.发明过程
    • 3.使用样例
    • 4.作用域
    • 5.浅看std
    • 6.小知识点&小建议
  • 二.函数重载
    • 1.发明过程
    • 2.语法
    • 3.函数重载如何实现的?
  • 三.缺省参数
    • 1.语法
    • 2.小细节&小建议

前言

此篇文章是学习C++的第一节笔记,主要内容是学习C++作为C语言的延伸的一些新语法,为之后的类和对象,STL学习做铺垫

一.命名空间

1.语法

我们在之前或多或少接触了一些C++的代码,都会看到最开始的
在这里插入图片描述
第一个#inlclude我们并不会陌生,是包含了一个头文件
其实我们还可以理解,类似于C语言的#inlcude
前者其实是C++的标准输入输出流(io流)

但是接下来的using namespace std;却让我们摸不着头脑
其实using namespace 就是我们将要学习的命名空间std是一个命名空间的名称

2.发明过程

我们知道C++的创建,是为了完善C语言部分语法的不便或者坑的
而从学习编程开始,命名就是一个会困扰我们的点:这个变量取什么名?这个函数取什么名?不同变量和函数不能取同名。
我们经常为取名而困扰。虽然困扰,但并不是什么大问题,但是倘若我们以后做项目,每个工程师都有自己要编写维护的.h和.cpp文件。最后合并的时候,**出现了一个函数或者一个交互数据重名,我们该如何解决?**任何一方更改都需要改动大量代码,这不是我们希望看到的。所以命名空间就是用来解决这一问题的

3.使用样例

我们站在C语言的角度,举个队列和链表的例子
【C++】C++入门1_第1张图片
【C++】C++入门1_第2张图片
链表和队列的结构体名称都为Node,分写在两个.h文件。当我们在main函数中使用Node时,C语言无法分辨Node指代哪个结构。但我们使用命名空间就可以分辨
【C++】C++入门1_第3张图片
通过命名空间的名称区分,我们就可以管理同名称的变量或函数了

PS: " :: "是作用域符

4.作用域

此处我们引用作用域的解释
同变量一样,变量有局部变量和全局变量,作用域同样有局部域和全局域
但作用域还有,语句作用域,类作用域,命名空间作用域和文件作用域。
其本质就是指代一块空间

5.浅看std

回到最开始的问题。using namespace std;是什么?
我们上面了解到std是一个命名空间的名称,那这个命名空间的描述在哪呢?这时我们意识到,描述在#include里。同我们使用链表一样,我们使用了标准输入输出流的命名空间使得我们可以使用cout和cin

6.小知识点&小建议

::默认是全局域
【C++】C++入门1_第4张图片
二.不建议全局展开
【C++】C++入门1_第5张图片
因为std中包含很多函数和变量,一旦全局展开,那么一旦你所写的代码和其中的命名冲突,那么便会冲突。
【C++】C++入门1_第6张图片

二.函数重载

1.发明过程

函数的名称和参数都是确定的,这样就导致函数的复用性受到一定的约束
例如一个加法函数

int add(int x,int y)
{
    return x+y;
}

这个函数只能用来整型的相加,浮点型则不可套用。

C++的创始人便开发了函数重载解决这一问题
即函数可以重名,但必须通过参数的不同来区分

2.语法

参数的不同分为三类

个数不同

【C++】C++入门1_第7张图片
数据类型不同

【C++】C++入门1_第8张图片
顺序不同

【C++】C++入门1_第9张图片

3.函数重载如何实现的?

【C++】C++入门1_第10张图片
先说结论:编译器通过对函数的命名区分不同作用的函数
第一个func1是Linux中gcc的汇编代码,其中func1函数的名称就是func1
第二个是func1在Linux中g++的汇编代码,其中funct1函数的名称是 _Z5func1id
5代表函数名长5,funct1是函数名,i和d分别是int和double的简写
第三个_Z5func1Pid。Pi代表int*

那为什么返回值不能作为区分的标志呢?
因为函数调用是,没有涉及到返回值,我们首先要使用函数才能知道返回值类型,所以返回值不可以作为匹配函数的标志

三.缺省参数

1.语法

缺省参数就是在定义函数时,就给其参数一个默认值
【C++】C++入门1_第11张图片
【C++】C++入门1_第12张图片
没有传值就使用定义时给的默认值,传值则使用传值

2.小细节&小建议


【C++】C++入门1_第13张图片

半缺省
【C++】C++入门1_第14张图片
在这里插入图片描述

你可能感兴趣的:(C++学习笔记,c++,学习,开发语言)