c++

c++ 공부

이야기prog 2025. 3. 1. 16:58
#include <iostream>

class Knight {

private:
	int hp_;
	int attack_;
	int positionX_;
	int positionY_;
public:

	Knight(): hp_(100), attack_(0), positionX_(0), positionY_(0) { // 기본 생성자

	}

	Knight(const Knight& k) { // 복사 생성자
		hp_ = k.hp_;
		attack_ = k.attack_;
		positionX_ = k.positionX_;
		positionY_ = k.positionY_;
	}
	Knight(int hp) : hp_(hp), attack_(0), positionX_(0), positionY_(0) {} // 타입 변환 생성자 Knight k1 = 1; 도 가능하게 해줌 Kn

	Knight(int hp, int attack) : hp_(hp), attack_(attack), positionX_(0), positionY_(0) {} // k = {1,2}



	void KnightPrint() {
		std::cout << hp_ << "\n";
	}
};

int main() {

	Knight k;
	k = { 1,2 };
	k.KnightPrint();

	Knight k1;
	k1 = 1;
	k1.KnightPrint();

}

생성자중에 매개변수가 1개만 있는 것을 타입 변환 생성자라고 한다.

Knight k1 = 1;이 실제로 작동하는데, Knight(int hp)가 있기 때문이다.

 

Knight(int hp, int attack)을 만들어서 두개의 매개변수도 받는지 확인했으나 Knight k1 = (1,2)가 되는가 싶었는데,

어셈블리어로 살펴보면 바로 Knight(int hp)가 호출되는 것을 볼 수 있었고, (1,2)중에 2가 hp로 들어갔다. 맨 끝에 값을 집어넣는듯 함.

 

인자를 2개받는 Knight(int hp, int attack)을 실행하려면 ()가 아닌 Knight k1 = {1, 2}로 실행해야함.

()와 {}가 클래스에서 차이가 있는 것으로 예전에 공부한 기억이 있는데, 공부하면 후에 기술하겠음.