본문 바로가기
공부,일/C++

복사 생성자

by fromnothing1 2021. 10. 18.

 

1. 복사 생성자란

예제 코드 class 포톤캐논

// 포토캐논
#include <string.h>
#include <iostream>

class Photon_Cannon {
  int hp, shield;
  int coord_x, coord_y;
  int damage;

 public:
  Photon_Cannon(int x, int y);
  Photon_Cannon(const Photon_Cannon& pc);// 복사 생성자

  void show_status();
};
Photon_Cannon::Photon_Cannon(const Photon_Cannon& pc) {
  std::cout << "복사 생성자 호출 !" << std::endl;
  hp = pc.hp;
  shield = pc.shield;
  coord_x = pc.coord_x;
  coord_y = pc.coord_y;
  damage = pc.damage;
}
Photon_Cannon::Photon_Cannon(int x, int y) {
  std::cout << "생성자 호출 !" << std::endl;
  hp = shield = 100;
  coord_x = x;
  coord_y = y;
  damage = 20;
}
void Photon_Cannon::show_status() {
  std::cout << "Photon Cannon " << std::endl;
  std::cout << " Location : ( " << coord_x << " , " << coord_y << " ) "
            << std::endl;
  std::cout << " HP : " << hp << std::endl;
}
int main() {
  Photon_Cannon pc1(3, 3);
  Photon_Cannon pc2(pc1);
  Photon_Cannon pc3 = pc2;

  pc1.show_status();
  pc2.show_status();
}

 

 

Photon_Cannon pc3 = pc2; 와 같이 생성즉시 대입 연산을 할 경우 

c++ 컴파일러는 Photon_Cannon pc3(pc2); 와 같이 인식해서 복사 생성자를 호출한다.

 

Photon_Cannon(const Photon_Cannon& pc);// 복사 생성자

 

 

즉 다음의 두 코드는 전혀 다른 방식으로 동작하는 것을 알 수 있다.

 

 

Photon_Cannon pc3 = pc2; // 복사 생성자 호출


Photon_Cannon pc3; // 디폴트 생성자 호출해서 pc3 생성
pc3 = pc2; // = 대입 연산자 호출

 

 

출처: 

https://modoocode.com/188

 

씹어먹는 C++ - <4 - 3. 스타크래프트를 만들자 ① (복사 생성자, 소멸자)>

 

modoocode.com

 

 

'공부,일 > C++' 카테고리의 다른 글

map  (0) 2021.10.24
연산자 오버 로딩  (0) 2021.10.18
Temporary Object  (0) 2021.10.17
string 클래스  (0) 2021.08.25
배열  (0) 2021.08.25

댓글