2 minute read

클래스

비쥬얼 스튜디오에서 클래스를 만들면 그이름으로 헤더파일과 cpp파일이 만들어집니다.
헤더파일은 인터페이스이고 cpp파일은 그곳에 멤버함수를 정의 할 수 있습니다. 헤더 파일을 먼저 살펴보겠습니다.

헤더파일

#pragma once
class player
{
private: 
	int posX = 0;
	int posY = 0;
	void W(int val);
	void A(int val);
	void S(int val);
	void D(int val);
public:
	void movePlayer(char key[], int val);
	void show();
};

이 코드는 C++로 작성된 player 클래스를 선언하고 있습니다.

#pragma once은 헤더 파일이 중복해서 include되는 것을 방지하기 위한 전처리기 지시어입니다.

private 섹션에는 posX와 posY라는 두 개의 멤버 변수가 선언되어 있습니다. 이들은 객체의 위치 정보를 저장합니다. 또한, W(), A(), S(), D()라는 네 개의 멤버 함수가 선언되어 있습니다. 이들은 객체가 이동할 때 사용되며, 멤버 변수 posX와 posY를 갱신합니다.

public 섹션에는 movePlayer()와 show()라는 두 개의 멤버 함수가 선언되어 있습니다. movePlayer() 함수는 사용자로부터 입력받은 방향키에 따라 객체를 이동시키는 역할을 합니다. show() 함수는 객체의 현재 위치 정보를 화면에 출력하는 역할을 합니다.

이 클래스는 게임 등에서 객체의 이동과 위치 정보를 관리할 때 사용될 수 있습니다.

C++에서 클래스는 멤버 변수와 멤버 함수를 포함하는 사용자 정의 데이터 타입입니다. 클래스 안에 선언된 멤버 변수와 멤버 함수는 접근 제어 지시자에 따라 다른 범위에서 접근할 수 있습니다.
private은 접근 제어 지시자 중 하나로, 해당 멤버 변수나 멤버 함수를 클래스 내부에서만 접근할 수 있도록 제한하는 역할을 합니다. 즉, 클래스 외부에서는 private으로 선언된 멤버 변수나 멤버 함수에 접근할 수 없습니다.
public은 접근 제어 지시자 중 하나로, 해당 멤버 변수나 멤버 함수를 클래스 외부에서도 접근할 수 있도록 허용하는 역할을 합니다. 즉, 클래스를 사용하는 외부 코드에서는 public으로 선언된 멤버 변수나 멤버 함수에 접근하여 사용할 수 있습니다.
일반적으로, 멤버 변수는 private으로 선언하고, 멤버 함수는 public으로 선언하여, 외부에서 필요한 기능을 제공하고 내부의 구현 상세는 감추는 것이 객체 지향 프로그래밍의 캡슐화 원칙에 따른 좋은 설계입니다.

이제 함수들을 설계한 cpp파일을 보겠습니다.

#include "player.h"
#include <iostream>

void player::W(int val)
{
	this->posY += val;
}
void player::A(int val)
{
	this->posX -= val;
}
void player::S(int val)
{
	this->posY -= val;
}
void player::D(int val)
{
	this->posX += val;
}
void player::movePlayer(char key[], int val)
{
	if (key[0] == 'W')
		W(val);
	if (key[0] == 'A')
		A(val);
	if (key[0] == 'S')
		S(val);
	if (key[0] == 'D')
		D(val);
}
void player::show()
{
	std::cout << "현재 X위치 " << this->posX << "현재 Y위치 " << this->posY << "\n";
}

함수를 정의하는 법은 다음과 같습니다.

형태 class이름::함수이름(fff)

this->에 대해 알아봅시다.
this 포인터는 C++에서 클래스 내에서 사용되는 특별한 포인터입니다. 객체의 멤버 함수가 호출될 때, 해당 함수 내에서 this 포인터는 현재 객체의 메모리 주소를 가리킵니다.

this 포인터는 멤버 함수 내에서 객체의 멤버 변수나 다른 멤버 함수를 호출할 때 사용됩니다. 예를 들어, 멤버 함수 내에서 객체의 멤버 변수에 접근하려면 this->멤버변수 형태로 사용할 수 있습니다. 또한, 멤버 함수 내에서 다른 멤버 함수를 호출하려면 this->다른멤버함수() 형태로 사용할 수 있습니다.

또한, this 포인터는 객체의 주소를 반환할 때 사용됩니다. 객체의 멤버 함수가 반환 타입으로 객체 자신을 반환할 때는 this 포인터를 사용하여 현재 객체의 주소를 반환합니다.

따라서, this 포인터는 객체 지향 프로그래밍에서 객체의 상태를 유지하고, 멤버 함수 간의 상호작용을 지원하는 중요한 개념 중 하나입니다.

이제 메인에서 실행만 시켜주면 끝입니다.

main.cpp

#include <bits\stdc++.h>
#include "player.h" //헤더파일 추가 필수

using namespace std;

int main()
{
	player gang; //player객체를 gang으로 생성
	while (1)
	{
		char key[2];
		int distance;
		cin >> key[0] >> distance;
		gang.movePlayer(key, distance);
		gang.show();
	}
}

이렇게 하면 누른키와 이동한 방향과 거리를 받아서 계속 위치를 출력해줍니다.

shot

Leave a comment