#include <iostream>
#include <vector>
#include <list>
#include <deque>
#include <map>
#include <set>
#include<algorithm>
using namespace std;
// Modern C++ (C++11 부터 나온 아이들)
// delete (삭제된 함수)
class Knight {
public:
private:
// 정의되지 않은 비공개(private) 함수
//void operator=(const Knight& k) {
// // private로 선언함으로써 밖에서 사용을 못하게 함.
// // 하지만 내부에서는 사용 가능함.
// // 아예 구현부를 안 만들어버리면 사용을 막을 수는 있지만 찝찝함.
//}
friend class Admin; // 다른 클래스에게 private를 사용할 수 있도록 허락하는 문법
public:
void operator=(const Knight& k) = delete; // 이 함수를 사용하지 않겠다.
// 사용하려 하면 "삭제된 함수를 참조하려고 합니다" 라는 에러가 나옴
public:
int _hp = 100;
};
class Admin {
public:
void CopyKnight(const Knight& k) {
Knight k1;
k1 = k; //복사 연산자가 외부에서 사용되버림. 막히지 않음!
// -> 우리는 복사연산자를 아예 아무도 사용 못하게 막고 싶음.
}
};
int main()
{
Knight k1;
Knight k2;
// 목표 복사연산자를 막고싶어요!
//k1 = k2;
Admin a;
a.CopyKnight(k1);
return 0;
}