介绍C++
C++是C语言的继承,它是既可以进行C语言的过程化程序设计,又可以进行以抽象数据类型为特点的基于对象的程序设计,还可以进行以继承和多态为特点为特点的面向对象的程序设计语言。
重载
函数重载是指同一个函数名可以对应多个函数实现,函数名相同而参数列表不同的函数就是函数的重载。例如对Swap()交换函数进行重载,可以实现两个整数的交换,两个小数的交换,两个字符的交换······
函数重载规则:
- 函数名必须相同;
- 函数列表必须不同;
- 函数返回值类型可以不同;
注意:
参数列表包括:参数的类型、参数的个数、参数的顺序,只要有一个不同就叫做参数列表的不同
例如:
func(int a, int b, int c)
func(char a, char b, char c)//参数类型不同
func(int a, int b)
func(int a)//参数个数不同
func(int a, char b, double c)
func(int a, double c , char b)//参数顺序不同
例:
void Swap(int *x,int *y)//交换两个整数
{
int tmp = *x;
*x = *y;
*y = tmp;
}
void Swap(char *x, char *y)//交换两个字符
{
char tmp = *x;
*x = *y;
*y = tmp;
}
为什么C++支持重载,而C不支持重载?
在编译C代码中,编译器是通过函数名来寻找函数地址的,因而函数名不能相同。而在编译C++代码中,编译器在编译时会根据参数列表对函数进行重命名,例如Swap(int* x,int* y)被重命名为_Swap_int_int(int* x,int* y),Swap(char* x,char* y)被重命名为_Swap_char_char(char* x,char* y),当进行函数调用时,编译器根据传入的参数逐个匹配,选择对应的函数,如果没有匹配,编译器则会报错,不同的编译器会有不同的命名规则,但本质上这些函数是不同的函数;
缺省参数函数
缺省参数函数就是将函数的某些参数取一个默认值时,如果没有传入该参数,则采用默认值;
缺省参数函数规则:
1.如果函数已经带有缺省参数函数的声明,则在该函数的定义中不允许出现缺省值。
2.一旦函数的某个参数指定了缺省值,则后续参数也必须定义缺省值;
3.调用函数时,若略去一个参数的值,则应略去后续参数的值;
例:
半缺省
func(int a,int b=5);
func(1); func(1,2); //参数a没有缺省,必须有值
全缺省
fun(int a = 2,int b = 6)
fun(); fun(1); fun(1,2);
命名空间
命名空间时一个由程序设计者命名的内存区域,程序设计者可以根据需要指定一些有名字的空间域,把一些全局实体分别放在各个命名空间中,从而与其他全局实体分开来。
如:
namespace ns{
int a;
double b;
char c;
}
ns是命名空间的名称,在ns命名空间中声明了变量a、b、c,在使用这些变量时,必须加上命名空间名和作用域分辨符"::",例如ns::a,ns::b。
命名空间中的成员可以包含以下类型:
- 变量(可以初始化)
- 常量
- 结构体
- 类
- 模板
- 命名空间(不可同名)
使用方法
1.命名空间名::成员名
2.使用命名空间别名
例: namespace student{...}
namespace stu = student; //student的别名stu等价
3.使用using命名空间别名
例:在一作用域中,使用" using ns::a; "后,在本作用域使用该命名空间成员时,不必使用命名空间限定;
无名的命名空间
C++允许使用无名的命名空间
例: namespace
{...}
标准命名空间std
wo标准C++库中的所有标识符都是在一个名为std的命名空间中定义的。
使用:using namespace std;