🙇‍♀️생성자와 소멸자 복습


  • 생성자 : 여러개 존재 가능
  • 소멸자 : 오직 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;

};

🪐생성자와 소멸자 복습


  1. 기본 생성자(인자가 없음)
Knight()
{
	cout << "Knight() 기본 생성자 호출" << endl;

	_hp = 100;
	_attack = 10;
	_posX = 0;
	_posY = 0;
}


  1. 복사 생성자(자기 자신의 클래스 참조 타입을 인자로 받음)

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. 기타 생성자와 타입 변환 생성자

이 중에서 인자를 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. 소멸자

소멸자는 딱 1개만 존재

~Knight()
{
	cout << "~Knight() 소멸자 호출" << endl;
}


태그:

카테고리:

업데이트: