생성자란?
클래스는 객체가 생성될 때 자동으로 실행되는 생성자(constructor)라는 특별한 멤버 함수를 통하여 객체를 초기화합니다. 한 클래스에 여러 개의 생성자를 들 수 있으나, 이 중 하나만 실행됩니다.
생성자의 특징을 하나씩 정리해봅시다.
생성자의 목적은 객체가 생성될 때 필요한 초기 작업을 위함입니다.
멤버 변수의 값을 특정 값을 설정하거나, 메모리를 동적 할당 받거나, 파일을 읽거나, 네트워크를 연결하는 등 객체를 사용하기 전에 필요한 조치를 할 수 있도록 하기 위함입니다.
생성자 함수는 오직 한 번만 실행됩니다.
생성자 함수는 각 객체마다 객체가 생성되는 시점에 오직 한 번만 자동으로 실행됩니다.
생성자 함수의 이름은 클래스 이름과 동일하게 작성되어야 합니다.
생성자 함수의 이름은 반드시 클래스 이름과 동일하게 작성되어야 합니다. 이로 인해 생성자는 다른 멤버 함수와 쉽게 구분됩니다.
생성자 함수의 원형에 리턴 타입을 선언하지 않는다.
생성자는 함수이지만 리턴 타입을 선언해서는 안 된다. void 리턴 타입을 선언해서는 안 됩니다. void 리턴 타입을 설정해서는 안 됩니다. 다음은 생성자를 잘못 선언하여 컴파일 오류가 발생한 사례입니다.
class Circle {
...
Circle(); // 정상적인 생성자 선언. 리턴 타입 선언하지 않음
void Circle(int r); // 컴파일 오류. 생성자는 리턴 타입 없음
int Circle(double r); // 컴파일 오류. 생성자는 리턴 타입 없음
...
}
생성자 함수는 함수 실행을 종료하기 위해 return 문을 사용할 수 있습니다. 그러나 어떤 값도 리턴하면 안 됩니다. 다음 코드를 봅시다.
Circle::Circle() {
...
return; // 생성자 함수를 종료하는 정성적인 리턴문
}
Circle::Circle() {
...
return 0; // 컴파일 오류. 생성자 함수는 값을 리턴하면 안됩니다.
}
생성자는 중복 가능합니다.
생성자는 한 클래스에 여러 개 만들 수 있습니다. 물론 매개 변수 개수가 타입이 서로 다르게 선언되어야 합니다. 다음은 Circle 클래스에 2개의 생성자가 중복 선언된 사례입니다.
Circle(); // 매개 변수 없는 생성자
Circle(int r); // 매개 변수 있는 생성자
여러 생성자를 작성 가능하게 한느 것은 사용자가 다양한 방법으로 객채를 생성하도록 함에 있습니다. 객체가 생성될 때 생성자 중 하나가 호출되지만 이 생성자는 다른 생성자를 호출할 수 있습니다.
객체 생성과 생성자 실행
#include <iostream>
using namespace std;
class Circle {
public:
int radius;
Circle(); // 기본 생성자
Circle(int r); // 매개변수가 있는 생성자
double getArea();
};
Circle::Circle() {
radius = 1; // 반지름 값 초기화
cout << "반지름 " << radius << " 원 생성" << endl;
}
Circle::Circle(int r) {
radius = r; // 반지름 값 초기화
cout << "반지름 " << radius << " 원 생성" << endl;
}
double Circle::getArea() {
return 3.14 * radius * radius;
}
int main() {
Circle dount; // 매개 변수 없는 생성자 호출
double area = dount.getArea();
cout << "donut 면적은 " << area << endl;
Circle pizza(30); // 매개 변수 있는 생성자 호출. 30이 r에 전달됨
area = pizza.getArea();
cout << "pizza 면적은 " << area << endl;
}
실행 결과
반지름 1 원 생성
donut 면적은 3.14
반지름 30 원 생성
pizza 면적은 2826
예제 3-3의 다음 코드에서 donut 객체와 pizza 객체의 생성자가 각각 실행됩니다.
Circle donut; // Circle() 호출
Circle pizza(30); // Circle(int r) 생성자 호출. Circle(30) 호출
donut이 생성될 때 매개 변수 없는 Circe()이 호출되며, pizza가 생성될 때 Circle(int r)을 호출하고 매게 변수 r에 3이 전달됩니다.
'프로그래밍 언어 > C++' 카테고리의 다른 글
| 생성자와 멤버 변수의 초기화 (0) | 2026.06.09 |
|---|---|
| 위임 생성자(delegating constructor), 생성자가 다른 생성자 호출 (0) | 2026.06.06 |
| 객체 생성과 객체 활용 (0) | 2026.05.31 |
| C++ 클래스 만들기 (0) | 2026.05.28 |
| 키보드로 문자열 입력 (0) | 2026.05.25 |