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; // = 대입 연산자 호출
출처:
씹어먹는 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 |
댓글