바로 다음 글 가지고 왔습니다!!! ㅎㅎ
자 클래스의 소멸자란 무엇이냐!!!! 바로!!!
new와 delete과 같이 생성자와 함께 쓰여야 하는 세트 커맨드라고 보시면 되겠습니다.
생성자가 객체가 생성될 때 호출되는 것에 비해, 소멸자의 경우는 객체가 소멸될 때 호출을 하게 되는데요~
여기서 조심하셔야 할 것은 소멸자는 맴버 함수이고, 소멸자의 함수 이름도 생성자처럼 클래스 명을 사용해야 합니다!
제 기준으로 차이있고 없고를 말씀드리자면... 흠...
정말 편하게... 소멸자 함수와 생성자 함수의 함수명 앞에 '~' 기호가 있고 없고 차이라고 말씀드리고 싶어요!!! 하...하...
자 이번에도 간단한 예제로 생성자가 호출 될 시와 소멸자가 호출 될 시의 차이를 보도록할께요~
#include <iostream>
using namespace std;
class Test
{
private:
int num1;
int num2;
public:
Test(int n1 = 1, int n2 = 2);
//디폴트 매개 변수로 인자 값이 전달되지 않았을 시
//인자 값으로 n1은 1을 n2는 2값으로 초기화.
~Test();
//Test생성자의 소멸자
void Show_Data() const;
//const는 함수 내에서 값의 변동을 막기 위하여.
};
Test::Test(int n1, int n2)
: num1(n1), num2(n2)
//맴버이니셜라이저를 이용한 초기화.
{
cout << "생성자가 호출됨\n";
}
Test::~Test()
{
cout << "소멸자가 호출됨\n";
}
void Test::Show_Data() const
{
cout << "num1 : " << num1 << ", num2 : " << num2 << endl;
}
int main(void)
{
Test test1(2, 4);
Test test2(20, 40);
Test test3;
//디폴트 매개변수로 값을 전달하지 않아도 되기 때문에.
//매개 변수로 인자 값을 전해주지 않았을 때 출력해보기 위하여.
test1.Show_Data();
test2.Show_Data();
test3.Show_Data();
return 0;
}
와 같이 메시지를 보여주기 전에 3개의 생성자가 생성이 되며,
출력 후 소멸자에 의해 3개의 소멸자가 생성되었던 함수를 소멸시켜주게 됩니다.
살짝 주석처리를 하여 바꾸어보면 왜 3번이 생성되고 소멸되는 지 차이를 아실 수 있도록!!!
아래에 추가 코드와 첨부 그림을 가져왔기 때문에 금방 이해가 될 것이라고 생각됩니다~!
#include <iostream>
using namespace std;
class Test
{
private:
int num1;
int num2;
public:
Test(int n1 = 1, int n2 = 2);
//디폴트 매개 변수로 인자 값이 전달되지 않았을 시
//인자 값으로 n1은 1을 n2는 2값으로 초기화.
~Test();
//Test생성자의 소멸자
void Show_Data() const;
//const는 함수 내에서 값의 변동을 막기 위하여.
};
Test::Test(int n1, int n2)
: num1(n1), num2(n2)
//맴버이니셜라이저를 이용한 초기화.
{
cout << "생성자가 호출됨\n";
}
Test::~Test()
{
cout << "소멸자가 호출됨\n";
}
void Test::Show_Data() const
{
cout << "num1 : " << num1 << ", num2 : " << num2 << endl;
}
int main(void)
{
Test test1(2, 4);
Test test2(20, 40);
// Test test3;
//디폴트 매개변수로 값을 전달하지 않아도 되기 때문에 매개 변수로 인자 값을
//전해주지 않았을 때 출력해보기 위하여.
test1.Show_Data();
test2.Show_Data();
// test3.Show_Data();
return 0;
}
와 같이 두 군데를 주석처리 해주게 되면 결과는 다음 그림과 같이 됩니다~~ ㅎㅎ
프로그래밍은 어려분 너무 어렵다 어렵다 하지마시고!!!
직접 코딩해보시고!! 따라해보시고 하면서!!! 개념을 잡아가시면서 응용하시면서 실력을 키우시면 됩니다!!!
성급해 하지 않아도되요!!!
(물론... 사람마다 숙달 속도는 다르지만... 아 슬프다... 난 엄청 느렸는데....)
제가 올리는 글 말고도 좋은 예시나 소스코드들 설명들이 있기 때문에, 다른 분들은 어떻게 정리를 하셨나 보시면서!!!
자신이 이해하기 쉽게 한번!!! 정리해주시는거!! 잊지마시구요~~~ ㅎ
자 그럼 다음에 또 다른 커맨드와 함께 찾아올께요~~~
씨~~~유~~~
'지식창고 > 프로그래밍' 카테고리의 다른 글
(C, C++)객체라는 의미는? (0) | 2019.08.03 |
---|---|
(C++)클래스의 맴버이니셜라이저란? (0) | 2019.08.03 |
(C++)디폴트 생성자란? (0) | 2019.07.24 |
(C++)클래스의 깊은 복사란? (0) | 2019.07.18 |
(C++)묵시적 변환이란? (0) | 2019.07.18 |