[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
'코딩 1막 <C++개념편>' 카테고리의 다른 글
[C++] 36. 자료구조 : 링크드리스트(LinkedList) (0) | 2022.06.27 |
---|---|
[C++] 35. 자료구조 : 큐와 스택(Queue & Stack) (0) | 2022.06.23 |
[C++] 33. 클래스 (0) | 2022.06.22 |
[C++] 32. 콘솔 글자색 바꾸기 (0) | 2022.06.16 |
[C++] 31. 구조체 선언부와 구현부의 분리 (0) | 2022.06.16 |