C和C++的区别 :
C++的头文件没有.h,C++对C语法做了兼容;所以C的头文件中仍然可以在C++文件中使用,一般去掉C钟头文件的 .h在前面加上c
拓展名的区别:
C语言:使用gcc编译器
C++ .cpp , .C ----> 使用g++编译器,g++必gcc编译器语法更加严格(主函数的返回值类型不能修改)
语法区别(语法的扩充)
1命名空间
2函数重载(一名多用)
3字符串的使用(string 类型)
4引用(和C中的指针类似)
5面向对象的特征(封装,继承和多态)C++是面向对象的语言
6 STL标准模板库
7模板编程
8智能指针
9 lambda表达式
输入输出流类
- 输出 cout
Cout 是ostream类提供的类对象,printf是c库中 的函数
Cout可以实现级联的输出(连续输出多个)
如果使用cout,需要倒入头文件<iostream>,引入 命名空间std
- cout控制格式的输出
通过关键字控制输出格式,或者通过函数控制 输出格式 #include<iomanip>
Setbase(); 控制进制输出
Setw();控制宽度输出 ----->left关键字
Setprecison();控制包含小数点在内的点位数输出
【2】输入 cin
是istream输入流提供的类对象
在istream中对>>运算符进行了运算符重载,>>变成输入运算符
仍然不需要格式符,会根据类型自动推导
- Cin 的基本使用
- 不需要格式符来控制输入的类型,可以级联的输入
命名空间
Namespace 命名空间名
#include <iostream>
using namespace std; 导入标准命名空间
Namespace 自己定义的命名空间
如何使用命名空间中的标识符
定义在命名空间中的标识符,不能直接使用,需要导入后再使用
全局导入命名空间
Using namespace 命名空间名;----->该语句表示,导入命名空间中的所有标识符,在该语句后面,命名空间中的所有标识符可以任意使用
局部导入命名空间
Using namespace 命名空间名; --->该语句表示,导入命名空间中的所有标识符,在该语句后面,命名空间中的所有标识符可以任意使用(一般写在头文件下方,主函数上方)
局部导入命名空间中标识符
------> :: 域限定符
在那个位置使用标识符,就在那个位置导入标识符
导入命名空间中的部分标识符
使用using 命名空名 ::表识符号; ----->在该语句后,可以使用导入的指定标识符
在命名空间中声明函数,在命名空间外定义函数,需要在函数名前加上命名空间名 ::函数名
命名冲突问题
当同时可以访问两个同名标识符时发生命名冲突。
命名空间和局部变量冲突
如果不导入命名空间 ,不会发生冲突
即使导入了命名空间,默认访问局部变量,也不发生访问的冲突
如果导入命名空间以后,想要访问明明空间中的标识符,在标识符前加上明明明空间名
命名冲突和全局变量冲突
如果不导入命名空间中的标识符,不会发生冲突,直接访问全局变量。导入命名空间中标识符后发生冲突;
1 访问命名空间中的标识符:命名空间名 : 标识符号
访问全局变量 :: 标识符号(访问全局变量)
两个命名空间中的标识符 冲突
必须是在同时导入了两个命名空间时才会发生标识符冲突
解决方式 命名空间名 ::标识符 ------> 直接指向访问某一个命名看空间中的标识符
匿名空间
没有名字的命名空间就叫做匿名空间
匿名空间中的标识符,无需使用using 导入,也可以访问
如果发生冲突,可以使用 ::标识符号,来访问匿名空间的标识符
如果存在命名空间和匿名空间标识冲突的情况,(尽量不要导入有名字的命名空间中的标识符)
如果匿名空间和全局变量冲突 ::标识符号(默认访问全局变量)
命名空间的添加
如果定义了同名的命名空间,会自动到合并同一个命名空间
将后续定义的内容添加到原来的命名空间当中
命名空间的嵌套,当存在嵌套命名空间时,只需要根据定义顺序,通过域限定符一层一层访问下去即可
命名空间的重命名
namespace 新名字 =旧名字
在该语句后,新名字和旧名字都可以继续使用
字符串的使用 (string 类)
String 类 :是 C++中封装好的一个类,C++中封装了string 类型用于定义字符串
定义字符串 : string 变量名
C和C++字符串的转化
C的字符串可以直接转换成C++的字符串
而C++的字符串不能直接转换成为C风格的字符串,需要借助与特殊函数data(), c_str();//这两个函数的返回值,都是char*类型的指针
String类中常用的函数
- at ()
按位置访问字符串,使用at 访问字符串时超出字符串范围代码会抛出异常
at函数在访问越界是报错
II) empty() /clear()
empty() : 判断字符串是否为空
Clear();清空字符串
Iii)length() size()
计算字符串的长度
String类型可以直接使用运算符进行比较(因为在string 类中对运算符进行了重载)
输入字符串
直接使用cin不能获取带空格的字符串,所以使用getline()函数获取带空格的字符串
Getline()的两个参数 ,第一个参数是输入流对象,第二个参数是输入的字符串变量
C++中的bool类型
C不支持bool类型,但是C++中直接支持bool类型,结果是一个逻辑值,非0即1,true和flase
bool类型的变量可以使用true 和flase赋值,也可以使用数值赋值
cout输出时,默认使用数字表示法输出bool类型的值
如果使用单词输出bool类型的值,在输出是加上boolalpha,想要恢复数字表示法加上noboolalpha
Bool类型的大小1byte,因为计算机分配内存的基本单位是字节