天天看點

C++回顧day01---<命名空間>一:namespace是名額識符的各種控件範圍(類java中package)二:iostream.h和iostream(展現命名空間優點)三:使用方法(三種)<例std>四:自定義namespace使用《重點》五:總結(結合C)六:補充嵌套命名空間

一: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檔案使用(二)有沖突

C++回顧day01---&lt;命名空間&gt;一:namespace是名額識符的各種控件範圍(類java中package)二:iostream.h和iostream(展現命名空間優點)三:使用方法(三種)&lt;例std&gt;四:自定義namespace使用《重點》五:總結(結合C)六:補充嵌套命名空間

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