- Object-oriented Language
- OOP 3대 요소
- 캡슐화(Encapsulation) - 정보 은닉
- 프로그램 내 같은 기능을 목적으로 작성된 코드를 모아 다른 클래스에서 사용하지 못하게 하는 것
- Private - 나만의 , Public - 공개, Protected - 보호
- 상속(Inheritance) - 재사용
- public = 공개적 상속, preotected - 보호받는 상속, private - 나까지만
- Is - A, Has - A
- 다형성(Polymorphism) - 편의
- 하나의 객체가 여러 가지 형태를 가질 수 있는 것
- over loading - 함수 이름의 재사용
- overriding - 재사용
class CreatureManager
{
private:
protected:
public:
CreatureManager() : _creatureId(100) {} // 생성자
CreatureManager(int id) : _creatureId(id) {} // 타입 변환 생성자 - 인자 1개
CreatureManager(int id, int hp) : _creatureId(id), _hp(hp) {} // 기타 생성자
CreatureManager(const CreatureManager& other) {} // 복사 생성자
// virtual을 붙이는 이유
// PlayerManager를 CreatureManager로 캐스팅하고 삭제를 할 경우 자식의 소멸자가 실행이 되지 않음
virtual ~CreatureManager() {} // 소멸자
int GetCreatureId() { return _creatureId; }
virtual void PrintManager() {}
private:
int _creatureId = 0;
protected:
public:
int _hp;
};
// Creature는 Player다 Creature가 player를 가지고 있다?
class PlayerManager : public CreatureManager
{
public:
PlayerManager() : CreatureManager() {};
int GetPlayerId() { return _playerId; }
virtual void PrintManager() override {} // override
private:
int _playerId = 0;
};
int main()
{
CreatureManager creatureManager;
// encapsulation
// creatureManager._createId = 5; // 캡슐화에 의해 private로 사용되고 있으므로 클래스 밖에서는 사용 불가능
creatureManager.GetCreatureId(); // 따라서 public으로 만들어진 GetCreateId로 가지고 올 수 있음.
PlayerManager playerManager;
cout << playerManager.GetCreatureId() << endl; // 100
}
class UserManager // singleton
{
public:
static UserManager* GetInstance()
{
static UserManager um;
return &um;
}
public:
int GetUserCount() { return _userCount; }
public:
int _userCount = 0;
};
int main()
{
UserManager::GetInstance()->GetUserCount();
}