생성자(Constructor)와 소멸자(Destructor)
생성자
- 클래스에 선언된 멤버 변수를 은닉화(private) 할 경우 외부 접근으로 **초기화 ** 할 수 없다.
- 이때 생성자를 통해 초기화 할 수 있다.
- 모든 객체의 특징은 메모리 할당을 받고 생성자를 호출 한다.
- 생성자는 함수이고, 클래스 이름과 같은 이름을 가지고, 리턴이 없다.
class counter {
private:
int cnt = 0; // 문법 에러
public:
void sum();
};
- 위 코드와 같이 클래스에서 바로 초기화 할 수 없음
class counter {
private:
int cnt;
public:
counter() // 생성자
{
cnt = 0; // 초기화
}
void sum();
};
- 생성자를 통해 초기화 할 수 있음
class counter {
private:
int cnt;
public:
counter(int _cnt) // 생성자
{
cnt = _cnt; // 초기화
}
void sum();
};
int main()
{
counter test(0); // 객체 생성하면서 초기화
//counter test = counter(0); // 같은 의미
return 0;
}
- 생성자를 통해 파라메타를 입력받아 초기화도 가능
class counter {
private:
int cnt;
public:
counter() // 디폴트 생성자
{
cnt = 0;
}
counter(int _cnt) // 오버로딩 생성자
{
cnt = _cnt;
}
void sum();
};
int main()
{
counter test(0); // 객체 생성하면서 초기화
return 0;
}
- 생성자도 오버로딩이 가능하다.
- 디폴트 생성자는 인자값을 받지 않는다.
class counter {
private:
int cnt;
public:
counter(int _cnt = 0) // 디폴트 매개변수
{
cnt = _cnt;
}
void sum();
};
int main()
{
counter test(0); // 객체 생성하면서 초기화
return 0;
}
- 디폴트 매개변수 를 사용하면 다음과 같이 코드를 줄일 수 있다.(디폴트 매개변수는 이전 설명 참조)
소멸자
- 생성자와 같은 함수이다.
- 클래스 이름앞에 ~ 가 붙는 형태이다.
- 리턴타입도 없고, 매개변수도 없고, 오버로딩도 안된다.
class counter {
private:
int cnt;
public:
counter() // 생성자
{
cnt = 0;
}
~counter(); // 소멸자
};
int main()
{
counter test; // 생성자 호출
return 0; // 소멸자 호출
}
도움이 되셨다면 더 좋은 정보 공유를 위해 광고 클릭 부탁 드립니다 :)
0 댓글