회원 로그인
|
객체 활용
C++ 객체 활용
- 각 객체끼리는 여러가지 유기적인 관계를 가지는데 이때 메소드를 통해 관계 활동을 수행함
- 각 객체끼리는 여러가지 유기적인 관계를 가지는데 이때 메소드를 통해 관계 활동을 수행함
#include <iostream> #include <stdlib.h> #include <time.h> #include <string> using namespace std; // 총알 클래스 // class 안에 메소드는 초기화 안함 class Bullet1 { private: int _damage; // 데미지 public: // 총알 "생성자" Bullet1(int damage) { _damage = damage; } int Attack(); // 총알 공격 메소드 }; // 총알 공격 메소드 int Bullet1::Attack() { cout << _damage << " 데미지를 가진 총알이 몬스터를 공격" << endl; return _damage; } // 플레이어 클래스 선언 class Player1 { private: string _name; // 플레이어 이름 int _hp; // 플레이어 체력 int _damage; // 플레이어 데미지 // 플레이어 사망 메소드 void Die() { cout << "[" << _name.c_str() << "] 플레이어가 사망" << endl; } public: // 플레이어 생성자 Player1() { Init("홍길동"); } // 플레이어 생성자 오버로드 Player1(string name) { Init(name); } // 플레이어 이름 리턴 메소드 const char* GetName() { return _name.c_str(); } // 플레이어 이름 리턴 메소드 void Init(string name); // 플레이어 타격 메소드 void Hit(int damage); // 총알 객체 타입을 리턴하는 총알 발사 메소드 Bullet1* Shot(); // 보너스 데미지를 합쳐 총알 객체 타입을 리턴하는 총알 발사 메소드 Bullet1* Shot(int bonusDamage); }; // 플레이어 초기화 메소드 void Player1::Init(string name){ _name = name; cout << "플레이어의 이름은 [" << _name.c_str() << "] " << endl; _hp = 100; _damage = 20; } // 플레이어 타격 메소드 void Player1::Hit(int damage) { _hp -= damage; cout << "[" << _name.c_str() << "] 플레이어가 " << damage << "의 피해를 입었다" << endl; if (_hp <= 0) Die(); } // 플레이어 총알 발사 메소드 // Bullet1* Player1::Shot() { cout << "[" << _name.c_str() << "] 플레이어가 " << _damage << " 데미지의 총알을 발사" << endl; Bullet1* bullet1 = new Bullet1(_damage); return bullet1; } // 플레이어 총알 발사 메소드 (오버로딩) // 리턴 타입은 포인터 Bullet1* Player1::Shot(int bonusDamage) { cout << "[" << _name.c_str() << "] 플레이어가 " << _damage << " 데미지의 총알을 발사. [추가 데미지 : " << bonusDamage << "]" << endl; return new Bullet1(_damage + bonusDamage); } // 몬스터 클래스 class Monster1{ private: string _name; // 몬스터 이름 int _hp; // 몬스터 체력 // 몬스터 사망 메소드 void Die() { cout << "[" << _name.c_str() << "] 몬스타가 사망" << endl; } public: // 몬스터 생성자 Monster1() { Init("몬스터"); } // 몬스터 생성자 오버라이드 Monster1(string name) { Init(name); } // 몬스터 사망 유무 확인 bool IsDie() { return (_hp <= 0 ? true : false); } void Init(string name); // 몬스터 초기화 메소드 void Hit(Bullet1* bullet1); // 몬스터 타격 메소드 void Tracking(Player1* player1); // 몬스터 플레이어 추격 메소드 }; // 몬스터 초기화 메소드 void Monster1::Init(string name){ _name = name; cout << "몬스터의 이름은 [" << _name.c_str() << "] " << endl; _hp = 100; } // 몬스터 타격 메소드 void Monster1::Hit(Bullet1* bullet1) { // 총알이 몬스터를 공격 int damage = bullet1->Attack(); _hp -= damage; cout << "[" << _name.c_str() << "] 몬스터가 총알에 맞아 " << damage << "의 피해" << endl; cout << "[" << _name.c_str() << "] 몬스터의 에너지는 " << _hp << "가 남아" << endl; // 몬스터를 총알을 파괴함 delete bullet1; if (_hp <= 0) Die(); } // 몬스터 플레이어 추적 메소드 void Monster1::Tracking(Player1* player1){ cout << "[" << _name.c_str() << "] 몬스터가 [" << player1->GetName() << "] 플레이어를 추적" << endl; } class ClassStudy1 { private: Player1* player1; // 플레이어 객체 인스턴스 Monster1* monster1; // 몬스터 객체 인스턴스 public: // 생성자 ClassStudy1() { Start(); } // 소멸자 ~ClassStudy1() { // 플레이어 몬스터 메모리 파괴 delete monster1; delete player1; } void Start(){ // 플레이어 객체 생성 // player1 = new Player1(); player1 = new Player1(); // 몬스터 객체 생성 monster1 = new Monster1("고블린"); Bullet1* bullet1; while (true){ // 플레이어 총알 발사 bullet1 = player1->Shot(); // 몬슽가 총을 맞음 monster1->Hit(bullet1); // 몬스터가 사망 했다면 공격을 중단 if (monster1->IsDie()) break; // 몬스터가 플레이어를 추적 monster1->Tracking(player1); } } }; void main(){ ClassStudy1* object1 = new ClassStudy1(); delete object1; }
댓글 0개
| 엮인글 0개
285개(7/15페이지)
번호 | 제목 | 글쓴이 | 조회 | 날짜 |
---|---|---|---|---|
165 | [C#] 네임스페이스 (namespace) | 푸딩뱃살 | 3405 | 2015.11.14 17:34 |
164 | [C#] 인터페이스 (Interface) | 푸딩뱃살 | 2196 | 2015.11.13 18:17 |
163 | [C/C++] Static(정적) 멤버 변수, 메소드 | 푸딩뱃살 | 2473 | 2015.11.13 10:32 |
162 | [C/C++] 추상 클래스 - 오버라이드 / 업/다운캐스팅(형변환) / virtual(가상함수) | 푸딩뱃살 | 4726 | 2015.11.12 02:00 |
161 | [C/C++] 메소드 오버라이드 | 푸딩뱃살 | 1992 | 2015.11.12 01:51 |
160 | [C#] 상속 (with Unity) | 푸딩뱃살 | 5453 | 2015.11.10 16:25 |
159 | [C/C++] 클래스 상속 | 푸딩뱃살 | 2245 | 2015.11.10 14:08 |
>> | [C/C++] 객체 활용 | 푸딩뱃살 | 2471 | 2015.11.09 21:28 |
157 | [C#] C# 객체 클래스 | 푸딩뱃살 | 3568 | 2015.11.08 15:51 |
156 | [C/C++] 생성자 / 소멸자 / 오버로드 | 푸딩뱃살 | 2202 | 2015.11.07 01:23 |
155 | [C/C++] 클래스 선언/정의, 객체 생성 | 푸딩뱃살 | 3567 | 2015.11.06 14:05 |
154 | [C/C++] 로또 프로그램 | 푸딩뱃살 | 2284 | 2015.11.06 12:00 |
153 | [C/C++] 2차원 동적 객체 배열 활용 | 푸딩뱃살 | 3650 | 2015.11.06 00:47 |
152 | [C/C++] 2차원 배열 | 푸딩뱃살 | 2403 | 2015.11.06 00:30 |
151 | [C/C++] 2차원 포인터 | 푸딩뱃살 | 2052 | 2015.11.06 00:26 |
150 | [C/C++] 동적할당 | 푸딩뱃살 | 1805 | 2015.11.05 11:23 |
149 | [C/C++] 당신의 프로그래밍에 디버깅 더하기 : Visual C++ 디버깅 기초에서 고급까지 | 푸딩뱃살 | 1451 | 2015.11.05 11:20 |
148 | [C/C++] 포인터와 배열의 이해 | 푸딩뱃살 | 2013 | 2015.11.04 23:54 |
147 | [C/C++] 포인터 | 푸딩뱃살 | 2192 | 2015.11.04 15:14 |
146 | [C/C++] 일반 함수와 메소드간의 차이 | 푸딩뱃살 | 2430 | 2015.11.03 23:38 |