생성자 오버로딩




(소스코드)

 #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:

댓글 쓰기