Re: [問題] namespace和static問題
看板C_and_CPP (C/C++)作者littleshan (我要加入劍道社!)時間16年前 (2009/04/07 23:26)推噓2(2推 0噓 2→)留言4則, 2人參與討論串2/2 (看更多)
※ 引述《tstanly ()》之銘言:
: 在書上看到兩個問題想請教一下
: 1.
: 關於namespace
: "現在的c++所有程式庫都定義在std的namespace中"
: 我們不是把所需要的東西都利用include進來嗎
: 那namespace和include之間的關係是?
我實在很想回「它們之間沒有關係」
不過這一定不是你要的答案
namespace 用來區隔名稱,以避免相同的 symbol 互相衝突。
比如說你今天想自已實作一個類似 vector 的東西
你可以在 header 檔中這樣寫:
#ifndef MY_VECTOR_H
#define MY_VECTOR_H
namespace my_namespace {
class vector {
...
};
}
#endif // MY_VECTOR_H
這麼一來,你的程式可以同時使用你寫的 vector 以及 std
底下的 vector:
#include <vector>
#include "my_vector.h"
int main()
{
my_namespace::vector a; // 你自己寫的 vector
std::vector<int> b; // STL vector
...
}
#include 的作用只是在 compile 時把該檔案的內容讀進來而己,
它和 namespace 沒什麼關係,你也可以寫個 header file 但完全
不用 namespace,還是一樣可以 include。(不過這種事好孩子不要學)
: 2.
: "c++之所以支援static成員變數原因在於避免使用global var
: 若在OO中使用使用global var豈不是破壞了封裝性質"
: 使用global var為什麼會破壞封裝封裝?
因為你所使用的每個函式都可以去存取到它,大大增加被錯誤使用
的可能性。變數的 scope 愈大,你要檢查的程式碼就愈多。
: 對我來說現在寫static var其實和global var沒有什麼兩樣...
: 其實是我功力太淺...有人可以指點一下嗎
: 謝謝
static variable 的 scope 僅限該檔案,global variable 則是
任何一個有被連結的 source 都可以存取該變數。
但這年頭 C++ 不鼓勵你用 static variable 了,你可以用 anonymous
namespace 來達到同樣的封裝效果。
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 61.217.30.28
推
04/08 00:12, , 1F
04/08 00:12, 1F
→
04/08 00:12, , 2F
04/08 00:12, 2F
推
04/08 00:42, , 3F
04/08 00:42, 3F
→
04/08 00:42, , 4F
04/08 00:42, 4F
討論串 (同標題文章)
本文引述了以下文章的的內容:
完整討論串 (本文為第 2 之 2 篇):
C_and_CPP 近期熱門文章
PTT數位生活區 即時熱門文章