DirectX/DirectX 2D

DX2D_11 Rect_Control (상속, 다형성)

컴맹학자 2022. 12. 14. 23:10
728x90

C++ 에서 사용 할 수 있는 기능중 상속과 다형성을 사용하는데 개념은 아래와 같다. 

 

상속 : 부모 클래스의 기능을 자식 클래스에서 상속을 받아 사용 한다. 큰 특징은 자식 클래스들은 점점 구체화 됨.

예를 들어 자동차 설계도로 애기 하자면 부모 클래스는 간단한 뼈대의 구조만 있다면 상속 받은 자식 클래스 들은 점점 기능을 붙여 나가면서 점점 구체화 된다는 점

 

다형성 : 부모 클래스의 공통으로 사용되는 함수 및 기능은 자식 클래스 에서 오버라이딩 형태로 사용

예를 들어 자동차의 공통 기능 브레이크 가정 하면 상속받은 A, B라는 차는 공통점으로 브레이크 기능을 호출 해서 사용 가능 하고 이 추가적 으로 UpCasting, DownCasting 개념이 같이 들어가 있다.

 

위에 2가지 개념을 가진체로 기존의 Rect 클래스를 상속받는 형태의  자식 클래스 만들어서 몇가지 기능을 넣어서 사용 할 예정


1. Rect_Control.h

1. 부모 클래스를 사용 하기 위해 헤더 파일에 include 사용

2. class 선언부 옆에 public 붙여서 부모 클래스를 넣어서 상속

3. 생성자에서 부모클래스 에서의 생성부분을 비슷하게 선언

4. 이동 기능을 구현

더보기
#pragma once
#include "Rect.h"

class Rect_Control : public Rect
{
public:
	Rect_Control(Shader* shader);
	Rect_Control(Shader* shader, Vector2 position, Vector2 scale, D3DXCOLOR color = D3DXCOLOR(1, 1, 1, 1));

	void MoveLeft();
	void MoveRight();

	void Movespeed(float val); //셋팅용
	FORCEINLINE float Movespeed() { return Speed; }

private:
	float Speed = 0.1f;

};

2. Rect_Control.cpp

1. 생성자 부분에 부모클래스에 값을 넣을 수 있도록 셋팅

2. MoveLeft, Right 쪽에 Position() 같은 경우 부모쪽에 있는 vector2 position값을 가져오기 위한 함수를 호출 및 다시 셋팅

더보기
#include "stdafx.h"
#include "Rect_Control.h"

Rect_Control::Rect_Control(Shader* shader) 
	: Rect(shader)
{
}

Rect_Control::Rect_Control(Shader* shader, Vector2 position, Vector2 scale, D3DXCOLOR color)
	: Rect(shader, position, scale, color)
{
}

void Rect_Control::MoveLeft()
{
	Vector2 pos = Position();
	pos.x -= Speed;

	Position(pos);
}

void Rect_Control::MoveRight()
{
	Vector2 pos = Position();
	pos.x += Speed;

	Position(pos);
}

void Rect_Control::Movespeed(float val)
{
	Speed = val;
}

3. 수정

 

Rect.h

기존에 소멸자 부분을 virtual 사용을 해서 소멸자 호출 하면 부모 -> 자식 순으로 자기 자신을 마지막에 삭제


Scene.cpp

Rect클래스처럼 선언 및 셋팅

※ 이거 이외도 Update(), Render()... 각종 함수 에서도 값을 셋팅


Scene.cpp -> Update()

키를 입력 받아서 Rect_Control 좌우로 움직이는 기능과 ImGui를 통해서 이동 속도 조절


실행

간단하게 좌우로 움직이고 조작해서 이동속도 조절하는 흰색 네모를 구현

 

 

https://github.com/ascher8159/DX2D

DX2D_11

'DirectX > DirectX 2D' 카테고리의 다른 글

DX2D_13 Rect_Control  (1) 2022.12.24
DX2D_12 Time (System)  (0) 2022.12.15
DX2D_10 Rect  (0) 2022.12.07
DX2D_9 WVP2  (1) 2022.12.04
DX2D_09 WVP  (0) 2022.12.01