你是非常正确的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
该类。