생성자(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 |