C++(c plus plus)是一种计算机高级程序设计语言,由C语言扩展升级而产生 ,最早于1979年由本贾尼·斯特劳斯特卢普在AT&T贝尔工作室研发。
C++既可以进行C语言的过程化程序设计,又可以进行以抽象数据类型为特点的基于对象的程序设计,还可以进行以继承和多态为特点的面向对象的程序设计。C++擅长面向对象程序设计的同时,还可以进行基于过程的程序设计。
1970年,AT&T贝尔实验室的工作人员D.Ritchie(丹尼斯·里奇)和K.Thompson(肯•汤普森)共同研发了C语言。
20世纪70年代中期,本贾尼·斯特劳斯特卢普在剑桥大学计算机中心工作。斯特劳斯特卢普希望开发一个既要编程简单、正确可靠,又要运行高效、可移植的计算机程序设计语言。而以C语言为背景,以Simula思想为基础的语言,正好符合斯特劳斯特卢普的初衷和设想。
1979年,本贾尼·斯特劳斯特卢普到了AT&T贝尔实验室,开始从事将C改良为带类的C(C with classes)的工作。
1983年,该语言被正式命名为C++。
以上都是C++的关键字,其中可以看到很多还是和C语言相同,上面说过,C++是C语言的扩展,所以C++是支持C语言的语法的。
在代码编写中,我们会包含许多头文件,而这些头文件中可能会含有特殊含义的一些关键字或函数,如果我们自己也定义相同的变量,则编译器便会报错,发生很多冲突。如:
在包含stdlib.h文件后,我们再创建全局变量rand便会报错
因此在一些大型项目中不同的人可能定义同一个变量名而报错,导致很多的麻烦,所以在C++中引入了命名空间用来避免。
定义命名空间,需要使用到namespace关键字,后面跟命名空间的名字,然后接一对{}即可,{} 中即为命名空间的成员。如:
其中bin可随便填写。
学会了定义,现在来看怎么使用。
我们在命名空间内定义并且未展开时是不能使用该变量的。
我们有三种方式来使用a。
可以看到以上三种都没有报错。
需要了解的是,当命名空间名字相同时,两个命名空间会自动合并。
可以看到a与Add都可以使用。
C++是由C语言扩展而来,所以用C语言的 printf 和 scanf 也是可以的,那么C++专属的呢?
首先,使用输出对象(控制台)和输入对象(键盘)时,必须包含< iostream >头文件,以及按命名空间使用方法使用std。
std是C++标准库的命名空间名,C++将标准库的定义实现都放到这个命名空间中
输出使用的关键字是 cout
其中 “<<” 是流插入运算符,“endl”是特殊的C++符号,表示换行输出,换成“\n”也是可以达成同样的效果。
输入用到的关键字是 cin
其中 “>>” 是流提取运算符。
缺省参数是声明或定义函数时为函数的参数指定一个缺省值。在调用该函数时,如果没有指定实 参则采用该形参的缺省值,否则使用指定的实参。
缺省值也就相当于默认值。
全缺省就是所有形参都赋一个缺省值。
半缺省就是只给部分形参赋缺省值。
如:
如:
一般是声明给,定义不给。
函数重载是函数的一种特殊情况,C++允许在同一作用域中声明几个功能类似的同名函数,这些同名函数的形参列表(参数个数 或 类型 或 类型顺序)不同,常用来处理实现功能类似数据类型不同的问题。
在C语言中则需要三个不同名函数才能完成。
注:返回值不同不构成重载
那C++函数重载的原理是什么呢?是因为名字修饰。
C/C++的程序运行需要经历以下几个阶段:预处理、编译、汇编、链接。
在函数调用时,编译器是通过函数的地址来调用函数的,而函数定义可能在不同文件中,就需要链接器进行链接。链接器通过函数名来寻找该函数地址,此函数名并非你所自己定义的函数名,每个编译器都有着自己的函数名修饰规则。
VS编译器的修饰规则比较复杂,可以看到,VS中 H 表示 double,N 表示 int 。
不同的编译器有不同的函数名修饰规则。
初识C++(上)就先到这里啦~~~
还有什么不懂的可以来私信博主哦~~
喜欢的话记得三连哦~~~
感谢支持!!!