文章目录
1、命名空间
在C/C++中存在大量变量,函数和类的名称,难免有相同的命名,导致不同的函数或者变量不同但是名字相同就会导致很多命名冲突。为了避免这些命名冲突或名字污染,因此就引入了namespace关键字。
1.1、namespace定义
namespace关键字j的具体使用方法如下:(1)普通定义 (2)嵌套定义
//(1)命名空间的普通定义
namespace N1 //N1为命名空间的名称(这可以自己设置)
{
//在命名空间中,既可以定义变量,也可以定义函数
int a;
int Add(int x, int y)
{
return x + y;
}
}
//(2)命名空间的嵌套定义
namespace N1 //定义一个名为N1的命名空间
{
int a;
int b;
namespace N2 //嵌套定义另一个名为N2的命名空间
{
int c;
int d;
}
}
//嵌套定义时如果嵌套的命名空间名称相同,编译器最后会合并成同一个命名空间中。
1.2、namespace使用
namespace关键字的使用方法如下:(1)通过using关键词引入全局 (2)在函数提内直接使用
//(1)使用using namespace 命名空间名称引入
using namespace N;//将命名空间N的所有成员引入全局
using namespace N::a;//将命名空间N中的a成员引入全局
//(2)在函数体内直接使用
int main()
{
N::b = 1;
return 0;
}
2、C++中的输入输出
C++中的输入输出分别可以通过cin和cout进行实现,具体操作如下:
#include <iostream>
using namespace std;
int main()
{
int i;
double d;
char arr[20];
//输入数值到变量
cin >> i;//读取一个整型
cin >> d;//读取一个浮点型
cin >> arr;//读取一个字符串
//打印变量
cout << i << endl;//打印整型i
cout << d << endl;//打印浮点型d
cout << arr << endl;//打印字符串arr
return 0;
}
3、缺省参数
在函数定义时,给函数的传参的变量赋予默认值的方式,叫做函数的缺少参数,其可分为全缺省参数和半缺省参数。
3.1、全缺省参数
如下时全缺省参数的方法:
void Print(int a = 10, int b = 20, int c = 30)
{
cout << a << endl;
cout << b << endl;
cout << c << endl;
}
3.2、半缺省参数
如下时半缺省参数的方法:
void Print(int a, int b, int c = 30)
{
cout << a << endl;
cout << b << endl;
cout << c << endl;
}
使用半缺省参数时需要注意的3个问题:
(1)缺省参数必须从最右边开始给,并且不能间隔赋予,比如下面这种:
//错误示例
void Print(int a, int b = 20, int c)
{
cout << a << endl;
cout << b << endl;
cout << c << endl;
}
(2)缺省参数不能在函数声明和定义中同时出现,可以在定义时给缺省参数,也可以在声名时给缺省参数,但是不能两个同时给缺省参数,比如下面这种操作:
//错误示例
//test.h
void Print(int a, int b, int c = 30);
//test.c
void Print(int a, int b, int c = 30)
{
cout << a << endl;
cout << b << endl;
cout << c << endl;
}
(3)缺省值必须时常量或者全局变量
//正确示例
int x = 30;//全局变量
void Print(int a, int b = 20, int c = x)
{
cout << a << endl;
cout << b << endl;
cout << c << endl;
}
3.3、带缺省参数的函数使用方法
带了缺省参数的需要传参变量,就相当于给了默认值,就可以不给那个变量传参,具体操作如下:
void fun1(int a=4, int b = 1, int c = 10)
{}
void fun2(int a, int b = 1, int c = 10)
{}
int mian()
{
//全缺省参数可以不传参,也可以传1至3个,根据需要传参的个数而定
fun1();
fun1(1);
fun1(2,3);
fun1(1,1,1);
//半缺省参数,必须把没有传入缺省值的形参个数
fun2(1);
return 0;
}
4、函数重载
4.1、函数重载定义
函数重载就是在同一个作用域可以有同名的函数,但是形参列表必须不同(参数个数、参数类型或者参数顺序不同)。具体看如下代码:
#include <iostream>
using namespace std;
int Add(int x, int y)
{
return x + y;
}
int Add(int x)
{
return x + y;
}
double Add(double x, double y)
{
return x + y;
}
int main()
{
cout << Add(1, 2) << endl;//打印1+2的结果
cout << Add(1.1, 2.2) << endl;//打印1.1+2.2的结果
return 0;
}
4.2、为什么C++有函数重载,C没有
因为C没法区分同名函数。C++可以通过函数名修饰规则区分,C++运行时,会经过4个步骤:
(1)预编译:将头文件拷贝到当前文件,删除注释,define宏定义在文中对应位置替换
(2)编译:C语言翻译成汇编代码
(3)汇编:给每个源文件的符号分配一个地址,然后分别生成一个符号表
(4)链接:将相关联的文件或符号建立连接
在第3步汇编的时候C语言中如果出现相同的函数名相同,会出现多个相同符号地址,会报错,而C++在生成符号地址时,形参不同会生成不同的符号地址,因此不会出错。
4.3、extern “C”
在函数前面加上extern "C"说明此函数需要按C语言规则编译,就不支持重载了,具体操作如下:
extern "C" int Add(int left, int right);