[C++] 34. 게터와 세터

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

728x90

<게터와 세터>
private영역의 멤버변수를 외부에서 참조할 수 있도록 해주고
수정이 되지 않아야 되는 항목에 대해서는 세터를 구현하지 않으므로써 읽기전용으로 만들 수 있다.
또한 게터와 세터가 함수이기 때문에, 겟과 셋이 될때 추가적인 기능을 부여할 수 있다.
[게터문법] 변수데이터타입 Get변수명() { return 변수; }
[세터문법] void Set변수명(변수데이터타입 value) { 변수 = value; }

 

#include <iostream>
#include <string>

using namespace std;

class Monster
{
private:
	string name;
	int hp;
	int halfHp;
	int maxHp;
	int atk;
	bool isBerserk = false;

public:
	// private영역의 멤버변수를 외부에서 참조할 수 있도록 해주고
	// 수정이 되지 않아야 되는 항목에 대해서는 세터를 구현하지 않으므로써 읽기전용으로 만들 수 있다.
	// 또한 게터와 세터가 함수이기 때문에, 겟과 셋이 될때 추가적인 기능을 부여할 수 있다.
	
	// [게터문법] 변수데이터타입 Get변수명() { return 변수; }
	bool GetIsBerserk()
	{
		return isBerserk;
	}
	int GetHp()
	{
		return hp;
	}
	// [세터문법] void Set변수명(변수데이터타입 value) { 변수 = value; }
	void SetHp(int value)
	{
		hp = value;
		if (hp > maxHp)
		{
			hp = maxHp;
		}
		if (hp <= 0)
		{
			Die();
		}
		else if (hp <= halfHp) 
		{ 
			if (isBerserk == false)
			{
				isBerserk = true;
				cout << "체력이 절반으로 줄어들어 광전사 모드가 됩니다" << endl;
				atk += 10;
			}
		}
	}

	Monster(string _name, int _hp, int _atk)
	{
		name = _name;
		hp = _hp;
		maxHp = hp;
		halfHp = hp / 2;
		atk = _atk;
	}

	void Hit(float damage)
	{
		hp -= damage;
		cout << hp << endl;
		SetHp(GetHp() - damage);
	}
	void DrinkPoison()
	{
		SetHp(GetHp() - 10);
	}
	void StepTrap()
	{
		SetHp(GetHp() - 30);
	}
	void Die()
	{
		cout << name << "이 죽었습니다" << endl;
	}
};

void main()
{
	Monster monsterA("드래곤", 100, 10);
	monsterA.Hit(20);
	monsterA.Hit(20);
	monsterA.Hit(20);
	monsterA.Hit(20);
	
	cout << monsterA.GetHp() << endl;
	monsterA.SetHp(100);

}
728x90