C++
第一节:入门
1:C++命名空间
在C++中解决了C语言中的一些名字的命名冲突,导致
程序崩溃,或者运行失败。命名空间很好的解决了
这些问题。
2:命名空间的定义:
在定义命名空间时需要用到namespace这个关键字
后接命名空间的名字,然后接大括号,其中为命名空间的成员。
eg:
正如图所示,命名空间中可以定义变量,数组,还有函数。
在同一个工程中允许存在多个名称相同的命名空间,
编译器最终会将其合成为一个命名空间,但是在两个相同名字的
命名空间中,不能同时定义一个相同名称的变量或函数。
3:命名空间的使用
*假命名空间和作用域限定符“::”。
*用using将命名空间中的成员引入
相当于定义了一个全局变量
*如果用这个空间中的成员次数较多可以用using直接将
命名空间引入。
4: C++的输入与输出
在C++中输入输出与C语言有着很大差异,虽然也可以
用printf输出,但是在c++中有了更为简便的输出输入。
*用“cout<<123<<”change word”<<endl;”;
这条语句就可以进行输出
用“cin>> ;”;
这条语句进行输入;
在C++的输入输出中不需要再定义繁琐的数据格式控制
,编译器直接会帮你实现。
*在使用标准输入输出时必须使用包含<iostream>的头文件以及std标准命名空间
因为在C++中的头文件的一些东西放在了命名空间中。
所以在C++中的头文件最好使用这个。
5:C++缺省函数
缺省函数是声明或定义函数时为函数的参数指定一个默认值
就是当函数没有传参时用的是默认值,传参时用的实参。
*全缺省参数
就是没有传参
*半缺省参数
要在定义默认参数时从右向左定义,不能隔着给。
Eg:
而却缺省参数不能在函数声明与定义中同时出现。
缺省值必须是常量或者全局变量。
6:函数重载
类似于一个词的多重含义,“谁也赢不了”
*函数重载的概念
在C++中可以允许在同一作用域中有重名的函数
(函数的形参列表(餐宿个数,以及参数类型)必须不同)
eg:
在调用函数时不能出现参数格式模糊的参数。
*名字修饰
在函数的编译过程中会将函数的名字进行重新改变。
例如C语言中,在预编译过程中将函数前面加上下滑线就是重新编写名称。
*extern “C”
在C++的工程中可能需要将某些函数按照C的风格来编译
,要加载函数前加extern“C”。
7:引用
*引用概念
引用不是新定义一个变量而是给已存在的变量取了个别名,它
和它引用的变量共同用一块空间。
eg:
Int a=10;
Int& ra=a;
其中两个的地址是一样。
*在这里&符号不是解引用而是类型标识符。
引用的声明方法:类型标识符&引用名=目标变量名
*引用特性
在声明引用时,必须同时对其进行初始化。
Eg:
Int a=10;
Int& ra=a;
一个变量可有多个变量
引用一旦引用了一个实体,就再不能引用其他实体
*常引用
当目标变量为常量时需要用const加在引用前
引用不能直接引用一个常量,类似于int&b =10;为错误。
在引用时类型要一致
*使用场景
引用可以做*参数*做返回值*
当用引用做返回值时,必须在函数外部定义好一个引用
*传值,引用效率比较高
*引用和指针的不同点
引用定义时必须初始化,指针不需要
引用只能在初始化时引用一个实体,而指针可以任意指向
没有NULL的引用,有空指针
在sizeof中含义不同:引用是其类型大小,而指针是地址空间的大小
当引用+1的时候是实体+1;指针+1是向后偏移一个类型大小
有多级指针无多级引用
访问实体不同,指针要解引用,引用直接用
引用比指针安全
8内联函数
*概念
以Inline修饰的函数叫做内联函数,在编译期间编译器会将函数展开,
替代函数体。
这样一来节省了时间,节省了调用函数,但是增大了空间。
*特性
Inline是以空间换时间的做法,当代码很长或者是递归时不用。
Inline对于编译器是一个建议,且不建议声明和定义分离,分离会导致链接错误
9:宏的优缺点
优点
*增强代码的复用性
*提高性能
缺点
*不方便调试(在预编译阶段进行了替换)
*导致代码的可读性差,可维护性差,容易用错
*没有类型安全的检查
*用内敛函数/const代替宏
10:auto关键字
*auto现在被作为一个新的类型指示符来指示编译器。
*eg:
Auto a=10;
这里auto就是int;
Auto不是一种类型的声明而是类型声明时的占位符,在
编译期间会替变成实际类型,
*auto的使用规则
Auto不能做函数参数
Auto不能直接用来声明数组
11:范围for
For的循环后的括号由冒号分为两部分:第一部分用于迭代变量
第二部分是范围。
Eg:
void TestFor()
{
int array[] = { 1, 2, 3, 4, 5 };
for(auto& e : array)
e *= 2;
for(auto e : array)
cout << e << " ";
return 0;
}
*范围for的使用条件
For循环迭代的范围必须是确定的
12:指针空值nullptr
用nullptr表示空指针,在C++中是作为新的关键字引进的。
为了提高健壮性,以后就用nullptr表示空指针。