程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> C++入門知識 >> 不可或缺 Windows Native (15),windowsnative

不可或缺 Windows Native (15),windowsnative

編輯:C++入門知識

不可或缺 Windows Native (15),windowsnative


[源碼下載]


不可或缺 Windows Native (15) - C++: 命名空間



作者:webabcd


介紹
不可或缺 Windows Native 之 C++

  • 命名空間



示例
CppNamespace.h

#pragma once 

#include <string>

using namespace std;

// 定義一個命名空間,並在其中定義一個類以及聲明一個函數
namespace NativeDll
{
    class CppNamespace
    {
    public:
        string Demo();

    public:
        string Demo2();
    };

    string demo3();

    string demo4();
}


CppNamespace.cpp

/*
 * 命名空間
 */

#include "pch.h" 
#include "CppNamespace.h" 

using namespace NativeDll;

// 不指定命名空間則是全局的
void namespace_demo1();
void namespace_demo2();
void namespace_demo3();

// 實現 NativeDll 命名空間中的函數
string CppNamespace::Demo() // 寫全了就是 string NativeDll::CppNamespace::Demo()
{
    // 命名空間的定義及使用
    namespace_demo1();

    // 命名空間的嵌套及使用
    namespace_demo2();

    // 沒有名字的命名空間的定義及使用
    namespace_demo3();

    
    return Demo2() + demo3() + demo4();
}

// 實現 NativeDll 命名空間中的函數
string NativeDll::demo3() // 必須要指定命名空間,否則就是全局的
{
    return "demo3";
}

// 實現 NativeDll 命名空間中的函數
namespace NativeDll
{
    string CppNamespace::Demo2()
    {
        return "Demo2";
    }

    string demo4()
    {
        return "demo4";
    }
}



// 定義 2 個命名空間
namespace ns1
{
    string getString()
    {
        return "ns1";
    }
}
namespace ns2
{
    string getString()
    {
        return "ns2";
    }
}
namespace ns2 // 命名空間是可以多次定義的
{
    string getString2()
    {
        return "ns2 getString2";
    }
}

// 命名空間的使用
void namespace_demo1()
{
    string result = "";


    // 調用指定命名空間下的函數
    result = ns1::getString(); // ns1
    result = ns2::getString(); // ns2


    // 引入指定的命名空間
    using namespace ns2; // 之後 ns2 有效
    result = getString(); // ns2

    using namespace ns1; // 之後 ns1 和 ns2 同時有效
    // result = getString(); // 編譯錯誤,因為不明確


    // 引入指定命名空間的指定函數
    using ns1::getString; // 之後如果使用 getString() 函數,則其是來自 ns1 下的
    result = getString(); // ns1

    // using ns2::getString; // 編譯錯誤,和 using ns1::getString; 沖突了
}



// 定義 1 個嵌套的命名空間
namespace nsA
{
    string getString()
    {
        return "nsA";
    }

    namespace nsB
    {
        string getString()
        {
            return "nsB";
        }
    }
}

void namespace_demo2()
{
    string result = "";

    // 嵌套命名空間的使用
    result = nsA::nsB::getString(); // nsB

    // 可以為嵌套命名空間設置別名(非嵌套的命名空間也可以設置別名)
    namespace ns = nsA::nsB;
    result = ns::getString(); // nsB
}



// 在名為 nsX 的命名空間下定義一個沒有名字的命名空間
namespace nsX
{
    // 匿名命名空間
    namespace
    {
        string getStringAnonymous()
        {
            return "getStringAnonymous";
        }
    }

    // 內部可以直接調用沒有名字的命名空間下的函數
    string getString()
    {
        return "getString() " + getStringAnonymous();
    }
}

void namespace_demo3()
{
    string result = "";

    // 外部也可以直接調用指定命名空間下的匿名命名空間中的函數
    result = nsX::getStringAnonymous(); // getStringAnonymous
    result = nsX::getString(); // getString() getStringAnonymous
}



OK
[源碼下載]

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved