目录
1.C++
1.1.什么是C++
C语言是结构化和模块化的语言,适合处理较小规模的程序。对于复杂的问题,规模较大的 程序,需要高度的抽象和建模时,C语言则不合适。为了解决软件危机, 20世纪80年代, 计算机 界提出了OOP(object oriented programming:面向对象)思想,支持面向对象的程序设计语言 应运而生。 1982年,Bjarne Stroustrup博士在C语言的基础上引入并扩充了面向对象的概念,发明了一 种新的程序语言。为了表达该语言与C语言的渊源关系,命名为C++。因此:C++是基于C语言而 产生的,它既可以进行C语言的过程化程序设计,又可以进行以抽象数据类型为特点的基于对象的 程序设计,还可以进行面向对象的程序设计。(加粗的字也就是C++相比于C最明显的区别)
1.2.C++的重要程度
下图数据来自TIOBE编程语言社区2021年12月最新的排行榜,在30多年的发展中,C/C++几乎一 致稳居前5。
由此可见,学习C++是非常有必要的。而且由于C++是面向对象编程,在后端开发中使用C++可以在一定程度上减少代码量。接下来,我们就一起步入C++的学习。
2.C++入门
2.1.关键字
C++的关键字有63个,相较于C语言的32个增加了31个,在本篇文章中不做详细介绍,下图是C++关键字的总览:
2.2.命名空间
在正式讲命名空间前,先提出一个疑问,就是大家或许在写C++或者看C++的代码时经常看到下图这两个语句:
这里我提出两个疑问:
①为什么这个头文件不像C语言一样以.h结尾?
②为什么要写下面这句话、这句话有什么用?
2.2.1.C语言的命名弊端
在解释这两个问题之前,我先讲一下C语言在定义变量和函数前的弊端:
在C语言中这个函数和这个变量是不允许同时存在的,因为这个变量和函数重名了。这个弊端在平时做题的时候显示的不太明显,因为用到的函数和变量数量比较少。但是如果是在一个项目中,这个弊端就显现出来了:如果两个工程文件中都出现了max函数,那么在C语言中至少得有一个项目中的max要改名,这在工程中的工作量是巨大的,为了避免这个问题,我们的祖师爷在C++引入了命名空间。如下图所示:
2.2.2.命名空间以作用限定符
这里把max函数放到了Max命名空间中,我们发现不冲突了。但是为什么呢?因为编译器在搜索的时候先搜索局部变量再搜索全局变量,默认是不搜索在命名空间的变量和函数的。所以我们像下图一样调用也是行不通的。
那么我们该怎么调用这个函数呢?C++用::作为作用限定符。我们可以如下图一样调用:
2.2.3.命名空间展开
这句话就是告诉编译器,去Max命名空间中找这个函数,所以调用成功了。但是如果我们下面要调用这个函数几千次,我们要一次次写这个么,这样就显得太麻烦了。如果在没有冲突的情况下,我们可以讲命名空间展开:
展开了命名空间,编译器就可以去这个命名空间里寻找函数或者变量了。那么我们的max函数也就可以正常使用了。
当然这里可以成功编译,我删除了上面的int max=0;的语句,也就是说展开命名空间,可能会产生冲突的变量名和函数,展开需谨慎啊!当然这个问题也是有方法去缓解的:
这里我重新创建了一个命名空间,如上图所示,这里只部分展开了calo命名空间的Max函数,编译器是可以找到Max并正常使用的,但是这个Min函数就不可以正常使用了,因为它没有被展开也没有命名空间限定符,所以它不能使用。
2.2.4.命名空间合并与嵌套
上面我们提到命名空间展开,那么命名空间名字一样,是不是就一起展开了,用作用限定符寻找,命名空间名字一样,是不是就到全部同名的命名空间里寻找了。所以,我们认为命名空间是可以合并的,如下图的两个命名空间是可以合并的:
所以就可以两个不同的程序员写同一个命名空间,所以这里就引出了另一个问题:如果两个函数在命名空间内冲突了,那么怎么办呢?
解决办法就是命名空间嵌套如下图所示:
使用方法与最外层的命名空间类似,可以展开也可以用限定符访问:
到这里我们也就可以解释我们开头抛出的问题了。①为什么不用.h结尾,是因为库中的函数全部写进了命名空间std内。②using namespace std; 意思就是展开std命名空间。
2.3.C++输入&输出
如同我们学习C语言一样,我们的C++也想向这个世界问好。我们C语言用的printf,那我们的C++呢?这里直接上代码:
#include<iostream>
using namespace std;
int main()
{
cout << "hello world"<< endl ;
return 0;
}
这里的cout为什么可以实现打印的功能我们先不解释,这里的endl可以理解为C语言中的'\n'
输入语句:
#include<iostream>
using namespace std;
int main()
{
int a=0;
cin >> a;
cout << a << endl;
return 0;
}
这里的cin就相当于C语言中的scanf,怎么实现的现在也不细说(这里的>>是流提取运算符,<<是流插入运算符,不是C语言中的位运算符)。 在上面的代码中我们可以看到,C++的输入输出不需要输入数据的类型,C++可以自己匹配进行输入输出,这对我们程序员来说是很友好的,在一定程度上也便利了我们程序员写代码。
3.结语
今天我们入门了C++也正式开启了C++的学习,在未来的学习中,我将分享更多的学习经验,写的不好的地方欢迎大家一起讨论哈。