Computer >> 컴퓨터 >  >> 프로그래밍 >> C++

C++ 생성자 오버로딩 완벽 가이드: 핵심 개념과 예제 코드

함수 오버로딩(Function Overloading)은 객체 지향 프로그래밍 언어의 핵심 기능 중 하나입니다. 매개변수의 개수나 타입이 다르다면 동일한 이름의 함수를 여러 개 정의할 수 있습니다. 이번 글에서는 C++ 클래스에서 생성자 오버로딩(Constructor Overloading)을 활용하는 방법을 알아보겠습니다.

생성자 오버로딩의 핵심 개념

생성자 오버로딩을 올바르게 사용하기 위해서는 다음 세 가지 중요한 규칙을 반드시 이해해야 합니다.

  • 오버로딩된 생성자들은 이름은 같지만, 매개변수의 개수가 서로 달라야 합니다.
  • 객체 생성 시 전달되는 인자의 개수와 타입에 따라 어떤 생성자가 호출될지 결정됩니다.
  • 객체를 생성할 때 적절한 인자를 함께 전달해야 하며, 그렇지 않으면 컴파일러가 어떤 생성자를 호출해야 할지 판단할 수 없습니다.

예제 코드

아래 예제는 사각형(Rect) 클래스에서 두 개의 생성자를 오버로딩하여 사용하는 모습을 보여줍니다. 하나는 기본 생성자이고, 다른 하나는 가로와 세로 값을 받아 넓이를 계산하는 생성자입니다.

#include <iostream>
using namespace std;

class Rect {
private:
    int area;
public:
    // 기본 생성자: 넓이를 0으로 초기화
    Rect() {
        area = 0;
    }
    // 매개변수가 있는 생성자: 두 값을 곱해 넓이 계산
    Rect(int a, int b) {
        area = a * b;
    }
    void display() {
        cout << "The area is: " << area << endl;
    }
};

main() {
    Rect r1;        // 기본 생성자 호출
    Rect r2(2, 6);  // 매개변수 2개짜리 생성자 호출
    r1.display();
    r2.display();
}

실행 결과

The area is: 0
The area is: 12

코드 설명

위 예제에서 r1 객체는 인자 없이 생성되었기 때문에 기본 생성자 Rect()가 호출되어 넓이가 0으로 초기화됩니다. 반면 r2 객체는 두 개의 정수 인자(2와 6)를 전달했으므로 Rect(int a, int b) 생성자가 호출되어 넓이가 12로 계산됩니다.

이처럼 생성자 오버로딩을 활용하면 상황에 따라 다양한 방식으로 객체를 초기화할 수 있어 코드의 유연성과 재사용성이 크게 향상됩니다.