(소스코드)
#include <iostream>
#define LOG(x) std::cout << x <<std::endl
//플레이어
//클래스 -> 새로운 타입(유형)
//int float 같은 거랑 비슷
//객체 지향 프로그래밍 (OOP)
class Player //변수 3개를 썼으므로 생성시 자동으로 3개 메모리 할당됨
{
//가시성 public은 외부 노출
//기본으로는 클래스는 private로 설정함. 외부 노출 안됨
public:
int x;
int y;
int speed;
//C++에서는 변수를 자동으로 초기화 해주지 않는다
//그냥 선언만 했을시 쓰레기값이 들어간다.
//그래서 초기화를 해준다. 보통은 0을 할당
/*void Initilize()
{
x = 0;
y = 0;
speed = 0;
}*/
//생성자 Constructor, 일종의 함수이다
//생성자를 이용한 초기화도 가능하다
//클래스 이름과 동일하게 한다
//변환형은 없다
//객체가 생성될 때 한번 실행된다
Player()
{
x = 0;
y = 0;
speed = 0;
std::cout << "생성자가 호출되었는지 확인합니다\n";
}
//생성자 오버로딩 가능함
Player(int x, int y)
{
this->x = x; //내가 가진 변수 x에 입력 받은 x를 대입하라
this->y = y;
speed = 0;
std::cout << "생성자 오버로딩 테스트 호출\n";
}
void Print()
{
std::cout << x << ", " << y << std::endl;
}
};
int main()
{
//Player1
int palyerX = 0;
int palyerY = 0;
int palyerSpeed = 0;
palyerX +=2;
//Palyer2
int palyerX2 = 0;
int palyerY2 = 0;
int palyerSpeed2 = 2;
palyerX2 += 3;
palyerX2 += 1;
//위 처럼 하면 플레이어 생성시 마다 복잡해짐
//그래서 클래스를 이용한 플레이어 생성을 해준다
//생성하는 대상을 오브젝트(객체)라고 한다
Player player3;
player3.x = 0;
Player player4;
//player4.Initilize();
player4.x += 3;
player4.Print();
LOG(player4.x);
Player player5(10,10);
player5.Print();
//동적(런타임 실행 중) 할당
//힙 메모리에 저장 공간을 확보한다
//힙의 공간이 크다 속도는 느리다
//원하는 만큼의 공간 확보가 가능하다
//다 쓴 공간은 직접 해제를 해줘야 한다 delete()등
Player* player10 = new Player(7, 7);
//플레이어10은 스택에 저장되며 포인터다
//플레이어10은 힙 메모리에 12바이트 용량 메모리를 만들고
//그 시작 주소를 플레이어10에 전달을 해준다
(* player10).x = 2; //요렇게 접근하는 방식이 있고
player10->x = 4; //이렇게 접근하는 방식이 있다
player10->Print();
delete player10; //다 쓰고 났으면 힙의 메모리를 삭제해준다
//system("mode con: lines=50 cols=100");
system("pause");
}
0 comments:
댓글 쓰기