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