Android NDK開發(fā)之旅18--C++--命名空間

前言——C++簡介

  • C++ 是 C 的一個超集,事實上,任何合法的 C 程序都是合法的 C++ 程序。
  • C++可以與C代碼進行混編,C++里面可以寫C,但是反過來不可以。
  • C++是面向?qū)ο缶幊陶Z言、C是面向過程的編程。
  • C++對C的一個增強。C++有class、引用的概念,堆內(nèi)存的分配釋放除了C語言的malloc、free,還有new、delete關(guān)鍵字。
  • C++ 是一種靜態(tài)類型的、編譯式的、通用的、大小寫敏感的、不規(guī)則的編程語言,支持過程化編程、面向?qū)ο缶幊毯头盒途幊獭?br> 面向?qū)ο蟪绦蛟O(shè)計
C++ 完全支持面向?qū)ο蟮某绦蛟O(shè)計,包括面向?qū)ο箝_發(fā)的四大特性:
  • 封裝
  • 抽象
  • 繼承
  • 多態(tài)

C++的命名空間

基本概念

命名空間,也叫名字空間,類似于Java中包(歸類)。當項目比較大的時候,用于區(qū)分不同人寫的代碼、不同庫的代碼。不同名字空間下面,函數(shù)名、變量名、類名等都可以重復(fù)。

假設(shè)這樣一種情況,當一個班上有兩個名叫 Zara 的學生時,為了明確區(qū)分它們,我們在使用名字之外,不得不使用一些額外的信息,比如他們的家庭住址,或者他們父母的名字等等。
同樣的情況也出現(xiàn)在 C++ 應(yīng)用程序中。例如,您可能會寫一個名為 xyz() 的函數(shù),在另一個可用的庫中也存在一個相同的函數(shù) xyz()。這樣,編譯器就無法判斷您所使用的是哪一個 xyz() 函數(shù)。
因此,引入了命名空間這個概念,專門用于解決上面的問題,它可作為附加信息來區(qū)分不同庫中相同名稱的函數(shù)、類、變量等。使用了命名空間即定義了上下文。本質(zhì)上,命名空間就是定義了一個范圍。

定義命名空間

命名空間的定義使用關(guān)鍵字 namespace,后跟命名空間的名稱,如下所示:

namespace namespace_name {
   // 代碼聲明
}

為了調(diào)用帶有命名空間的函數(shù)或變量,需要在前面加上命名空間的名稱,如下所示:

name::code;  // code 可以是變量或函數(shù)

實例

#include <iostream>
using namespace std;
 
// 第一個命名空間
namespace first_space{
   void func(){
      cout << "Inside first_space" << endl;
   }
}
// 第二個命名空間
namespace second_space{
   void func(){
      cout << "Inside second_space" << endl;
   }
}
 void main ()
{
 
   // 調(diào)用第一個命名空間中的函數(shù)
   first_space::func();
   
   // 調(diào)用第二個命名空間中的函數(shù)
   second_space::func(); 
   system("pause");
}

結(jié)果輸出:
Inside first_space
Inside second_space

using 指令

您可以使用 using namespace 指令,這樣在使用命名空間時就可以不用在前面加上命名空間的名稱。這個指令會告訴編譯器,后續(xù)的代碼將使用指定的命名空間中的名稱。

#include <iostream>
using namespace std;
 
// 第一個命名空間
namespace first_space{
   void func(){
      cout << "Inside first_space" << endl;
   }
}
// 第二個命名空間
namespace second_space{
   void func(){
      cout << "Inside second_space" << endl;
   }
}
using namespace first_space;
void main ()
{
 
   // 調(diào)用第一個命名空間中的函數(shù)
   func();
   system("pause");
}

結(jié)果輸出:
Inside first_space

using 指令也可以用來指定命名空間中的特定項目。例如,如果您只打算使用 std 命名空間中的 cout 部分,您可以使用如下的語句:

using std::cout;

隨后的代碼中,在使用 cout 時就可以不用加上命名空間名稱作為前綴,但是 std 命名空間中的其他項目仍然需要加上命名空間名稱作為前綴,如下所示:

#include <iostream>
using std::cout;
 
int main ()
{
 
   cout << "std::endl is used with std!" << std::endl;
   system("pause");
   return 0;
}

結(jié)果輸出:
std::endl is used with std!

嵌套的命名空間
命名空間可以嵌套,您可以在一個命名空間中定義另一個命名空間,如下所示:

namespace namespace_name1 {
   // 代碼聲明
   namespace namespace_name2 {
      // 代碼聲明
   }
}

您可以通過使用 :: 運算符來訪問嵌套的命名空間中的成員:

// 訪問 namespace_name2 中的成員
using namespace namespace_name1::namespace_name2;
 
// 訪問 namespace:name1 中的成員
using namespace namespace_name1;

在上面的語句中,如果使用的是 namespace_name1,那么在該范圍內(nèi) namespace_name2 中的元素也是可用的,如下所示:

#include <iostream>
using namespace std;
 
// 第一個命名空間
namespace first_space{
   void func(){
      cout << "Inside first_space" << endl;
   }
   // 第二個命名空間
   namespace second_space{
      void func(){
         cout << "Inside second_space" << endl;
      }
   }
}
using namespace first_space::second_space;
int main ()
{
 
   // 調(diào)用第二個命名空間中的函數(shù)
   func();
   system("pause");
   return 0;
}

結(jié)果輸出:
Inside second_space

特別感謝:
菜鳥C++ 教程

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn),斷路器,智...
    卡卡羅2017閱讀 136,534評論 19 139
  • 一、 為什么需要命名空間(問題提出) 命名空間是ANSIC++引入的可以由用戶命名的作用域,用來處理程序中 常見的...
    IvanRunning閱讀 2,429評論 0 2
  • 重新系統(tǒng)學習下C++;但是還是少了好多知識點;socket;unix;stl;boost等; C++ 教程 | 菜...
    kakukeme閱讀 20,419評論 0 50
  • 1. Java基礎(chǔ)部分 基礎(chǔ)部分的順序:基本語法,類相關(guān)的語法,內(nèi)部類的語法,繼承相關(guān)的語法,異常的語法,線程的語...
    子非魚_t_閱讀 34,638評論 18 399
  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 178,901評論 25 709

友情鏈接更多精彩內(nèi)容