클래스 이름
클래스 선언은 클래스 이름 또는 클래스 형식이라는 새 형식을 프로그램에 도입합니다. 정방향 선언을 제외하고 이러한 클래스 선언은 지정된 변환 단위에 대한 클래스 정의의 역할도 합니다. 지정된 클래스 형식에 대한 정의는 변환 단위당 하나만 있을 수 있습니다. 이러한 새 클래스 형식을 사용하여 개체를 선언할 수 있으며, 컴파일러는 형식 검사를 수행하여 해당 형식과 호환되지 않는 연산이 개체에 대해 수행되지 않는지 확인할 수 있습니다.
설명
이러한 형식 검사의 예는 다음과 같습니다.
// 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;
}
위의 코드에서 보여주듯이 클래스 형식 개체에 대한 연산(예: 할당 및 인수 전달)에는 기본 제공 형식의 개체와 동일한 형식 검사가 적용됩니다.
컴파일러에서 클래스 형식을 구분하기 때문에 기본 제공 형식 인수뿐만 아니라 클래스 형식 인수를 기준으로 함수가 오버로드될 수 있습니다. 오버로드된 함수에 대한 자세한 내용은 함수 오버로드 및 오버로드를 참조하십시오.