[C++] 26. 상속
2022. 6. 10. 16:30ㆍ코딩 1막 <C++개념편>
728x90
1. 상속의 개념_ 상속이란 무엇인가?
#include <iostream>
#include <string>
using namespace std;
// 상속의 개념
// 아래 구조체 monster와 player의 형태는 다르지만 공통된 속성과 기능이 있다
// 이는 중복되는 소스가 생기므로 효율이 떨어진다
// 중복되는 소스를 상위개념으로 해서 하나의 구조체(Charactor)를 만들어 놓고
// monster와 player에게 상속하게 만드는 것
// 하나의 부모 클래스로부터 특성이 조금씩 다른 자식 클래스를 얼마든지 파생시킬 수 있다.
// 상속 관계의 아래쪽으로 내려올수록 더 많은 속성과 동작이 정의된다.
// 위쪽의 선조 클래스는 멤버가 많지 않아 일반적이고 포괄적인 사물을 표현하는데 비해
// 아래로 내려올수록 후손 클래스의 멤버가 늘어 특수하고 구제적인 사물을 표현한다.
struct Charactor
{
string name;
int hp;
int atk;
void Attack()
{
cout << name << "공격" << endl;
}
void Hit()
{
cout << name << "맞음" << endl;
}
void Die()
{
cout << name << "죽음" << endl;
}
};
// 상속받을자식 : 상속할부모
struct Monster : Charactor
{
bool isChase;
Monster(string _name, int _hp, int _atk, bool _isChase)
{
name = _name;
hp = _hp;
atk = _atk;
isChase = _isChase;
}
void ChaseTarget()
{
cout << "몬스터가 쫒아감" << endl;
}
};
struct Player : Charactor
{
int def;
Player(string _name, int _hp, int _atk, int _def)
{
name = _name;
hp = _hp;
atk = _atk;
def = _def;
}
void Skill()
{
cout << "유저 스킬 사용" << endl;
}
};
void main()
{
Monster monsterA("드래곤", 100, 10, false);
monsterA.Attack();
monsterA.Hit();
monsterA.Die();
cout << endl;
Player playerA("유저", 100, 5, 5);
playerA.Attack();
playerA.Hit();
playerA.Die();
playerA.Skill();
}
2. 상속의 개념_ 자식은 기능과 속성 뿐 아니라 정체성까지 부모로부터 상속된다.
#include <iostream>
#include <string>
using namespace std;
//상속
struct Charactor
{
string name;
int hp;
int atk;
Charactor()
{
}
Charactor(string _name, int _hp, int _atk)
{
name = _name;
hp = _hp;
atk = _atk;
}
void Attack()
{
cout << "캐릭터 공격" << endl;
}
void Hit()
{
cout << "캐릭터 맞음" << endl;
}
void Die()
{
cout << "캐릭터 죽음" << endl;
}
};
// 상속받을자식 : 상속할부모
struct Monster : Charactor
{
bool isChase;
/*
Monster(string _name, int _hp,int _atk, bool _isChase)
{
name = _name;
hp = _hp;
atk = _atk;
isChase = _isChase;
}
*/
//위의 형태가 번거롭기때문에 부모의 생성자를 사용해서 초기화를 편하게 할 수 있음.
Monster(string _name, int _hp, int _atk, bool _isChase) : Charactor(_name, _hp, _atk)
{
isChase = _isChase;
}
void ChaseTarget()
{
cout << "몬스터가 쫒아감" << endl;
}
};
struct Player : Charactor
{
int def;
Player()
{
}
Player(string _name, int _hp, int _atk, int _def) : Charactor(_name, _hp, _atk)
{
def = _def;
}
void Skill()
{
cout << "유저 스킬 사용" << endl;
}
};
struct Dragon : Monster
{
bool isFly;
Dragon(string _name, int _hp, int _atk, bool _isChase, bool _isFly) : Monster(_name, _hp, _atk, _isChase)
{
isFly = _isFly;
}
};
void main()
{
// 상속의 중요한 개념
// 자식은 기능과 속성뿐 아니라 정체성까지 부모로부터 상속된다.
// 이 개념이 중요한 이유는 배열을 통해 적용이 되기 때문이다.
Monster* monsterA = new Monster("몬스터", 100, 10, false);
Player* playerA = new Player("유저A", 100, 5, 5);
Dragon* dragonA = new Dragon("그린드래곤", 100, 10, false, false);
Charactor* charactors[3];
charactors[0] = monsterA;
charactors[1] = playerA;
charactors[2] = dragonA;
playerA->name = "유저테스트";
for (int i = 0; i < 3; i++)
{
cout << charactors[i]->name << endl;
}
// 자식은 부모에게 포함될수 있지만 부모는 자식에게 포함되지 않는다.
// Player tempPlayer;
// tempPlayer = charactors[1]; 이거 안됨~ 오류뜸!!
}
* 자식은 부모에게 포함될수 있지만 부모는 자식에게 포함되지 않아~~~~~
* 자식은 부모에게 포함될수 있지만 부모는 자식에게 포함되지 않아~~~~
* 자식은 부모에게 포함될수 있지만 부모는 자식에게 포함되지 않아~~~
* 자식은 부모에게 포함될수 있지만 부모는 자식에게 포함되지 않아~~
* 자식은 부모에게 포함될수 있지만 부모는자식에게 포함되지 않아~
728x90
'코딩 1막 <C++개념편>' 카테고리의 다른 글
[C++] 28. 가상함수 (0) | 2022.06.10 |
---|---|
[C++] 27. 상속의 오버라이딩 (0) | 2022.06.10 |
[C++] 25. 동적배열이란 (0) | 2022.06.07 |
[C++] 24. 동적할당이란 (0) | 2022.06.07 |
[C++] 23. 복사생성자 (참조자의 개념) (0) | 2022.06.07 |