프로그래머/CPP_강의정리

cpp 객체 지향(1-설계도)

미역국마싯 2021. 9. 16. 15:36

절차(procedure)지향 프로그래밍

- procedure == 함수 즉, 함수 기반 프로그래밍

 

객체지향 프로그래밍

- 게임 업계에서는 객체지향 프로그래밍 방식을 이용한다.

 

객체 지향 설계

knight 설계

- 속성(데이터): hp, attack, y, x

- 기능(동작): Move, Attack, Die

// Knight 설계도
// Knight 의 메모리 크기는 16 byte (멤버 변수만 취급)
class Knight
{
public:
	// 멤버 함수 선언 및 구현
	void Move(int y, int x);
	void Attack();

	void Die()
	{
		hp = 0;	// 멤버 변수를 사용할 수 있다.
		cout << "Die" << endl;
	}

public:
	// 멤버 변수
	int hp;
	int attack;
	int posY;
	int posX;
};

class 내부에 함수를 구현할 수 있지만 외부에서도 가능하다.

// Knight 에 속한 Move 함수
void Knight::Move(int y, int x)
{
	// posY와 posX는 어디서 왔나?
	// 어셈블리에서 보면 Knight 객체의 주소를 넘겨받는다.
	// 각 개체에는 posY와 posX의 데이터가 저장되어 있다.
	posY = y;
	posX = x;
	cout << "Move" << endl;
}

void Knight::Attack()
{
	cout << "Attack: " << attack << endl;
}

이때 Knight 객체가 사용하는 동작임을 명시적으로 전달해줘야 한다.

 

 

객체 생성 및 동작

객체를 더 쉽게 이해하기 위해 다른 코드를 살펴보자.

int main()
{
	// 객체 생성
	Knight k1;
	k1.hp = 100;
	k1.attack = 10;
	k1.posY = 0;
	k1.posX = 0;

	Knight k2;
	k1.hp = 80;
	k1.attack = 5;
	k1.posY = 1;
	k1.posX = 1;


	// 객체 k1의 동작 설정
	// k1 의 주소를 넘겨준다.
	k1.Move(2, 2);		// == Move(&k1, 2, 2);
	k1.Attack();
	k1.Die();
}

k1과 k2라는 객체를 생성했는데, 예를 들어보면 필드 위에 Knight형 몬스터 2마리가 리젠됐다고 생각하면 된다.

또한 각 몬스터의 동작은 Knight 설계도에 있는 멤버 함수로 표현한다.

 

 

멤버 변수 작성법

void Knight::Move(int y, int x)
{
	posY = y;
	posX = x;
	cout << "Move" << endl;
}

해당 멤버 함수에서는 posY와 posX가 멤버 변수인지 아니면 인자로 받은 변수인지 알 수 있지만, 코드가 길어지다 보면 명확히 알기 어려울 수 있다.

따라서 설계도에서 멤버 변수를 선언할 때 멤버 변수인지 확실히 알 수 있는 표시를 남긴다.

class Knight
{

...

public:
	int m_hp;
	int mAttack;
	int _posY;
	int _posX;
};

void Knight::Move(int y, int x)
{
	_posY = y;
	_posX = x;
	cout << "Move" << endl;
}

멤버 변수 작성법은 회사 또는 개인마다 다를 수 있다. 나는 _를 주로 사용할 계획이다.

 

 

 

출처

https://www.inflearn.com/course/%EC%96%B8%EB%A6%AC%EC%96%BC-3d-mmorpg-1/dashboard

 

[C++과 언리얼로 만드는 MMORPG 게임 개발 시리즈] Part1: C++ 프로그래밍 입문 - 인프런 | 강의

시리즈를 원활하게 학습하기 위한 기초적인 C++ 문법들에 대해 학습합니다. 어셈블리 언어부터 시작해서 기본 C++ 문법, STL, C++11까지 핵심적인 내용을 압축해서 다루게 됩니다., - 강의 소개 | 인

www.inflearn.com

 

'프로그래머 > CPP_강의정리' 카테고리의 다른 글

cpp 객체지향(3-상속성)  (0) 2021.09.19
cpp 객체지향(2-생성자와 소멸자)  (0) 2021.09.16
cpp 파일 관리  (0) 2021.09.16
cpp 다차원 배열  (0) 2021.09.14
cpp 포인터와 배열  (0) 2021.09.14