사랑하애오
Published 2021. 11. 29. 14:31
C++ #03 생성자와 소멸자 C++

1. 03. 생성자와 소멸자

1.1. 생성자

C++에서 생성자(Constructor)를 이용해 객체를 생성함과 동시에 멤버 변수를 초기화 할 수 있다. 생성자는 특별한 메소드로 클래스 이름과 동일한 이름으로 구현된다.

1.1.1. 생성자의 특징

  1. 생성자는 반환값이 없음
  2. 생성자는 여러번 정의 될 수 있음(매개변수 다양화)
<code />
#include <iostream> #include <string> using namespace std; 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 slime = Character("Slime", 50, 10); slime.show(); system("pause"); return 0; }

1.1.2. 기본 생성자

C++에서 별도로 생성자를 구현하지 않으면 기본 생성자(Default Constructor)가 사용된다. 기본 생성자는 매개 변수를 가지지 않으며 멤버 변수는 0, NULL 등으로 초기화 된다.

<code />
#include <iostream> #include <string> using namespace std; class Character { private: string name; int ragePoint; int hp; int damage; public: void show() { cout << name << "[" << ragePoint << "] " << hp << " " << damage << "\n"; } }; int main(void) { Character slime = Character(); slime.show(); system("pause"); return 0; }

1.1.3. 복사 생성자

복사 생성자(Copy Constructor)는 다른 인스턴스의 참조(Reference)를 인수로 받아 그 참조를 이용해 자신의 인스턴스를 초기화 할 수 있도록 해준다. 대표적인 복사 방법인 깊은 복사(Deep Copy)를 이용해 만들어진 인스턴스는 기존의 인스턴스와 다른 메모리 공간에 할당되어 독립적이다.

<code />
#include <iostream> #include <string> using namespace std; class Character { private: string name; int ragePoint; int hp; int damage; public: // this 키워드 사용하지 않고 축약하여 작성 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 slime1("슬라임", 10, 20); slime1.pointUp(); Character slime2(slime1); slime2.pointUp(); slime1.show(); slime2.show(); system("pause"); return 0; }

1.2. 소멸자

소멸자(Destructor)는 객체의 수명이 끝났을 때 객체를 제거하기 위한 목적으로 사용된다. 객체의 수명이 끝났을 때 자동으로 컴파일러가 소멸자 함수를 호출한다. 클래스명과 동일하며 '~'기호를 사용한다.

<code />
#include <iostream> #include <string> using namespace std; class Character { private: string name; int ragePoint; int hp; int damage; public: // this 키워드 사용하지 않고 축약하여 작성 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* slime1 = new Character("슬라임", 10, 20); slime1->pointUp(); Character slime2(*slime1); slime2.pointUp(); slime1->show(); slime2.show(); delete slime1; // 동적 할당을 이용했으므로 소멸 됨 //delete& slime2; // 동적 할당하지 않았으므로 오류 발생 system("pause"); return 0; }

 

출처

https://velog.io/@underlier12

'C++' 카테고리의 다른 글

C++ #06 오버로딩  (0) 2021.11.29
C++ #05 정적할당, 동적할당  (0) 2021.11.29
C++ #04 클래스 상속  (0) 2021.11.29
C++ #02 클래스  (0) 2021.11.29
C++ #01 C와 C++ 비교  (0) 2021.11.29
profile

사랑하애오

@사랑하애

포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!