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}로 실행해야함.
()와 {}가 클래스에서 차이가 있는 것으로 예전에 공부한 기억이 있는데, 공부하면 후에 기술하겠음.