一:namespace是指标识符的各种控件范围(类java中package)
C++语言引入命名空间(Namespace)这一概念主要是为了
避免命名冲突,其关键字为
namespace
二:iostream.h和iostream(体现命名空间优点)
#include <iostream>
//标准库放在std命名空间中,所以使用的时候使用using namespace std;
#include <iostream.h>
这是两个不同的文件,在早期使用带.h(将标准库功能定义在全局空间里,容易和开发人员的类或者方法重名冲突<因为标准库太庞大>),后面为了将c++和c区分,并且为了正确使用命名空间,就不带.h(可以很好的解决上面问题)
实际上为了区分C和C++,C++规定头文件不使用后缀.h
三:使用方法(三种)<例std>
(一)直接使用指定标准库
std::cout <<
"use namespace std" <<
std::endl;
缺点:使用麻烦,需要一个个引入
优点:减少冲突
(二)使用using关键字,和(一)类似,只是提前声明
using std::cout;
using std::endl;
cout <<
"use namespace std" << endl;
(三)使用using namespace std;将所有的标识符曝光,就像是全局变量一样使用(最常用)
using namespace std;cout << "use namespace std" << endl;
四:自定义namespace使用《重点》
注意点一:命名空间需要写在头文件,方便引入
namesp.h
#ifndef NAME_SPACE_H
#define NAME_SPACE_H
#include <iostream>
using namespace std;
namespace NameSpA
{
class getInfo
{
public:
virtual double getG() =
0;
virtual double getA() =
0;
};
class Circle :
public getInfo
{
private:
const double PI =
3.1415;
int r;
//C不存在设置默认值
double g;
double a;
int c =
10;
int b = c *
2;
public:
Circle(int r)
{
this->r =
r;
cout <<
"radius:" << r <<
endl;
cout <<
"girth:" << g <<
endl;
cout <<
"area:" << a <<
endl;
cout <<
"b:" << b <<
endl;
}
double getG()
{
this->g =
2 * PI*
r;
cout <<
"girth:" << g <<
endl;
return g;
}
double getA()
{
this->a = PI*r*
r;
cout <<
"area:" << a <<
endl;
return a;
}
};
}
#endif
注意点二:使用命名空间是需要先引入该头文件
#include "namesp.h"
using namespace NameSpA; //可以使用
void main(
int argc,
char* argv[])
//第一个是参数数量,第二个是参数
{
cout << argc <<
endl;
cout <<
"use namespace std" <<
endl;
if (argc <=
1)
return;
cout << argv[
0] <<
endl;
cout << argv[
1] <<
endl;
int r = atoi(argv[
1]);
cout << r <<
endl;;
getInfo* gi =
new Circle(r);
//一般设计内存就使用指针
gi->
getA();
gi->
getG();
system("pause");
return;
}
五:总结(结合C)
(一)c中命名空间
在C语言中只有一个全局作用域
C语言中所有的全局标识符共享一个作用域
标识符之间可能发生冲突
(二)C++命名空间
命名空间将全局作用域分成不同的部分
不同命名空间中标识符可以同名而不会发生冲突
命名空间可以嵌套
全局作用域叫做默认命名空间(直接使用即可,也可以::变量)
六:补充嵌套命名空间
头文件:namesp.h
namespace OutNP
{
int a =
0;
namespace InnerNP
{
int a =
1;
}
}
cpp文件使用(一)简单演示
#include
"namesp.h"
using namespace OutNP;
void main(
int argc,
char* argv[])
//第一个是参数数量,第二个是参数
{
cout << a;
//0
system("pause");
return;
}
cpp文件使用(二)有冲突
cpp文件使用(三)无冲突
#include
"namesp.h"
using namespace OutNP;
using namespace OutNP::InnerNP;
//这样还是存在命名冲突
void main(
int argc,
char* argv[])
//第一个是参数数量,第二个是参数
{
cout << OutNP::a;
//0
cout << InnerNP::a;
//1
system("pause");
return;
}
转载于:https://www.cnblogs.com/ssyfj/p/10623655.html