클래스 형식 개체
개체는 실행 환경에 있는 저장소의 형식이 지정된 영역으로, 상태 정보를 보관할 뿐 아니라 동작도 정의합니다. 클래스 이름을 사용하여 클래스 형식 개체를 정의합니다. 다음과 같은 코드 조각을 생각해 봅시다.
// class_type_objects.cpp
class Account
{
public:
Account() // Default constructor
{
}
Account( double ); // Construct from double.
double& Deposit( double );
double& Withdraw( double, int );
};
int main()
{
Account CheckingAccount; // Define object of class type.
}
위의 코드는 Account라는 클래스(새 형식)를 선언합니다. 그런 다음 이 새 형식을 사용하여 CheckingAccount라는 개체를 정의합니다.
클래스 형식 개체에 대해 C++에서 다음 작업이 정의됩니다.
할당. 한 개체를 다른 개체에 할당할 수 있습니다. 이 작업의 기본 동작은 멤버 방식 복사입니다. 사용자 정의 할당 연산자를 제공하여 이 동작을 수정할 수 있습니다.
복사 생성자를 사용한 초기화.
사용자 정의 복사 생성자를 사용한 초기화의 예는 다음과 같습니다.
명시적 개체 초기화. 예를 들면 다음과 같습니다.
Point myPoint = thatPoint;
myPoint를 Point 형식 개체로 선언한 다음 thatPoint의 값으로 초기화합니다.
인수 전달을 통해 수행되는 초기화. 개체를 값 또는 참조로 함수에 전달할 수 있습니다. 개체를 값으로 전달하는 경우 각 개체의 복사본이 함수에 전달됩니다. 복사본을 만드는 기본 방법은 멤버 방식 복사입니다. 사용자 정의 복사 생성자, 즉 "클래스에 대한 참조" 형식의 단일 인수를 사용하는 생성자를 제공하여 이 방법을 수정할 수 있습니다.
함수의 반환 값 초기화를 통해 수행되는 초기화. 함수에서 개체가 값 또는 참조로 반환될 수 있습니다. 개체를 값으로 반환하는 기본 방법은 멤버 방식 복사입니다. 사용자 정의 복사 생성자를 제공하여 이 방법을 수정할 수 있습니다. 포인터 또는 참조 형식을 사용하여 참조로 반환되는 개체가 호출된 함수에 대해 자동인 동시에 로컬이어서는 안 됩니다. 개체가 자동인 동시에 로컬인 경우에는 반환 값이 참조하는 개체가 범위를 벗어나 사용할 수 없게 됩니다.
클래스별로 다른 연산자를 다시 정의하는 방법에 대한 설명은 오버로드된 연산자에 나와 있습니다.