一、C++输入&输出
(1) C++标准明确提出不支持.h的头文件,为了和C区别开,也为了正确使用命名空间,C++规定头文件不使用后缀.h;
(2)当使用 iostream.h 时,相当于在C中调用库函数,使用的是全局命名空间;当使用 iostream 时,该头文件没有定义全局命名空间,必须使用 namespace std,这样才能正确使用cout和 cin.
#include<iostream> //因为<iostream>里面没有定义全局命名空间,故使用 namespace std
using namespace std; //std:标准命名空间
int main()
{
int a = 0;
int b = 0;
cin >> a >> b; //cin:标准输入流对象; >>:输入操作符、;
cout << a + b << endl; //cout:标准输出流对象; <<:输出操作符;endl:换行操作符
return 0;
}
二、命名空间
(1)在C++中,变量、函数和类都大量存在,这些名称都存在于全局命名空间中,会导致很多冲突;
(2)使用命名空间的目的是对标识符的名称进行本地化,解决命名冲突的问题,namespace就是为了解决这个问题。
命名空间的定义:
//普通的命名空间
namespace N1
{
int a = 10;
int Add(int left, int right)
{
return left + right;
}
}
//嵌套的命名空间
namespace N2
{
int a = 10;
int b = 20;
int Add(int left, int right)
{
return left + right;
}
namespace N3
{
int c = 30;
int d = 40;
int Sub(int left, int right)
{
return left - right;
}
}
}
//同一个工程中允许存在多个相同名称的命名空间,编译器最终会合成同一个命名空间
namespace N1
{
int a = 10;
int Mul(int left, int right)
{
return left * right;
}
}
//没有名称的命名空间
namespace
{
int a = 10;
int Div(int left, int right)
{
if (0 == right)
exit(0);
return left / right;
}
}
·一个命名空间就定义了一个新的作用域,命名空间中所有的内容都局限于该命名空间中;
·没有名称的命名空间,它的成员只在声明该命名空间的文件中可以访问,访问时不需加命名空间名称,对其他文件该命名空间中内容不可见。
命名空间的使用:
::两个冒号代表的是:作用域解析符;
在使用命名空间的变量时,必须在作用域解析符前加上命名空间名字,后面加上要用的变量名。
#include<iostream>
using namespace std;
namespace N
{
int a = 10;
int b = 20;
int Add(int left, int right)
{
return left + right;
}
int Sub(int left, int right)
{
return left - right;
}
}
using N::b;
using namespace N;
int a = 30; //定义全局变量a
int main()
{
int a = 2; //定义局部变量a
cout << a << endl; //变量名前不加任何作用域解析符,代表局部变量
cout << ::a << endl; //变量名前加上作用域解析符,代表全局变量
cout << N::a << endl; //命名空间名加作用域解析符加变量名,代表该命名空间中的变量
cout << b << endl;
Add(10, 20);
return 0;
}
下面是代码运行结果