rueki
생성자와 소멸자 본문
728x90
반응형
생성자(Constructor)
객체를 생성함과 동시에 멤버 변수를 초기화 할 수가 있다.
클래스의 이름과 동일한 이름의 메소드로 구현된다.
return 값이 없음.
여러 번 정의되어 다양한 방법으로 객체를 초기화 할 수 있음.
생성자를 별도로 구현하지 않으면 기본 생성자가 사용된다. 매개변수를 가지지 않으며 멤버변수는 0, Null 등의 값으로 초기화가 된다.
class Character{
private:
string name;
int ragePoint;
int hp;
int damage;
public:
// 클래스와 동일한 명, 이름, 체력, 데미지값은 함수 파라메터로 받는다.
Character(string name, int hp, int damage){
this->name = name;
this->ragePoint =0 ;
this->hp=hp;
this->damage=damage;
}
void show(){
cout << name << "[" << ragePoint << "]" << hp << " " <<damage << '\n';
}
};
int main(void)
{
Character character = Character("슬라임",50,10);
//Character character = Character();
// -> null, 0 값 출력
character.show();
return 0;
}
복사 생성자
다른 인스턴스의 참조를 인수로 받아서 자신의 인스턴스를 초기화할 수 있도록 한다.
Deep copy를 이용해 만들어진 인스턴스는 기존 인스턴스와 다른 메모리 공간에 할당되어 독립적이다.
class Character{
private:
string name;
int ragePoint;
int hp;
int damage;
public:
Character(string name, int hp, int damage): name(name), ragePoint(0),hp(hp), damage(damage){}
//복사생성자, 캐릭터 인스턴스를 변수로 받음
Character(const Character& other){
name = other.name;
ragePoint = other.ragePoint;
hp = other.hp;
damage = other.damage;
}
void pointUP() {ragePoint++;}
void show(){
cout <<name <<"["<<ragePoint << "]" << hp << " " << damage << '\n';
}
};
int main(void){
Character character1("슬라임", 10, 20);
character1.pointup();
Character character2(character1);
Character2.pointUp();
character1.show();
character2.show();
system("pause");
}
character1의 값을 character2의 값으로 복사함.
소멸자(Destructor)
객체의 수명이 끝났을 때 객체를 제거하기 위한 목적으로 사용된다.
자동으로 컴파일러가 소멸자 함수를 호출한다.
생성자처럼 클래스의 이름과 동일하며 ~ 기호를 이용해 정의할 수 있다.
class Character{
private:
string name;
int ragePoint;
int hp;
int damage;
public:
Character(string name, int hp, int damage): name(name), ragePoint(0),hp(hp), damage(damage){}
~Character() {
cout << "[객체가 소멸됩니다.]\n";
}
void pointUP() {ragePoint++;}
void show(){
cout <<name <<"["<<ragePoint << "]" << hp << " " << damage << '\n';
}
};
int main(void){
//동적할당
Character* character1 = new Character("슬라임",10,20);
character1->pointUp();
Character character2(*character1);
character2.pointUp();
character1->show();
character2.show();
//동적할당을 통해 성공적으로 소멸 가능
delecte Character1;
systme("pause")
}
728x90
반응형
'C,C++ 기초 및 자료구조' 카테고리의 다른 글
C++ 클래스의 상속 (0) | 2020.10.09 |
---|---|
우선순위 큐(priority Queue) (0) | 2020.10.09 |
C++ 입출력 (0) | 2020.09.16 |
함수 포인터 (0) | 2020.07.26 |
매개변수의 기본값 (0) | 2020.07.21 |
Comments