C++ Rookiss Part1 C++ 프로그래밍 입문 : 생성자와 소멸자 복습
🙇♀️생성자와 소멸자 복습
- 생성자 : 여러개 존재 가능
- 소멸자 : 오직 1개만
- [암시적(Implicit) 생성자]
- 생성자를 명시적으로 만들지 않으면 [기본 생성자]가 자동으로 만들어짐
- 명시적(Explicit)으로 생성자를 만들면 [기본 생성자]는 자동으로 만들어지지 않음
- class의 틀
class Knight
{
public:
// 생성자나 소멸자 구현
// 멤버 함수 선언
void Move(int y, int x);
void Attack();
void Die() // 선언과 동시에 구현도 가능
{
_hp = 1;
this->_hp = 0; // _hp = 0;과 동일
cout << "Die" << endl;
}
public:
// 멤버 변수
int _hp;
int _attack;
int _posY;
int _posX;
};
🪐생성자와 소멸자 복습
- 기본 생성자(인자가 없음)
Knight()
{
cout << "Knight() 기본 생성자 호출" << endl;
_hp = 100;
_attack = 10;
_posX = 0;
_posY = 0;
}
- 복사 생성자(자기 자신의 클래스 참조 타입을 인자로 받음)
Knight k2(k1);처럼 k1의 값을 똑같이 넣을 때 사용
멤버 변수의 값을 그대로 대입하는 복사 생성자는 기본적으로 자동으로 만들어 줌
Knight(const Knight& knight)
{
_hp = knight._hp;
_attack = knight._attack;
_posX = knight._posX;
_posY = knight._posY;
}
Knight k2(k1); // 복사 생성자 사용
Knight k3 = k1; // 복사 생성자 사용
Knight k4; // 기본 생성자 생성
k4 = k1; // 복사
- 기타 생성자와 타입 변환 생성자
이 중에서 인자를 1개만 받는 [기타 생성자]를 [타입 변환 생성자]라고 부르기도 함
명시적인 용도로만 사용할 것! (explicit)
explicit Knight(int hp)
{
cout << "Knight(int) 생성자 호출" << endl;
_hp = hp;
_attack = 10;
_posX = 0;
_posY = 0;
}
Knight k5; // 기본 생성자 생성
k5 = 1; // 타입 변환 생성자 호출
HelloKnight((Knight)5); // 타입 변환 생성자 사용 예시
- 소멸자
소멸자는 딱 1개만 존재
~Knight()
{
cout << "~Knight() 소멸자 호출" << endl;
}