クラス名
クラス宣言では、クラス名またはクラス型と呼ばれる新しい型をプログラムに取り込みます。 事前宣言を除いて、これらのクラス宣言は特定の翻訳単位のクラス定義としても機能します。 翻訳単位ごとに特定のクラス型の定義が 1 つだけある可能性があります。 これらの新しいクラス型を使用してオブジェクトを宣言すると、コンパイラによって型チェックが行われ、その型と互換性のない操作はオブジェクトに対して実行されません。
解説
このような型チェックの例を示します。
// class_names.cpp
// compile with: /EHsc
#include <iostream>
using namespace std;
class Point {
public:
unsigned x, y;
};
class Rect {
public:
unsigned x1, y1, x2, y2;
};
// Prototype a function that takes two arguments, one of type
// Point and the other of type pointer to Rect.
int PtInRect( Point, Rect & );
int main() {
Point pt;
Rect rect;
rect = pt; // C2679 Types are incompatible.
pt = rect; // C2679 Types are incompatible.
// Error. Arguments to PtInRect are reversed.
// cout << "Point is " << PtInRect( rect, pt ) ? "" : "not"
// << " in rectangle" << endl;
}
上記のコードが示すように、クラス型オブジェクトに対する操作 (代入や引数の引き渡しなど) には、組み込み型オブジェクトと同じ型チェックが適用されます。
コンパイラはクラス型を区別するため、クラス型の引数および組み込みの型引数に基づいて関数をオーバーロードできます。 オーバーロード関数の詳細については、「関数オーバーロード」および「オーバーロード」を参照してください。