언어는 과-학인가요?/C++
생성자와 소멸자 (constructor and destructor)
이원자 탄소
2020. 10. 24. 13:48
728x90
생성자
- 객체가 생성될 때 자동으로 호출되는 함수
- 객체를 초기화시킬 수 있는 함수
- public 속성을 가진다
- 반드시 함수이름은 클래스명과 동일해야 한다
- 함수 오버로딩을 이용해서 정의할 수 있다.
소멸자
- 어떤 클래스를 이용해서 생성한 객체가 메모리에서 해제될 때 자동으로 호출되는 함수
- 마무리 작업에서 유용
- public 속성을 가진다
- 반드시 함수이름은 클래스명과 동일해야 한다
- 함수 이름앞에 틸드 (~)기호를 붙여야 한다
생성자와 소멸자가 언제 나오는지 알 수 있는 코드:
#include <iostream>
using namespace std;
//생성자: 객체가 생성될 때 자동으로 호출되는 함수(객체 변수값 초기화시키기)
//소멸자: 객체의 사용이 끝나고 소멸될때 자동으로 호출되는 함수
class firstclass {
public:
firstclass() {
cout << "생성자가 호출되었습니다" << endl;
}
//소멸자는 클래스 이름과 똑같은 함수이름으로 설정하고 함수 앞에 ~ 붙임
~firstclass() {
cout << "소멸자가 호출되었습니다" << endl;
}
};
int main() {
firstclass A;
cout << "main함수의 시작이다" << endl;
cout << "main함수의 끝이다" << endl;
}
메인함수에서 동작하기 전에 생성자가 호출되고 메인함수가 처리 된 후 소멸자가 호출된 것을 볼 수 있다.
#include <iostream>
using namespace std;
//생성자: 객체가 생성될 때 자동으로 호출되는 함수(객체 변수값 초기화시키기)
//소멸자: 객체의 사용이 끝나고 소멸될때 자동으로 호출되는 함수
class TV {
public:
TV() { //생성자 함수임
poweron = true;
channel = 20;
volume = 20;
}
TV(bool po, int cha, int vol) {
poweron = po;
channel = cha;
volume = vol;
}
bool poweron;
int channel;
int volume;
};
int main() {
TV samsung;
cout << "기본 전원 상태: " << samsung.poweron << endl;
cout << "기본 채널 번호: " << samsung.channel << endl;
cout << "기본 볼륨 크기: " << samsung.volume << endl;
cout << "----------------- " << endl;
TV LG(true, 200, 20);
cout << "기본 전원 상태: " << LG.poweron << endl;
cout << "기본 채널 번호: " << LG.channel << endl;
cout << "기본 볼륨 크기: " << LG.volume << endl;
cout << "----------------- " << endl;
}
#include <iostream>
using namespace std;
class Time {
public:
Time() {
int hour = 11;
int minute = 10;
int second = 20;
}
Time(int h, int m, int s=0) {
hour = h;
minute = m;
second = s;
}
int hour;
int minute;
int second;
};
int main() {
Time t;
Time t1(12, 20, 50);
t.hour = 10;
t.minute = 20;
t.second = 30;
cout << t.hour << "시" << t.minute << "분" << t.second << "초" << endl;
cout << t1.hour << "시" << t1.minute << "분" << t1.second << "초" << endl;
}
멤버 변수가 클래스 바깥에 정의될 경우는 클래스 안에 함수 원형을 선언해서 사용
함수가 정의된 위치에서는 스코프연산자:: 사용
728x90