[C++] 23. 복사생성자 (참조자의 개념)

2022. 6. 7. 17:05코딩 1막 <C++개념편>

728x90

앞서 생성자와 소멸자를 공부하다가 생성자는 기본생성자가 있고 새로운 개념이 등장했다.

바로 '복사 생성자'라는 것인데, 복사 생성자(call by reference)란

자신과 같은 클래스 타입의 다른 객체에 대한 참조(reference)를 인수로 전달받아, 그 참조를 가지고 자신을 초기화하는 방법입니다.

복사 생성자는 새롭게 생성되는 객체가 원본 객체와 같으면서도, 완전한 독립성을 가지게 해줍니다.

*참조자(call by reference)의 형태
: 데이터타입& 변수명

#include <iostream>

using namespace std;

struct Monster
{
	string name;
	float hp;
	float damage;

	// 기본 생성자 만들기
	Monster()
	{
		cout << "기본 생성자 호출" << endl;
		name = "초기화";
		hp = 0;
		damage = 0;
	}

	// 복사 생성자 만들기
	Monster(Monster& target)
	{
		cout << "복사 생성자 호출" << endl;
		name = "복사";
	}

	// 오버로딩된 형태의 생성자 만들기
	Monster(string _name, float _hp, float _damage)
	{
		SetInfo(_name, _hp, _damage);
		cout << name << " 생성자 호출" << endl;
	}

	// 소멸자 만들기
	~Monster()
	{
		cout << name << " 소멸자 호출" << endl;
	}

	void PrintInfo()
	{
		cout << name << endl;
		cout << hp << endl;
		cout << damage << endl;
	}

	void SetInfo(string _name, float _hp, float _damage)
	{
		name = _name;
		hp = _hp;
		damage = _damage;
	}
};


// 참조자(call by reference)
// 데이터타입& 변수명
void ChangeValue(int& temp, int value)
{
	temp = value;
}

void main()
{
	int num = 10;

	ChangeValue(num, 30);

	cout << num << endl;
}

출력결과

728x90

'코딩 1막 <C++개념편>' 카테고리의 다른 글

[C++] 25. 동적배열이란  (0) 2022.06.07
[C++] 24. 동적할당이란  (0) 2022.06.07
[C++] 22. 생성자와 소멸자  (0) 2022.06.07
[C++] 21. 랜덤  (0) 2022.06.02
[C++] 20. 입력  (0) 2022.06.02