반응형
생성자(Constructor)

생성자는 객체 생성시 딱 한번 호출되는 함수로, 객체의 초기화를 담당한다.

생성자는 클래스나 구조체의 이름과 동일해야 하고, 반환 타입을 가지지 않는다.

생성자를 선언할 때

class MyClass {
public:
    MyClass() {
        // 기본 생성자 : 클래스와 이름이 같고 반환형이 없다
        // 초기화 작업 수행
    }

    MyClass(int value) {
        // 매개변수를 받는 생성자
        // 초기화 작업 수행
    }
};

 

 

생성자 특징

1. 객체가 생성될 때 자동으로 호출.

2. 클래스 내부에 여러 개의 생성자를 오버로딩할 수 있다.

3. 생성자를 정의하지 않을때 컴파일러가 기본 생성자(디폴트 생성자)를 자동으로 생성해준다.

4. 디폴트 값 설정이 가능하다. 기본 생성자와 디폴트 값이 설정되어 있어서

인자를 넘기지 않는 생성자는 다르다

5. 매개변수를 받아 멤버변수의 초기화 작업을 수행할 수 있다.

 

 

 

멤버 이니셜 라이저(Member Initializer)

C++의 멤버 이니셜라이저(Member Initializer)는 생성자에서 멤버 변수를

초기화하는 특별한 문법이다. 이니셜라이저는 생성자의 함수 몸체 이전에 사용되며,

멤버 변수의 초기값을 지정하는 역할을 해준다. 파일 분할을 할 시에는 일반적으로

선언부가 아닌, 정의부에 명시하며, 배열은 멤버 이니셜라이저를 사용할 수 없다.

#include <iostream>
class MyClass 
{
private:
    int value1;
    int value2;
public:
    // 멤버 이니셜라이저를 사용한 생성자
    MyClass(int num1, int num2) : value1(num1), value2(num2) 
    {
        // 추가적인 초기화 작업
        std::cout << "Constructor called. Value1: " << value1 << ", Value2: " << value2 << std::endl;
    }
};
int main() 
{
    MyClass obj(10, 20);
    return 0;
}

 

 

멤버 이니셜라이저 특징

1. 효율성 : 이니셜라이저를 사용하면 객체 생성 시 멤버 변수의 초기화를 생성자 함수 몸체 안에서

생성하는 것보다 더 효율적으로 생성할 수 있습니다. 생성자 함수 몸체에서 초기화시, 멤버 변수는

기본값으로 초기화되고, 그 다음 생성자의 함수 몸체 안에서 초기화 작업이 실행됩니다.

이니셜라이저를 사용하면, 멤버변수의 초기값을 직접 지정하여 중복된 초기화 작업을 피할 수 있습니다.

 

2. const 멤버 초기화 : const 멤버 변수의 경우, 생성자의 함수 몸체에서 초기화할 수 없습니다.

이니셜라이저를 사용하면 const멤버 변수또한 초기화할 수 있습니다.

 

3. 참조 멤버 초기화 : 참조 멤버 변수(reference member)는 선언과 동시에 초기화해줘야 합니다.

이니셜라이저를 사용하면 참조 멤버 변수를 초기화할 수 있습니다.

 

 

 

소멸자(Destructor)

모든 객체는 생성될 때 메모리에 올라간다.

소멸자는 객체 소멸 시(메모리에서 내려갈 때) 자동으로 호출되는 함수이다.

소멸자는 클래스 이름 앞에 물결표시~를 붙여서 정의하며, 반환 타입을 가지지 않는다.

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

    ~MyClass() {
        // 소멸자 작업
    }
};

 

 

 

소멸자 특징

1. 객체가 소멸될 때(메모리가 내려갈 때) 자동으로 호출된다.

2. 클래스 내부에 매개변수가 없는 형태의 한 개의 소멸자만 정의할 수 있다

소멸자는 오버로딩 할 수 없다.

3. 메모리 해제나 자원 정리 등의 작업을 수행할 때 유용하다

객체에서 동적할당한 메모리는 소멸자에서 해제해주면 좋다.

 

 

반응형

 

반응형

'C++' 카테고리의 다른 글

템플릿  (0) 2023.05.30
참조자(Reference)  (0) 2023.05.30
네임스페이스(namespace)  (0) 2023.05.30
입출력  (0) 2023.05.30
객체에 대한 이해  (0) 2023.05.30

+ Recent posts