[C++] 객체지향
객체지향
인프런 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 class의 데이터와 class 밖에 함수로 만든 데이터는 다른곳에 저장된다.
따라서 위의 경우 클래스에서 호출과 포인터로 호출이 서로에게 영향을 주지 않는다.
003827CE lea eax, [k1] // k1을 eax에 넣는다.
003827D1 push eax
003827D2 call Move (0381447h) // Move함수를 실행.
Move(&k1, 2, 2)와 k1.Move(2, 2)의 작동원리는 크게 다르지 않다.
'⭐ Programming > C++' 카테고리의 다른 글
[C++] 생성자와 소멸자 2 (0) | 2022.04.04 |
---|---|
[C++] 생성자와 소멸자 (0) | 2022.04.04 |
[C++] 파일 분할 관리, #ifndef, #endif (0) | 2022.04.03 |
[C++] 문자열, strlen, strcpy, StrCat, StrCmp, ReverseStr (0) | 2022.03.30 |
[C++] TextRPG #3 구현 연습하기 (0) | 2022.03.29 |
댓글
이 글 공유하기
다른 글
-
[C++] 생성자와 소멸자 2
[C++] 생성자와 소멸자 2
2022.04.04 -
[C++] 생성자와 소멸자
[C++] 생성자와 소멸자
2022.04.04 -
[C++] 파일 분할 관리, #ifndef, #endif
[C++] 파일 분할 관리, #ifndef, #endif
2022.04.03 -
[C++] 문자열, strlen, strcpy, StrCat, StrCmp, ReverseStr
[C++] 문자열, strlen, strcpy, StrCat, StrCmp, ReverseStr
2022.03.30