一.命名空间
在编程中时常会出现重名的现象,所以C++设计了namspace来避免这个问题。namespace将全局作用域分成几部分作用域,因为在不同的作用域中允许存在同名变量,所以使用namespce可以防止同名变量冲突。
使用方法:
#include <stdio.h>
#include <stdlib.h>
int rand = 10;
// C语言没办法解决类似这样的命名冲突问题,所以C++提出了namespace来解决
int main()
{
printf("%d\n", rand);
return 0;
}
// 编译后后报错:error C2365: “rand”: 重定义;以前的定义是“函数”
二.缺省参数
在C++中支持同名函数的存在,c++之所以能够区分这些同名函数是因为c++中特有的函数命名规则。
三.函数重载
#为什么C++支持函数重载而C语言不支持?
因为C++程序在链接过程中会根据函数名以及参数命名,但是C语言只根据函数名命名放到符号表中,那么链接过程中C++程序可以区分含有不同参数的函数,而C语言不能,所以C++可以支持而C语言不支持。
四.引用
4.1 . 引用的语法
int i = 0;
int& a = i; //那么a就是i的别名
引用相当于外号或者说小名,用引用可以找到本体,正如喊“及时雨” 和 “黑旋风”可以喊到宋江和李逵一样。
引用和指针很类似,根据指针和引用都可以访问到原空间,但是访问的语法并不相同。
int i = 10;
int* pi = &i;
int& ri = i;
cout << *pi << endl; // 使用指针需要解引用
cout << ri << endl // 引用访问不需要解引用
因为指针需要解引用而引用不需要,所以引用比指针更直接。
4.2 引用的特性
引用与指针不同,引用是必须要初始化的,而且引用不能像指针那样可以随意改变指向,引用一旦确定了代表的实体,就不能再更改,如下面代码所示
int i = 10;
int p = 50;
int& ri = i;
ri = p;
cout << i << endl;
这之中ri是i的别名,ri = p 这句语句并不会使得ri变成p的别名,而是将p的值赋给ri的实体i,所以代码执行结果是50;
图一
一个变量可以有很多个引用,正如人可以有许多个称呼,这点和指针一样,一个变量也可以被多个指针指向。
特别要注意的是,从语法的角度来说,引用是不会另外开辟空间的,引用和实体共同占用同一块空间,但是从底层实现来讲,引用和指针一样是会开辟一块4 或 8 字节的空间用来存放对象的地址的,因为引用是按照指针方式实现的。
图二
图二是引用和指针的汇编代码实现,可以看到引用和指针其实本质是一样的,但是在学习过程中还是把引用当作不占空间,防止混淆。
4.3 引用的用途
# 做输出型参数
举例 : 比如在实现单链表的 “更改数据” 时,我们
#做返回值