생성자는 꼭 있어야 하는가?
클래스에 여러 개의 생성자가 있다 해도, C++ 컴파일러는 생성자 중 반드시 하나를 호출하도록 컴파일합니다. 생성자 없는 클래스란 있을 수가 없습니다. 생성자가 없는 클래스에 대해서는 컴파일러가 기본 생성자(default constructor)를 만들어 삽입하고, 자신이 삽입한 기본 생성자를 호출하도록 컴파일합니다.
기본 생성자
기본 생성자란 클래스에 선언된 어떤 생성자도 없을 때 컴파일러가 자동으로 생성해주는 생성자로서 디폴트 생성자(default constructor)라고도 부르며, 다음과 같이 매개 변수 없는 생성자입니다.
class Circle {
Circle(); // 기본 생성자
};
기본 생성자가 자동으로 생성되는 경우
생성자가 하나도 없는 클래스의 경우 컴파일러는 보이지 않게 기본 생성자를 삽입합니다.
Circle donut; // 생성자 Circle() 호출
기본 생성자가 자동으로 생성되지 않는 경우
생성자가 하나라도 선언된 클래스의 경우, 컴파일러는 기본 생성자를 자동으로 삽입하지 않습니다.
Circle pizza(30);
이 문장은 매개 변수를 가진 Circle(int r) 생성자를 호출하며 정상적으로 컴파일됩니다.
Circle donut; // Circle() 생성자가 없으므로 컴파일 오류
ex3-6 Rectangle 클래스 만들기
#include <iostream>
using namespace std;
class Rectangle {
public:
int width, height; // 너비와 높이
Rectangle(); // 생성자
Rectangle(int w, int h); // 생성자
Rectangle(int length); // 생성자
bool isSquare();
};
Rectangle::Rectangle() {
width = height = 1;
}
Rectangle::Rectangle(int w, int h) {
width = w; height = h;
}
Rectangle::Rectangle(int length) {
width = height = length;
}
bool Rectangle::isSquare() { // 정사각형이면 true를 리턴하는 멤버 함수
if (width == height) return true;
else return false;
}
int main() {
Rectangle rect1;
Rectangle rect2(3, 5);
Rectangle rect3(3);
if (rect1.isSquare()) cout << "rect1은 정사각형이다." << endl;
if (rect2.isSquare()) cout << "rect2은 정사각형이다." << endl;
if (rect3.isSquare()) cout << "rect3은 정사각형이다." << endl;
}
실행 결과
rect1은 정사각형이다.
rect3은 정사각형이다.
'프로그래밍 언어 > C++' 카테고리의 다른 글
| 소멸자 실행 (0) | 2026.06.18 |
|---|---|
| 소멸자란? (0) | 2026.06.15 |
| 생성자와 멤버 변수의 초기화 (0) | 2026.06.09 |
| 위임 생성자(delegating constructor), 생성자가 다른 생성자 호출 (0) | 2026.06.06 |
| 생성자란? (1) | 2026.06.03 |