簡體   English   中英

C ++將類添加到名稱空間:為什么?

[英]C++ adding class to a namespace: why?

我是C ++的新手。 為什么在Eclipse(使用MinGW配置)中以及在其他線程中,為什么我注意到是用來將類添加到名稱空間的?

我提供一個示例來向您展示我的實際疑問:

#ifndef MODEL_MANGO_HPP_
#define MODEL_MANGO_HPP_

namespace std {

class Mango {
public:
    Mango();
    virtual ~Mango();
};

} /* namespace std */

#endif /* MODEL_MANGO_HPP_ */

編輯 :如注釋所示,完全禁止將類添加到命名空間std 引用@owacoder,

命名空間永遠不會關閉,因此您始終可以向其添加類定義。 但是,根據規范,std名稱空間應視為封閉的。

為了向您提供上下文的完整視圖,這是Eclipse為我完成的Mango.cpp的默認實現:

#include "Mango.hpp"
namespace std {
Mango::Mango() {
    // TODO Auto-generated constructor stub
}
Mango::~Mango() {
    // TODO Auto-generated destructor stub
}
} /* namespace std */

因此,我的問題變成: 為什么使用“命名空間std {...}”,什么時候將類添加到命名空間是一種好習慣?

您必須了解什么是類和名稱空間的基礎知識。

類(以及struct,enum和enum類)用於在C ++中定義用戶定義的類型。

您創建一個類來表示邏輯實體並封裝詳細信息等。

名稱空間是一種標記代碼區域和限定變量唯一名稱的方法。

如果您僅在文件中編寫類,則將其寫在“全局名稱空間”中,因為您正在“污染名稱空間”,因此不認為是好的做法。

相反,您應該使用名稱空間來限制變量名具有含義的范圍。 這樣,您不會很快就耗盡所有明智的類和變量名(您想編寫“實用程序”類多少次了?)

namespace firstNamespace{
int x=2;
}

namespace secondNamespace{
int x=7;
}

int main () 
{
std::cout << firstNamespace::x << '\n';
std::cout << secondNamespace::x << '\n';
return 0;
}

在這種情況下,您可以看到我們可以通過限定名稱空間在不同的上下文中“重用”變量名x。 在名稱空間塊中,我們可以有更多的聲明和定義。 包括函數,類,結構等

不要以為命名空間保持打開狀態,以后可以添加它們。 例如,您可以擁有:

namespace firstNamespace{
int x=2;
}

namespace secondNamespace{
int x=7;
}

namespace firstNamespace{
int y=11;
}

在這里,我們添加了firstNamespace :: y。

更重要的是,您可以觀察到std是C ++提供的名稱空間,其中包含許多有用的變量,類型為std :: ostream的諸如cout之類的對象,函數以及諸如std :: vector,std :: ostream之類的類,等等。

因此,回到您的問題,您要將類定義包裝在名稱空間中的原因是不污染全局名稱空間。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM