GameChoi
Choi Programming
GameChoi
전체 방문자
오늘
어제
  • 분류 전체보기 (468)
    • C++ Algorithm & Study (184)
      • C++ & Algorithm Strategies (45)
      • Game Math & DirectX 11 (72)
      • Server + UE5 (29)
      • Lyra Clone Coding (37)
    • Create Game (284)
      • [Window API] Game Client & .. (55)
      • [DirectX] DirectX 2D & 3D (155)
      • [UE5] BLUEPRINT & C++ (74)
    • odds and ends (0)
      • English (0)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

  • client
  • Destination Move Packet
  • Player Move Packet
  • server
  • Game Room
  • Network Worker
  • job queue
  • Algorithm Strategies
  • Direct3D
  • session
  • Other Character
  • UE5
  • core
  • Player State
  • Direct11
  • c++
  • protobuf
  • RPG Game
  • GAME Client
  • Game Server

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
GameChoi

Choi Programming

[C++] 4 - 기초 문법 공부 일지(OOP)
C++ Algorithm & Study/C++ & Algorithm Strategies

[C++] 4 - 기초 문법 공부 일지(OOP)

2022. 11. 29. 23:52
  • 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
}
  • Singleton
    • UserManager
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();
}

'C++ Algorithm & Study > C++ & Algorithm Strategies' 카테고리의 다른 글

[C++] 6 - 기초 문법 공부 일지(동적 할당)  (0) 2022.12.01
[C++] 5 - 기초 문법 공부 일지(CAST)  (0) 2022.12.01
[C++] 3 - 기초 문법 공부 일지(Pointer)  (0) 2022.11.29
[C++] 2 - 기초 문법 공부 일지  (0) 2022.11.28
[C++] 1 - 기초 문법 공부 일지  (0) 2022.11.28
    'C++ Algorithm & Study/C++ & Algorithm Strategies' 카테고리의 다른 글
    • [C++] 6 - 기초 문법 공부 일지(동적 할당)
    • [C++] 5 - 기초 문법 공부 일지(CAST)
    • [C++] 3 - 기초 문법 공부 일지(Pointer)
    • [C++] 2 - 기초 문법 공부 일지
    GameChoi
    GameChoi

    티스토리툴바