C++
首先C语言是C++的一个子集,所以C语言支持的语法在C++上基本都支持并且都能被使用。
C++在基本数据类型上,比之C语言多了一个类的(非基本数据类型)。其他的譬如字符,整形,浮点型,逻辑型,无类型这五大基本数据类型和数组,指针,结构体,联合体,枚举这五大非基本类型都是一样的,唯独多了一个 “类” 。
一: 空间域
与此同时 C++ 引入了一个名字空间域的 概念
二:命名空间
using namespace std:
命名空间是C++引入的可以由用户名的作用域,用来处理程序种常见的同名冲突。
命名空间:实际上就是一个由程序设计者命名的内存区域,程序设计者可以根据需要指定一些有名字的空间域,把一些全局实体分别放在各个命名空间中,从而与其他全局实体分隔开来。 C++标准要求系统提供的头文件不包括后缀.h,例如iostream、string。为了表示与C语言的头文件有联系又有区别,C++所用的头文件名是在C语言的相应的头文件名(但不包括后缀.h)之前加一字母c。例如,C语言中有关输入与输出的头文件名为stdio.h在C++中相应的头文件名为cstdio。C语言中的头文件math.h,在C++中相应的头文什名为cmath。C语言中的头文件string.h在C++中相应的头文件名为cstring。注意在C++中,头文件cstnng和头文件strmg不是同一个文件。前者提供C语言中对字符串处理的有关函数(如strcmp,ctrcpy)的声明,后者提供C++中对字符串处理的新功能。
三:重载
重载也是 C++和C语言的一个区别
在C语言中,写两个函数,两个函数名不能相同,但是在C++中却可以,重载就是 同一作用域内,一组函数的函数名相同,参数列表不同,返回值可以相同也可以不相同的函数。
原因:在C语言中,编译器调用函数时是在函数名称前面加_,类如在.CPP文件中如果定义两个 完全相同的函数是不会有问题的。
但是 当把文件名从.cpp改成.c文件那么编译器就会出现错误
所以 C++重载 是跟C语言的一个主要区别。
C语言中编译器编译时调用函数时在函数 前面加- ,所以对于这两个函数编译器都认为是_fun,但是C++在LINUX环境中 通过objdump-S 看代码的源文件和汇编语言时,发现编译器在解析这两个函数时是 一个是 _z3funii, 一个是_z3fundi,所以c++中函数名称是 -z加上函数的名称的个数再加上变量的首字母组合。
四:引用
引用又是C++与C语言的一个重要区别。
首先 引用其实可以类比我们生活中的别名,引用其实就是别名。
格式: 类型 & 引用新的变量名 = 已经定义过的变量名 注意:引用只能在初始化的时候引用一次,不能重复多次引用,但是一个变量可以取多个别名。
指针与引用的去区别 :
1:引用与指针,引用只能被初始化一次,之后不能改变其他变量要(从一而终)。
2:引用必须指向有效的变量,而指针可以指向NULL。
3:sizeof引用与指针,sizeof引用的话,得到的是所指向变量的大小,而sizeof指针是对象地址的大小。
4:指针与引用自增自减意义不同。 指针加加 是相对类型加加 ,引用加加就是 所指向变量的值加加。
5:相对而言,指针比引用更危险,因为稍微不assert就有可能对空指针进行处理与操作,而引用这种情况就大大降低。
但是引用也是有可能会危险 譬如:
但是一般情况下,不会这样写代码吧。
五:C++的另一特色面向对象
OOP
在我们主观的世界中, 就是抽象类别 和实体之间的相辅相成。
C++为了与现实生活更贴近就定义了类和对象这两个计算术语。 另外C++不是 纯面向对象的语言而是基于面向对象的语言。
C++ 一个类由两部分组成:1:数据 2:程序 。 它有三种访问限定符 1:public 2: private 3 :protect
简单的 public 程序 :
隐含的 this 指针:
1: 每个成员都有一个 this 指针 2: 编译器会对其进行 自动处理 3:This指针是成员函数隐式的指针参数