.1.C++介绍
C语言是一种通用的程式語言,广泛用于系统软件与应用软件的开发。于1969年
至1973年間,為了移植與開發UNIX作業系統,由丹尼斯·里奇與肯·汤普逊,以B
语言为基础,在贝尔实验室設計、开发出來。
貝爾實驗室的比雅尼·斯特勞斯特魯普博士在20世紀80年代發明並實現了C++。
起初,這種語言被稱作“CwithClasses”(“包含類別的C語言”),作為C語
言的增強版出現。随后,C++不斷增加新特性。虚函数(virtual
function)、運算子多載(operatoroverloading)、多重繼承(multiple
inheritance)、模板(template)、异常处
理(exception)、RTTI(Runtimetypeinformation)、命名空
間(namespace)逐漸納入標準。1998年,國際標準組織(ISO)頒布了
C++程式設計語言的第一個國際標準ISO/IEC14882:1998,目前最新标准为
ISO/IEC14882:2014。根據《C++編程思想》(ThinkinginC++)一書所評
述的,C++與C的效率往往相差在±5%之間。
C++的发展历史
C几乎是C++的一个子集,所以C语言支持的语法在C++基本都支持并需要使
用。Cplusplus(C++),所以在C的基础上又有了很多新的特性。
内置类型:C++中这些基本的数据类型称为内置函数(语言内部已定义的基本类型)。
自定义类型:自用使用struct/class/enum/union等定义的。
2.为什么C++支持重载?C语言不支持--重点
函数重载的定义;在同一作用域类,一组函数的函数名相同,参数列表不同(个数不同/类型不同),返回值可同可不同。
通俗的来说,C语言重载命名会发生冲突,而C++却可以重载。那么编译器是如何解决命名冲突问题?反汇编一个含有重载的C++生成的执行文件,我们在Linux下执行命令objdump -d a.out > log.txt(反汇编并将结果重定向到log.txt文件中),通过分析文件,我们发现重载函数的名字发生了改变,这就是C++函数名修饰规则,因此C++并不会发生命名冲突。
3.缺省参数
int Add1(int a = 1,int b = 2)
{
return a + b;
}//全缺省函数
int Add2(int a,int b = 1)
{
return a+b;
}//半缺省函数
void Test()
{
Add1(); //3
Add1(1); //3
Add(1,1); //2
Add2(2); 3
}
使用缺省函数应注意:
对于缺省函数,缺省的顺序只能从右往左连续缺省,因为在栈帧中函数处理顺序也是从右往左。
4.命名空间
命名空间域是随着标准C++引入的。它相当于一个更加灵活的文件域(全局域),可以用花括号把文件的一部分括起来,并以关键字namespace开头给它起一个名字。
namespace name1
{
int a = 0;
}
namespace name2
{
int a = 0;
}
name1::a = 3;
name2::a = 4;
命名空间域解决全局命名冲突的问题.
标准C++库中的所有组件都是在一个被称为std的名字空间中声明和定义的。在采用标准C++的平台上使用标准C++库中的组建,只要写一个using提示符:
using namespace std;
就能直接使用C++库中所有的成员
或者std::成员 的方式也可以使用C++库里的成员。
其中 :: 是作用域解析符
namespace std //std是C++标准库的名字空间
{
//标准库成员
}
实现一个简单的C++程序
#include<iostream>
using namespace std;
int main()
{
std::cout<<"hello world"<<std::endl;
return 0;
}