[C++] 객체 지향 프로그래밍 - 생성자와 소멸자

Taeil Nam·2022년 10월 20일
0

C++

목록 보기
3/13
post-thumbnail
  • 클래스에 속한 함수 = 멤버 함수.
  • 멤버 함수 중에 굉장히 특별한 두 가지 함수가 있는데, 바로 [시작]과 [끝]을 알리는 함수.
  • 생성자 = [시작]을 알리는 함수.
  • 소멸자 = [끝]을 알리는 함수.

생성자 (Constructor)

  • 객체의 생성을 알리는 함수.
  • 객체가 생성되면 무조건 호출됨.
  • 클래스 이름과 동일한 이름 사용.
  • 반환값이 없음.
  • 매개 변수 개수에 따라 종류가 나뉨.

기본 생성자

  • 매개 변수를 가지지 않음.
  • 클래스에 생성자를 명시적으로 만들지 않으면, 기본 생성자가 컴파일러에 의해 자동으로 만들어짐.
  • 아무 생성자를 하나 만들면, 기본 생성자가 자동으로 만들어지지 않음.

복사 생성자

  • 자신의 클래스 참조 타입을 매개 변수로 가짐.
  • 일반적으로 똑같은 데이터를 지닌 객체가 생성되길 원할 때 사용.

기타 생성자

  • 1개 이상의 매개 변수를 가짐.
  • 매개 변수가 1개인 기타 생성자를 타입 변환 생성자라고 부르기도 함.

소멸자 (Destructor)

  • 객체가 소멸될 때 호출됨. (Stack 또는 Heap 메모리에서 소멸될 때)
  • 클래스 이름과 동일한 이름을 사용하되, 앞에 '~'를 붙여줌.

예제

코드

class Knight
{
public:
    // [1] 기본 생성자 (매개 변수가 없음)
    Knight()
    {
        cout << "Knight() 기본 생성자 호출" << endl;

        _hp = 100;
        _damage = 10;
        _positionY = 0;
        _positionX = 0;
    }

    // [2] 복사 생성자 (자기 자신의 클래스 참조 타입을 인자로 가짐)
    Knight(const Knight& knight)
    {
        cout << "Knight(const Knight&) 복사 생성자 호출" << endl;
            
        _hp = knight._hp;
        _damage = knight._damage;
        _positionX = knight._positionX;
        _positionY = knight._positionY;
    }

    // [3] 기타 생성자
    // 타입 변환 생성자. (매개 변수가 1개인 기타 생성자)
    // 명시적인(explicit) 용도로만 사용하도록 함. (암시적 형변환 방지)
    explicit Knight(int hp)
    {
        cout << "Knight(int) 기타 생성자 호출" << endl;

        _hp = hp;
        _damage = 10;
        _positionY = 0;
        _positionX = 0;
    }

	// 기타 생성자
    Knight(int hp, int damage, int positionX, int positionY)
    {
        cout << "Knight(int, int, int, int) 기타 생성자 호출" << endl;

        _hp = hp;
        _damage = damage;
        _positionY = positionX;
        _positionX = positionY;
    }
}

int main()
{
    Knight k1(100, 50, 0, 0); // 기타 생성자 사용.
    //k1._hp = 100;

    Knight k2(k1);  // 복사 생성자 사용.
    Knight k3 = k1; // 복사 생성자 사용.

    Knight k4;  // 기본 생성자 사용.
    k4 = k1;    // 복사.

    return 0;
}

결과

0개의 댓글