티스토리 뷰

반응형
C++ 생성자(Constructor) 완벽 정리

✅ C++ 생성자 (Constructor)

🔷 1. 정의

생성자(Constructor)는 클래스의 객체가 생성될 때 자동으로 호출되는 특수한 멤버 함수입니다.
객체의 멤버 변수들을 초기화하는 역할을 하며, 클래스 이름과 같고 반환형이 없습니다.

class MyClass {
public:
    MyClass();  // 생성자
};



🔷 2. 필요성

📍 (1) 생성자가 없을 경우 문제점

  • 객체 생성 후 멤버 변수를 직접 초기화해야 함
  • 초기화를 빼먹으면 쓰레기 값 발생 → 심각한 버그
  • 자원 할당, 파일 열기 같은 작업을 자동화할 수 없음

class Person {
public:
    string name;
    int age;
};

int main() {
    Person p;
    p.name = "홍길동";  // 실수로 초기화를 빠뜨릴 수도 있음
    p.age = 30;
}

📍 (2) 생성자가 있으면 좋은 점

  • 객체 생성과 동시에 자동 초기화
  • 초기값 전달을 깔끔하게 처리
  • 코드의 일관성과 안정성 증가
  • 자원 할당 및 초기 설정을 한 번에 처리 가능

class Person {
public:
    string name;
    int age;

    Person(string n, int a) {
        name = n;
        age = a;
    }
};

int main() {
    Person p("홍길동", 30);  // 간결하고 명확
}



반응형

 


🔷 3. 선언 방법

✅ 기본 형식


class 클래스명 {
public:
    클래스명();              // 기본 생성자
    클래스명(매개변수들);     // 매개변수 생성자
};

✅ 주요 특징

항목 설명
반환형 없음 void조차 쓰지 않음
클래스 이름과 같음 대소문자 포함 정확히 같아야 함
자동 호출 객체 생성 시 자동 실행
오버로딩 가능 여러 개 정의 가능 (매개변수 다르면 됨)




🔷 4. 생성자의 종류

✅ (1) 기본 생성자


class A {
public:
    A() {
        cout << "기본 생성자 호출됨" << endl;
    }
};

int main() {
    A a;  // 자동 호출
}



✅ (2) 매개변수 생성자


class A {
public:
    int x;
    A(int val) {
        x = val;
    }
};

int main() {
    A a(10);
}



✅ (3) 복사 생성자


A(const A& other) {
    x = other.x;
}

A a1(100);
A a2 = a1;  // 복사 생성자 호출



✅ (4) 이동 생성자


A(A&& other) {
    x = other.x;
    other.x = 0;
}



🔷 5. 생성자 호출 예시

🎯 사용자가 main()에서 객체를 생성할 때 어떤 생성자를 호출하는가를 의미합니다.

✅ (1) 기본 생성자


class A {
public:
    int x;
    A() { x = 0; }
};

int main() {
    A a;
    cout << a.x;
}

✅ (2) 매개변수 생성자


class A {
public:
    int x;
    A(int val) { x = val; }
};

int main() {
    A a(42);
}

✅ (3) 복사 생성자


A a1(100);
A a2 = a1;

✅ (4) 배열 생성자 호출


class A {
public:
    int x;
    A(int val) { x = val; }
};

int main() {
    A arr[3] = { A(1), A(2), A(3) };
}

✅ (5) new 연산자


A* a = new A(10);



반응형

 


🔷 6. 최종 정리

항목 핵심 요약
생성자란 객체 생성 시 자동 호출되는 함수, 멤버 초기화 목적
필요성 수동 초기화 제거, 안전한 초기 상태 보장
선언 클래스 이름과 같고 반환형 없음
종류 기본 / 매개변수 / 복사 / 이동 생성자
초기화 방법 main에서 생성자에 인자를 넘기거나 기본 호출
핵심 가치 코드 간결화, 안정성, 유지보수성 향상

반응형
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/05   »
1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30 31
글 보관함
반응형