rueki

생성자와 소멸자 본문

C,C++ 기초 및 자료구조

생성자와 소멸자

륵기 2020. 10. 6. 12:00
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