객체지향

 

인프런 Rookiss님의 'Part1: C++ 프로그래밍 입문' 강의를 기반으로 정리한 필기입니다. 
😎[C++과 언리얼로 만드는 MMORPG 게임 개발 시리즈] Part1: C++ 프로그래밍 입문 강의 들으러 가기!

 


 

 

객체지향의 시작

 

-  데이터 + 가공(로직, 동작)

-  객체지향 = 객체

-  객체란?

  • 플레이어, 몬스터, Game Room, etc

 

 

객체지향 코드 예제

 

Knight를 설계해보자
-  속성(데이터): hp, attack, x, y coordination 
-  기능(동작): Move, Attack, Die

#include <iostream>
using namespace std;

// class는 일종의 설계도
class Knight{
public:
    // 멤버 함수 선언
    void Move(int y, int x);
    void Attack();
    void Die();

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

void Move(Knight* knight, int y, int x)
{
    knight->posY = y;
    knight->posX = x;
}


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

void Knight::Attack()
{
}

void Knight::Die()
{
    hp = 0;
    cout << "Die" << endl;
}

// Instatntiate 객체를 만든다!
int main()
{
    Knight k1;
    k1.hp = 100;
    k1.attack = 10;
    k1.posY = 0;
    k1.posX = 0;

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

    Move(&k1, 2, 2);

    k1.Move(2, 2);
    k1.Attack();
    k1.Die();

    return 0;
}

 


MOVE&nbsp; &nbsp; class의 데이터와 class 밖에 함수로 만든 데이터는 다른곳에 저장된다. 

따라서 위의 경우 클래스에서 호출과 포인터로 호출이 서로에게 영향을 주지 않는다.

MOVE&nbsp; &nbsp; class의 데이터와 class 밖에 함수로 만든 데이터는 다른곳에 저장된다. 따라서 위의 경우 클래스에서 호출과 포인터로 호출이 서로에게 영향을 주지 않는다.

003827CE  lea          eax, [k1]                  // k1을 eax에 넣는다.

003827D1  push        eax   

003827D2  call          Move (0381447h)   // Move함수를 실행.

 

 

Move(&k1, 2, 2)와 k1.Move(2, 2)의 작동원리는 크게 다르지 않다.