C语言是C++的一个子集。所有C语言支持的语法在C++都基本支持并需要使用。
C C++
基本类型&变量
运算符&表达式 类和对象
语句控制 继承、多态
函数&程序控制 模板、泛型编程
指针&数组 异常处理
结构 C++库、标准模板库STL
输入输出
C库函数
运算符&表达式 类和对象
语句控制 继承、多态
函数&程序控制 模板、泛型编程
指针&数组 异常处理
结构 C++库、标准模板库STL
输入输出
C库函数
C++数据类型分为基本类型、和非基本类型(内置类型、自定义类型)
基本类型:char int float double bool void
非基本类型: 数组type[]、指针type*、结构体struct、联合体union、枚举enum、类class。
内置类型:C++基本的数据类型称为内置类型,语言内部定义的 基本类型 。
自定义类型:自己定义的类型、struct/class/enum/union等定义的类型就是自定义类型。
基本类型:char int float double bool void
非基本类型: 数组type[]、指针type*、结构体struct、联合体union、枚举enum、类class。
内置类型:C++基本的数据类型称为内置类型,语言内部定义的 基本类型 。
自定义类型:自己定义的类型、struct/class/enum/union等定义的类型就是自定义类型。
命名空间
: 给同作用域提供相同名字的变量而存在的。
可以自己设定不同的命名空间, 可以访问某个指定的命名空间,如using namespace MY;
也可以通过作用域访问符》:: (两个冒号)+变量名。 来访问指定命名空间的。
命名空间域和全局域是可以同时存在的,但是加上using namespace之后,就会目标不明确;如下代码所示;
这样就会报错,a:不明确的符号。因为全局变量和MY命名空间同时存在, 此时只要注释掉24行选中代码,就可以正常运行。
C++基本的输入输出流:
输出流:cout<<
输入流:cin>>
输入和输出时,直接写变量名,C++会自动处理,不需要描述输入输出的数据类型。省去了指定输入输出类型的步骤。
重载:
C++支持重载,重载是在同一个作用域,函数名相同,但是参数类型、参数列表不同既可构成重载,返回值不在重载判断条件之中。
C++为什么支持重载?
C++支持重载是因为C++的函数名的修饰规则;
C++在编译的过程中: 函数名的组成由函数名传参数个数和传参类型所构成。所以之所以支持重载就是因为编译后的函数名不同,C语言不支持重载是因为没有函数名修饰规则。
例如:有函数
int Add(int x,int y)
{ return x+y ;}
int Add(int a,int b,int c)
{return a+b+c;}
因为参数个数不同,函数名相同,Add函数构成重载。
传参缺省:
函数传参缺省,如上图,传参缺省可以从右往左连续缺省(Add1、2),但是不可以缺省最左边,不缺省右边的;如Add3;
因为参数传参是会有歧义。C++语法规定。
指针和引用
概念和使用:
引用是对变量的一个别名,而不死定义一个新的变量,是给变量起了一个另外的新名字,
定义格式为: 类型&新名字=已定义过得名字;
例如:int a; int &b=a;
特殊例子:
a=b; 将不同类型的b赋值给a,b会生成一个临时int类型的变量,(支持但可能会存在数据丢失),临时变量具有常性,是用const修饰的,所以引用的类型也必须加上const,所有24行代码错误,25行代码正确。此时的引用是double类型生成的临时变量的别名,而不是b的别名。
做参数:
引用做参数的时候传的是类型的别名,可以达到和指针类似的效果,利用变量的别名对变量进行操作,可以达到修改变量的作用,与指针用地址操作效果类似。
做返回值的作用:
引用做返回值可以提高效率,因为函数返回变量时会生成一个临时变量,用临时变量作为函数的返回时,如果用引用返回,就会返回改变量的别名,但是要求出了函数作用域该变量还存在。不然就会越界。
引用时要小心空指针。
指针和引用的区别:
1.引用只能在定义时初始化一次,之后不能指向其他变量。指针变量的值是可变的。
例如: int a=10; int &b=a; int *p=&a; b只能是变量a的别名,不能变成其他变量的别名,但是p指针可以更改指向其他变量。
2.引用必须指向有效的值(确定到底是谁的别名),指针可以为空。
例如: int a; int&b;b=a; 是错误的。 引用必须初始化,确定你到底是谁的别名。
3.sizeof 指针对象和引用对象的意义不同。
4.指针引用自增自减的意义不同。
5.引用比指针更安全。
6.引用是别名,指针是地址。从语法上讲引用是不需要开辟空间的,指针需要开辟,但是从底层内存上看,引用的的实现就是利用指针实现的。
但是指针比引用更加灵活,但也更危险。