一: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