☆ 생성자와 소멸자
- 생성자 : 객체가 생성되는 시점에서 자동으로 수행되는 멤버 함수. 오버로딩이 가능.
- 소멸자 : 객체가 소멸되는 시점에서 자동으로 호출되는 멤버 함수. 오버로딩 불가.
- 둘 다 사용자가 호출하는게 아니며 자동적으로 호출된다
- 리턴값이 없다
- 함수의 이름이 클래스의 이름과 동일하다
- 주로 멤버 변수의 초기화나 메모리 할당에 사용된다
#include <iostream.h>
#include <string.h>
class Sinsang
{
private:
//char name[10]; // 클래스 안에서 구체적으로 배열의 길이를 선언해주고 있지만 이것이 안될 경우
char *name; // 배열을 사용해서 임의의 길이로 문자열을 설정할 수 있도록 한다.
int age;
public:
Sinsang(); //생성자
Sinsang(char *n); // 윗줄과 이름은 똑같지만 파라미터가 틀리므로 오버로딩임.
Sinsang(char *n, int age);
~Sinsang(); //소멸자. 앞에 ~ 가 붙으면 소멸자이다
void Disp() const;
};
Sinsang::Sinsang()
{
// cout << "디폴트 생성자 호출 \n";
name = new char[10]; // 생성자 안에서 배열(문자열)의 길이를 설정한다.
strcpy(name,"디폴트");
age=0;
}
Sinsang::~Sinsang()
{
cout << "소멸자 호출 -> " << name << "\n";
delete name;
}
Sinsang::Sinsang(char *n)
{
// cout << n << "생성자 호출\n";
name = new char[strlen(n)+1]; // 생성자의 호출 타입이 오버로딩으로 달라져 있으므로
// 메모리 할당도 다르게 된다. NULL 문자 때문에 문자열 길이 +1이 된다.
strcpy(name,n);
age=0;
}
Sinsang::Sinsang(char *n, int age)
{
name = new char[strlen(n)+1];
strcpy(name,n);
this->age=age;
}
void Sinsang::Disp() const
{
cout << "이름 : " << name << endl;
cout << "나이 : " << age << endl;
}
void main()
{
/*
Sinsang s; // 디폴트 생성자 호출
Sinsang s2("송혜교");
Sinsang s3("한은정",23);
s.Disp();
s2.Disp();
s3.Disp();
*/
Sinsang *s=new Sinsang();
Sinsang *s2=new Sinsang("송혜교");
Sinsang *s3=new Sinsang("한은정",23);
s->Disp();
s2->Disp();
s3->Disp();
delete s3;
delete s2;
delete s;
}
☆ 정적 데이터 멤버
'기반지식 > C/C++' 카테고리의 다른 글
중앙정보학원 C/C++/OOP 강좌 16일차 - 2010년 6월 30일 (0) | 2010.06.30 |
---|---|
중앙정보학원 C/C++/OOP 강좌 15일차 - 2010년 6월 29일 (0) | 2010.06.30 |
중앙정보학원 C/C++/OOP 강좌 13일차 - 2010년 6월 25일 (0) | 2010.06.25 |
중앙정보학원 C/C++/OOP 강좌 12일차 - 2010년 6월 24일 (0) | 2010.06.24 |
중앙정보학원 C/C++/OOP 강좌 11일차 - 2010년 6월 23일 (0) | 2010.06.23 |