5-1. 생성자와 소멸자

Crat3 ㅣ 2023. 5. 25. 17:49

 

클래스에 소속된 멤버 함수 중에서 시작과 끝을 알리는 함수

 

1. 생성자(Constructor)

여러개 존재할 수 있음.

 

1) 기본 생성자

class Knight
{
public:
    Knight()
    {
        cout << "Knight() 기본 생성자 호출" << endl;
    }
//~~~~~~~~

- 인자가 없는 생성자

-> 반환하는 타입이 없음

- 멤버 변수를 선언할 수 있음(기본 값을 넣어놓을 수 있음)

 

2) 복사 생성자

    Knight(cons Knight& knight)
    {
        _hp = knight._hp;
        _atk = knight._atk;
        posY = knight._posY;
        posX = knight._posX;
    }

동일한 타입의 객체를 그대로 복사해서 사용할 때 쓴다.

int main()
{
	Knight k2(k1);
	Knight k3 = k1;
}

3) 암시적(Implicit) 생성자

생성자를 명시적으로 만들지 않으면 기본 생성자가 컴파일러에 의해 자동으로 만들어진다.

단, 명시적으로 생성자를 만들면 자동으로 만들지 않는다.

 

4) 타입 변환 생성자

    Knight(int hp)
    {
        _hp = hp;
        _atk = 10;
        _posX = 0;
        _posY = 0;
    }

인자를 하나만 사용하는 기타 생성자를 말한다.

 

(1) 명시적 형변환

int num = 1;
float f = (float) num;

num의 타입을 의도적으로 float으로 변환함.

 

(2) 암시적 형변환

double d = num;

컴파일러가 자동으로 타입을 변환시킴.

 

Knight k5;
k5 = 1;

위와 같이 설정하면, 타입 변환 생성자를 이용하기 때문에 k5의 체력이 1이 되어버린다.

따라서 컴파일러가 자동으로 생성하지 못하게 하기 위해서 explicit을 붙여줄 수 있다.

    explicit Knight(int hp)
    {
        _hp = hp;
        _atk = 10;
        _posX = 0;
        _posY = 0;
    }

 

2. 소멸자(Destructor)

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

- 오직 1개만 존재할 수 있음

 

 

 

 

 

'기초 C++ 스터디' 카테고리의 다른 글

5-0. 객체 지향  (0) 2023.05.25
번외) 파일 분할 관리  (0) 2023.05.25
4-11. 포인터 최종 정리  (0) 2023.05.23
4-10. 다차원 배열  (0) 2023.05.23
4-9. 멀티 포인터  (0) 2023.05.23