- 클래스에 속한 함수 = 멤버 함수.
- 멤버 함수 중에 굉장히 특별한 두 가지 함수가 있는데, 바로 [시작]과 [끝]을 알리는 함수.
- 생성자 = [시작]을 알리는 함수.
- 소멸자 = [끝]을 알리는 함수.
생성자 (Constructor)
- 객체의 생성을 알리는 함수.
- 객체가 생성되면 무조건 호출됨.
- 클래스 이름과 동일한 이름 사용.
- 반환값이 없음.
- 매개 변수 개수에 따라 종류가 나뉨.
기본 생성자
- 매개 변수를 가지지 않음.
- 클래스에 생성자를 명시적으로 만들지 않으면, 기본 생성자가 컴파일러에 의해 자동으로 만들어짐.
- 아무 생성자를 하나 만들면, 기본 생성자가 자동으로 만들어지지 않음.
복사 생성자
- 자신의 클래스 참조 타입을 매개 변수로 가짐.
- 일반적으로 똑같은 데이터를 지닌 객체가 생성되길 원할 때 사용.
기타 생성자
- 1개 이상의 매개 변수를 가짐.
- 매개 변수가 1개인 기타 생성자를 타입 변환 생성자라고 부르기도 함.
소멸자 (Destructor)
- 객체가 소멸될 때 호출됨. (Stack 또는 Heap 메모리에서 소멸될 때)
- 클래스 이름과 동일한 이름을 사용하되, 앞에 '~'를 붙여줌.
예제
코드
class Knight
{
public:
Knight()
{
cout << "Knight() 기본 생성자 호출" << endl;
_hp = 100;
_damage = 10;
_positionY = 0;
_positionX = 0;
}
Knight(const Knight& knight)
{
cout << "Knight(const Knight&) 복사 생성자 호출" << endl;
_hp = knight._hp;
_damage = knight._damage;
_positionX = knight._positionX;
_positionY = knight._positionY;
}
explicit Knight(int hp)
{
cout << "Knight(int) 기타 생성자 호출" << endl;
_hp = hp;
_damage = 10;
_positionY = 0;
_positionX = 0;
}
Knight(int hp, int damage, int positionX, int positionY)
{
cout << "Knight(int, int, int, int) 기타 생성자 호출" << endl;
_hp = hp;
_damage = damage;
_positionY = positionX;
_positionX = positionY;
}
}
int main()
{
Knight k1(100, 50, 0, 0);
Knight k2(k1);
Knight k3 = k1;
Knight k4;
k4 = k1;
return 0;
}
결과