C++(一)初识C++

C++发展历史

语言的发展是一个逐步递进的过程,C++ 是直接从 C 语言发展过来的,而 C 语言是从 B 语言发展过来的,B 语言是 BCPL 的一个解释性后代,BCPL 是 Basic CPL。其中最有趣的是 CPL 中 C 的由来,由于当时这个语言是剑桥大学和伦敦大学合作开发的,在伦敦的人员加入之前,C 表示剑桥,伦敦人员加入之后,C 表示 Combined 组合。还有一种非正式的说法,C 表示 Christopher,因为 Christopher 是 CPL 背后的主要动力。

最初导致C++诞生的原因是在Bjarne博士等人试图去分析UNIX的内核的时候,这项工作开始于1979年4月,当时由于没有合适的工具能够有效的分析由于内核分布而造成的网络流量,以及怎样将内核模块化。同年10月,Bjarne博士完成了一个可以运行的预处理程序,称之为Cpre,它为C加上了类似Simula的类机制。在这个过程中,Bjarne博士开始思考是不是要开发一种新的语言,当时贝尔实验室对这个想法很感兴趣,就让Bjarne博士等人组成一个开发小组,专门进行研究。

当时不是叫做C++,而是C with class,这是把它当作一种C语言的有效扩充。由于当时C语言在编程界居于老大的地位,要想发展一种新的语言,最强大的竞争对手就是C语言,所以当时有两个问题最受关注:C++要在运行时间、代码紧凑性和数据紧凑性方面能够与C语言相媲美,但是还要尽量避免在语言应用领域的限制。在这种情况下,一个很自然的想法就是让C++从C语言继承过来,但是我们的Bjarne博士更具有先见之明,他为了避免受到C语言的局限性,参考了很多的语言,例如:从Simula继承了类的概念,从Algol68继承了运算符重载、引用以及在任何地方声明变量的能力,从BCPL获得了//注释,从Ada得到了模板、名字空间,从Ada、Clu和ML取来了异常。

C几乎是C++的一个子集,所以C语言支持的语法在C++基本都支持并需要使用,C++在C的基础上又多了很多新的特性。

这里写图片描述

C++关键词

C++98/03关键字
这里写图片描述

C++数据类型

这里写图片描述

名字空间

名字空间域是随标准C++而引入的。它相当于一个更加灵活的文件域(全局域),可以用花括号把文件的一部分括起来,并以关键字namespace开头给他起一个名字:

namespace name1
{
    int a = 0;
}

namespace name2
{
    int a = 1;
}
name1::a = 3;
name2::a = 4;

名字空间域解决全局命名冲突的问题
标准C++库中的所有组件都是在一个被称为std的名字空间中声明和定义的。在采用标准C++的平台上使用标准C++库中的组件,只需要写一个using指示符:using namespace std;
就可以直接使用C++ 库中的所有成员。
或者std::成员 的方式也可以使用C++库里的成员

::是作用域解析符

namespace std//std是C++标准库的名字空间
{
    //标准库成员
}

缺省参数

//全缺省参数
int add1(int a = 0,int b = 0)
{
    return a + b;
}
//半缺省参数
int add2(int a,int b = 0)
{
    return a + b;
}
void test()
{
    add1();
    add1(1);
    add1(1,1);
    add2(2);
    add2(2,2);
}

没有参数就按缺省的来,有参数,就用传的参数

函数重载

函数重载的规则:
*函数名必须相同。
*参数列表必须不同(个数不同,类型不同,参数排列顺序不同)
*函数的返回值可以相同也可以不同
*仅仅返回类型不同不足以成为函数的重载

C++是如何做到重载的
C++代码在编译时会根据参数列表对函数进行重命名,例如void swap(int a,int b)会被重命名为_swap_int_int.
void swap(float x,float y)会被重命名成_swap_float_float.
当发生函数调用的时候,编译器会根据传入的实参去逐个匹配。以选择对应的函数,如果匹配失败,编译器就会报错,这叫做重载决议

猜你喜欢

转载自blog.csdn.net/mignatian/article/details/80951696