あなたはとについてほとんど正しい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