C++ 생성자: 기본 인자로 유연한 객체 생성하기
생성자(Constructor)는 클래스의 특수 멤버 함수로, 객체 생성 시 자동 호출됩니다. 이는 객체를 값이나 기본 설정으로 초기화하는 데 사용됩니다.
C++의 기본 인자(Default Arguments)는 함수나 생성자 매개변수에 기본값을 지정할 수 있게 합니다.
기본 인자를 가진 생성자
기본 인자를 가진 생성자는 선택적 매개변수를 사용해 객체를 생성할 수 있게 합니다. 매개변수에 기본값이 제공되므로, 사용자가 값을 전달하지 않으면 기본값이 사용됩니다.
문법
class ClassName {
public:
ClassName(parameter_Type parameter_Name = default_Value, parameter_Type2 parameter_Name2 = default_Value2);
};
- 생성자 이름은 클래스명과 동일
- 하나 이상의 매개변수에 기본값 제공
- 사용자가 값을 전달하지 않으면 기본값 사용
기본 인자 생성자 예제
#include <iostream>
using namespace std;
// 기본 인자를 가진 함수
void printMessage(string message = "Hello, Tutorialspoint Learner") {
cout << message << endl;
}
int main() {
// 인자 없이 호출: 기본 메시지 출력
printMessage(); // "Hello, Tutorialspoint Learner"
// 사용자 지정 인자 전달: 기본값 오버라이드
printMessage("Hi, there!"); // "Hi, there!"
return 0;
}
출력
Hello, Tutorialspoint Learner
Hi, there!
설명
- 기본값 "Hello, Tutorialspoint Learner"를 매개변수로 하는 `printMessage()` 함수 정의
- main()에서 `printMessage()` 인자 없이 호출 시 기본값 사용
- `printMessage("Hi, there!")`로 명시적 값 전달 시 기본값 오버라이드
다중 기본 인자 생성자
다중 기본 인자 생성자는 둘 이상의 매개변수에 기본값을 지정해 더 큰 유연성을 제공합니다.
예제
#include <iostream>
using namespace std;
class Box {
public:
int length, width, height;
// 다중 기본 인자 생성자
Box(int l = 5, int w = 10, int h = 2) {
length = l; width = w; height = h;
}
void display() {
cout << "Length: " << length << ", Width: " << width << ", Height: " << height << endl;
}
};
int main() {
Box box1; // 모든 기본값 사용
Box box2(15); // length만 지정
Box box3(15, 20); // length, width 지정
Box box4(15, 20, 25); // 모두 지정
box1.display(); // Length: 5, Width: 10, Height: 2
box2.display(); // Length: 15, Width: 10, Height: 2
box3.display(); // Length: 15, Width: 20, Height: 2
box4.display(); // Length: 15, Width: 20, Height: 25
return 0;
}
출력
Length: 5, Width: 10, Height: 2
Length: 15, Width: 10, Height: 2
Length: 15, Width: 20, Height: 2
Length: 15, Width: 20, Height: 25
설명
- Box 클래스에 length, width, height 세 멤버 변수와 기본값을 가진 생성자 정의
- `Box box1;` — 인자 없음, 모든 기본값 사용 (5, 10, 2)
- `Box box2(15);` — length만 15, width/height 기본값 사용
- `Box box3(15, 20);` — length, width 지정, height 기본값 사용
- `Box box4(15, 20, 25);` — 모두 지정, 기본값 오버라이드
기본 인자 생성자의 주요 특징
일반 함수와 유사하지만 객체 생성 시 더 큰 유연성과 편의성을 제공합니다.
1. 매개변수 기본값과 객체 생성 유연성
생성자는 하나 이상의 매개변수에 기본값을 가질 수 있으며, 호출자가 인자를 제공하지 않을 때 사용되고 다양한 방식으로 객체 생성을 허용합니다.
2. 다중 생성자 오버로드 회피
인자 조합마다 생성자를 오버로드하면 코드가 방대해지지만, 기본 인자 사용 시 생성자 하나로 다양한 케이스 자동 처리 가능합니다.
3. 기본 인자의 순서
다중 기본값 매개변수 시, 오른쪽부터 기본값을 주기 시작하면 중간에 기본값 없는 매개변수를 둘 수 없습니다.
Box(int l = 1, int w); // 잘못됨: 'w'에 기본값 없는데 'l'에 있음
4. const 멤버와 기본 인자 사용
클래스에 const 멤버가 있으면 생성자에서 기본 인자로 초기화를 쉽게 할 수 있습니다.
class Box {
public:
const int length, width;
Box(int l = 5, int w = 10) : length(l), width(w) {}
};
이 생성자는 기본 인자(length=5, width=10)를 사용해 const 멤버를 초기화합니다.