你是非常正確的約cout
和cin
。它們是在std
命名空間中定義的對象(不是函數)。以下是作爲由C++標準中定義它們的聲明:
部首<iostream>
概要
#include <ios>
#include <streambuf>
#include <istream>
#include <ostream>
namespace std {
extern istream cin;
extern ostream cout;
extern ostream cerr;
extern ostream clog;
extern wistream wcin;
extern wostream wcout;
extern wostream wcerr;
extern wostream wclog;
}
::
稱爲範圍解析運算符。名稱cout
和cin
在std
中定義,因此我們必須使用std::
來限定其名稱。
類的行爲有點像在類內聲明的名稱命名空間屬於類。例如:
class foo
{
public:
foo();
void bar();
};
foo
命名的構造是一個構件名爲foo
類的。它們具有相同的名稱,因爲它的構造函數。功能bar
也是foo
的成員。
,因爲他們是foo
成員,從類的外部引用它們的時候,我們有資格自己的名字。畢竟,他們屬於那個階級。所以,如果你要定義類的外部構造和bar
,你需要做的是像這樣:
foo::foo()
{
// Implement the constructor
}
void foo::bar()
{
// Implement bar
}
這是因爲他們被定義外類。如果您沒有對名稱進行foo::
限定,您將在全球範圍內定義一些新功能,而不是作爲foo
的成員。例如,這是完全不同的bar
:
void bar()
{
// Implement different bar
}
它允許具有相同的名稱作爲foo
類的功能,因爲它是在不同的範圍。此bar
處於全局範圍內,而其他bar
屬於foo
類。
罰款的問題,但有點過於寬泛(IMO)。這就是所謂的範圍解析運算符,並且用於進一步學習的搜索術語是* scope *。所有這些名字(''cout','A'的成員函數)在*作用域*中定義,並且必須使用'::'來解析作用域(即告訴編譯器在哪裏看)。 – GManNickG 2013-03-26 23:56:55
'::'的前綴可以是名稱空間或類。由於'main'既不是(這是一個函數),'main :: printStuff'也是不正確的。 – 2013-03-26 23:57:43
::也提供了所有權的概念,當一個定義是類或命名空間的一部分時,你應該使用::來訪問它......不完全是這樣,但是這給了你一種感覺。 – 2013-03-26 23:59:25