#include
#include /* srand, rand */
#include /* time */
#include
using namespace std;
//부모 클래스 작성.
//중복 코드를 가지고 만든 캐릭터 클래스
class Chracter{
// 접근지정자 : 현재 클래스와 상속한 클래스에서 접근이 가능한 지정자.
protected:
// 중복 맴버변수(속성)
string _name;
int _hp;
int _damage;
public:
//생성자 최초 실행시 속성값 초기화
//생성자는 리턴값이 없고 반드시 클래스명과 같아야 한다.
Chracter(string name, int damage){
_name = name;
_damage = damage;
_hp = 100;
}
// 중복 메소드들
void Move(){
MoveAction("");
}
void MoveAction(string action){
cout << _name << " 님이 " << action << " 이동을 합니다." << endl;
}
void Hit(int damage){
cout << _name << " 님이 " << damage << " 데미지를 입었습니다." << endl;
}
void Die(){
cout << _name << " 님이 사망하였습니다." << endl;
}
void Jump(){
cout << _name << " 님이 점프를 했습니다." << endl;
}
void OneDepth(){
cout << "" << endl;
}
};
// 클래스 플레이어는 클래스 캐릭터의 속성과 메소드를 상속받음( 사용 할 수 있게 함)
class Player : public Chracter
{
// 플레이어 클래스만이 가지는 고유한 속성 설정(맴버변수)
private:
int _level;
int _gravity;
string _talkMessge;
public:
// 생성자
Player(string name, string talkMessage, int damage)
// 플레이어의 생성하기 전에 부모의 생성자를 호출함
:Chracter(name, damage)
{
// 부모의 생성자에 초기화 되어 있는것을 호출하였기 때문에 자식 클래스에서는 초기화 하지 않아도 됨
// _name = name;
// _damage = damage;
_talkMessge = talkMessage;
_level = 1;
_gravity = 1;
cout << _name << " 님이 접속 하였습니다." << endl;
Talk();
}
void Talk(){
cout << _name << " 메세지 : " << _talkMessge << endl;
}
void Attack(){
cout << _name << " 님이 " << _damage << " 데미지를 입었습니다." << endl;
}
};
// 부모 클래스 Chracter로 부터 맴버변수와 메소드를 상속 받는다.
class Monster : public Chracter
{
private:
int _skillType;
public:
Monster(string name, int damage, int skillType)
: Chracter(name, damage)// 부모 클래스에서 생성자 속성을 상속받음
{
_skillType = skillType;
cout << _name << " 몬스터가 나타났습니다." << endl;
}
void Skill(){
cout << _name << " 가 " << _skillType << " 타입의 스킬을 사용합니다." << endl;
}
// 오버라이드의 또다른 예 ( 좋지 않은 방법 )
// 몬스터는 점프해를 수행해도 아무것도 하지 않는다.
void Jump(){
}
};
class Creature : public Chracter{
// 접근 지정자. 외부에서 접근 불가능
private:
int _time;
// 접근 지정자. 외부에서 접근 가능
public:
Creature(string name, int damage, int time) : Chracter(name, damage)
{
_time = time;
cout << _name << " 가 소환되었습니다." << endl;
Timer();
}
// [메소드 오버라이드]
// 부모 클래스에 있으나 자식 클래스에서 재정의 하여 사용하는것을 메소드 오버라이드라 한다.
void Move(){
MoveAction(" 훨훨 날개짓을 하면서 ");
}
void Timer(){
cout << _name << " 이 " << _time << " 뒤에 소멸 됩니다." << endl;
}
};
void main(){
Player player = Player("티거", "저는 푸우의 친구 티거입니다!!", 100);
player.Move();
player.Attack();
player.Hit(10);
player.Jump();
player.Die();
player.OneDepth();
Monster monster = Monster("오우거", 2, 10);
monster.Move();
monster.Skill();
monster.Hit(30);
monster.Jump();
monster.Die();
player.OneDepth();
Creature creature = Creature("멀록", 10, 10);
creature.Move();
creature.Hit(5);
creature.Jump();
creature.Die();
}
=====================================================================
#include <iostream>
#include <stdlib.h> /* srand, rand */
#include <time.h> /* time */
#include <string>
using namespace std;
// 부모 클래스를 생성한다.
// 부모 클래스가 가지고 있는 속성으로
// 이름, 나이, 키, 몸무계 있다.
// 가지고 있는 메소드로
// move, Greetings 이 있다.
// 자식 클래스로 오늘 날씨가 참 덥네요 등등
//부모 클래스
class MyInfi{
// 접근자 지정 본인과 자식 클래스에서 접근이 가능하다
protected:
string _name;
int _age;
int _weight;
int _length;
public:
//생성자 실행과 동시에 초기 속성 설정
//생성자는 클래스명과 같아야 한다.
MyInfi(string name, int age){
_name = name;
_age = age;
}
void Move(string wher){
cout << _name << " 님이 " << wher << " 로 이동을 합니다." << endl;
}
// 가상함수 선언. 자식 클래스에서 오버라드 가능.
virtual void Greet(){
cout << " 안녕 내 이름은 " << _name << "이야 나이는" << _age << " 살 이야" << endl;
}
};
class Hyri : public MyInfi // MyInfi 클래스를 상속 받는다.
{
private:
int _length;
public:
Hyri(string name, int age) :MyInfi(name, age)
{
_length = 172;
}
void MyLength(){
cout << _name << " 의 키는 " << _length << " 센치 야" << endl;
}
};
class Myro : public MyInfi{
private:
int _footsize;
public:
// _footsiae 초기값 설정
// 생성자 상속
Myro(string name, int age, int footsize) : MyInfi(name, age)
{
_footsize = footsize;
}
void Myf(){
cout << _name << "의 발 크기는" << _footsize << " 입니다." << endl;
}
void Greet(){
cout << " 안녕 내 이름은 " << _name << "이야 내 발 사이즈는" << _footsize << "야" << endl;
}
};
void main(){
Hyri hy = Hyri("효리", 25);
hy.Greet();
hy.Move("한강");
hy.MyLength();
Myro miro = Myro("미로", 30, 240);
miro.Greet();
miro.Myf();
Myro m = Myro("미미미",25,250);
m.Greet()
}
댓글
댓글 쓰기