클래스에는 반드시 생성자가 있어야 하며 인스턴스를 생성할 때 반드시 하나의 생성자가 호출되도록 정해져 있다. 사용자가 생성자를 하나도 선언/구현하지 않은 경우에도 컴파일러가 기본 생성자(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++ 강좌 전체 목록 >>>
'프로그래밍언어.Lib > C,C++' 카테고리의 다른 글
C++의 생성자와 소멸자 실행 순서 (0) | 2015.05.17 |
---|---|
C++ 클래스의 소멸자(destructor) (0) | 2015.05.17 |
C++ 클래스의 생성자 (0) | 2015.05.16 |
1.3 C++ 언어 소개 (0) | 2015.05.16 |
C/C++의 식별자 (변수,함수,클래스 등의 이름) (0) | 2015.04.27 |