클래스에는 반드시 생성자가 있어야 하며 인스턴스를 생성할 때 반드시 하나의 생성자가 호출되도록 정해져 있다. 사용자가 생성자를 하나도 선언/구현하지 않은 경우에도 컴파일러가 기본 생성자(default constructor)를 만들어서 인스턴스 생성시에 이 기본 생성자를 호출하게 된다. 기본 생성자는 입력 인자가 없는 생성자이다.


 즉, 만약 다음과 같이 생성자가 없다면


class Rect{
   public:
      int width;
      int height;
};


컴파일러는 다음과 같이 입력 인자가 없는 기본 생성자를 자동으로 만들어 준다. 기본 생성자는 inline 멤버 함수로서 아무일도 하지 않는다.


class Rect{
   public:
       int width;
       int height;
       Rect() {}; // 자동으로 생성되는 기본 생성자
};


이와 같이 사용자가 생성자를 하나도 선언/정의하지 않았을 경우 C++ 컴파일러는 백그라운드에서 기본 생성자를 삽입하여 인스턴스 생성 시에 호출한다.


 한 가지 주의할 점은 생성자가 하나라도 선언된 클래스는 기본 생성자가 자동으로 생기지 않는다는 점이다. 이 말은 만약 매개변수가 있는 생성자들만 있는 경우 인스턴스 선언에서 입력 인수가 없이 선언한 경우는 오류를 발생하게 된다는 의미이다. 기본 생성자가 없기 때문이다. 예를 들어서


class Rect {

   public:

       Rect(int iw, int ih);
       int width;
       int height;
};
Rect::Rect(int iw, int ih) { // 입력 인수가 두 개인 생성자
   width = iw;
   height = ih;
}


와 같이 클래스가 정의된 경우에


Rect rect; //에러 발생


라고 인스턴스를 생성하려하면 에러를 발생시킨다. 왜나면 이 경우 기본 생성자를 호출해야 하는데 클래스 정의에서 입력 인수가 두 개인 생성자가 정의되어 있으므로 컴파일러는 자동으로 기본 생성자를 만들지 않기 때문이다. 따라서 없는 기본 생성자를 호출한 격이 되므로 에러를 발생한다.


C++ 강좌 전체 목록 >>>


c{c++},n{c000x}

Posted by 살레시오
,