배운 내용 총 실습 : 몬스터 전투
- 클래스 만들기
- 오버 로딩을 통한 다형성 구현하기
- 파일 분할하기 - 선언부와 구현부 + 파일 분할 후 몬스터 슬라임 추가해보기
- 상속의 구조로 변경 하기
- 오버라이딩을 통한 다형성 구현하기
- 가상 함수, 순수 가상 함수
이번 시간에는
- 클래스 만들기
- 오버 로딩을 통한 다형성 구현하기
- 파일 분할하기 - 선언부와 구현부 + 파일분할 후 몬스터 슬라임 추가해보기
1. 클래스 만들기
Dragon 클래스와 Ogre 클래스 생성
2. 오버 로딩을 통한 다형성 구현하기
드래곤끼리 싸우게 해 줄 것이다 - Attack( Dragon& ref )
드래곤과 오거 싸우는 상황도 필요하다 - Attack ( Ogre& ref )
드래곤 클래스 Attack( ) 함수 중 - 오우거 타입으로 인자 값 받는 Attack ( ) 함수
- 그것으로 오우거 클래스의 멤버 변수 (_private _attack, _defense) 접근 불가능
- 접근하기 위해 오우거 클래스 멤버변수 Set( )/Get( ) 함수 만들어 준다.
- 반대 상황 : 오우거에서 드래곤 싸우는 상황도 있으니 드래곤 멤버 변수도 Set( ) / Get( )
- 그 다음 코드 변경
오거 클래스에도 똑같이 적용
이렇게 해준 의미는 - 같은 Attack( ) 함수를 사용하지만 들어오는 인자 값에 따라 다르게 결과가 다르게 나타난다.
Attack( ) 함수의 오버 로딩을 통해서 - 다형성 구현한 것!
3. 파일 분할하기 - 선언부와 구현부 + 파일분할 후 몬스터 슬라임 추가해보기
함수의 오버 로딩을 통한 다형성을 구현해 보았다.
그런데 이렇게 해 주면 에러 난다.
컴파일러가 한 줄 한줄 쭉 실행 중에
드래곤 Attack( ) 부분에서 – Ogre를 만났는데 - Ogre가 누구니 에러남.
파일분할 필요하다
파일분할 시작
1. Dragon.h - 헤더 파일 만들고 - 클래스 부분 잘라서 이동
2. Dragon.h - 새로 만든 Dragon.cpp 파일로 Attack( ) 함수를 이동 - 선언부만 남겨놓기
3. Dragon.cpp - Dragon :: Attack( ) 이라고 표시해주기! - 누구의 어택이라고 표시해주기
4. 헤더파일에는 #include <iostream> 필요없음, std :: 필요한 부분만해주던지 / usingname 해주던지
5. Ogre 인자 받는 부분 에러 나온다 -> Dragon클래스 외부에 class Ogre; 로 표시해준다
6. Dragon.cpp - #include “ogre.h” 해준다.
Ogre도 똑같이 분리
Ogre . h 파일 -
- 클래스 외부에 Dragon 클래스있다고 알려주기
- Attack 함수 선언부만 남겨두기
Ogre . cpp 파일 -
- # include " " 해주기
- 누구의 Attack 함수인지 표현해주고 함수 구현
파일 분할 끝!
- 파일 분할 전 에러 - Ogre 가 누구냐? 해결
- 헤더 파일 부분에서 클래스 외부에 다른 클래스가 정상적으로 존재한다고 표시해주는 부분으로 에러 해결
- 이렇게 처리해주려고 파일 분할한 것!
+@ 몬스터 슬라임 추가해 줄 것이다.
1. Slaim . h - 헤더 파일 만들고
- Sliam 멤버 변수와 생성자
- Attack ( ) 함수 선언부
- class Dragon , class Ogre 있다고 알려주기
2. Slaim . cpp - 파일 만들고
- #include "Slaim.h
#include "Dragon.h"
#include "Ogre.h" - Slaim :: Attack( ) 이라고 표시해주기! - 누구의 어택이라고 표시해주기
이러면 Slaim은 끝났는데 Dragon과 Ogre 클래스에도 Slaim과 싸우는 부분 추가 필요하다.
3. Dragon . h - 파일
- 슬라임 클래스 있다고 표시 - class Slaim;
- 드래곤과 슬라임 싸우는 함수 선언부만 - Attack( Slaim& ref );
4. Dragon . cpp - 파일
- Attack(Slaim& ref) 실제 구현 -
5. Ogre . h 파일과 Ogre . cpp 파일에도 똑같이
이렇게 몬스터 하나 추가될 때마다– 기존에 있던 헤드 파일과 cpp파일에 다 추가해줘야 한다..
몬스터 하나 추가해준 것인데, 처리해 줄 작업이 너무 많다.
다음 시간에는 이거 고치는 거!
## Monster 슬라임 추가 실습 check point
- 헤더 파일에는 다른 클래스가 있다는 표시와, 함수의 선언부를
- cpp파일에는 누구의 함수인지 표시해주고 구현.
- 기존에 있던 헤더 파일과 cpp파일에 일일이 추가 내용 구현 필요
review
일주일 정도 배운 내용을 실습하면서 복습해보는 시간!
클래스와 함수를 만들고
같은 함수명을 사용하지만 들어오는 데이터 타입에 따라
다른 반응을 나타내는 오버 로딩을 통한 다형성
파일 분할을 해주는 이유
#include " "를 해주는 의미와 실제 컴파일러 작동 시
어떻게 처리되는지( " " 내용을 다 가져오는 ) 알 수 있었다.
배운 내용을 복습하는 시간이었지만
무언가 새로운 부분이 있지 않을까 놓친 부분은 없을까를
포커스로 진행하였다.
새로웠던 부분은
헤더 파일에 있는 클래스 바깥쪽에
다른 class 정상적으로 존재한다고 알려주는 부분
우리가 만든 헤더 파일을 include 해주려고 할 때는
include " " 로 표시.
기존에 만들어져 있던 파일은 < >
이제 교육도 마지막을 향해 달려가고 있다.
더 많이 못 배운 것 같아 아쉽기도 하고
새로운 것들도 많이 배워서 좋기도 하고
후훗
남은 시간도 잘 배워보자!
'Back-end > C++' 카테고리의 다른 글
22. 04. 04 - 연산자 오버 로딩 : 더하기, 전치형-후치형, 일반 함수, 배열 첨자, 대입 (0) | 2022.04.12 |
---|---|
22. 04. 01 - 몬스터 전투 실습 ( 상속, 오버 라이딩, 가상 함수, 추상 클래스) (0) | 2022.04.10 |
22. 03. 30 - 가상 함수, 함수 포인터, 함수 배열 (0) | 2022.04.07 |
22. 03. 29 - 다중 상속, 다형성 : Overloading, Override (0) | 2022.04.06 |
22. 03. 28 - 포함 ( Compositon, Aggregation ) (0) | 2022.04.06 |