[C++] 다형성 (Polymorphism)
다형성
인프런 Rookiss님의 'Part1: C++ 프로그래밍 입문' 강의를 기반으로 정리한 필기입니다.
😎[C++과 언리얼로 만드는 MMORPG 게임 개발 시리즈] Part1: C++ 프로그래밍 입문 강의 들으러 가기!
다형성: 오버로딩 vs. 오버라이딩
다형성(Polymorphism = Poly + morph) = 겉은 똑같은데, 기능이 다르게 동작한다
- 오버로딩(Overloading) = 함수 중복 정의 = 함수 이름의 재사용
- 오버라이딩(Overriding) = 재정의 = 부모 클래스의 함수를 자식 클래스에서 재정의
오버로딩과 오버라이딩
#include <iostream>
using namespace std;
class Player{
public:
void Move() { cout << "Move Player! " << endl; }
void Move(int a) { cout << "Move Player (int)! " << endl; } // 오버로딩 예시
public:
int _hp;
};
class Knight : public Player // public Player. public 안 적으면 private으로 인식
{
public:
void Move() { cout << "Move Knight! " << endl; } // 재정의. 오버라이딩
public:
int _stamina;
};
class Mage : public Player
{
public:
int _mp;
};
void MovePlayer(Player* player)
{
player->Move();
}
void MoveKnight(Knight* knight)
{
knight->Move();
}
int main()
{
Knight kk;
kk.Move();
cout << "------------------------" << endl;
Player p;
MovePlayer(&p); // Player는 Player다? YES
//MoveKnight(&p) // Player는 Knight다? NO // 잘못된 코딩 // 자식 클래스에서 부모 클래스로 넘어가는건 되지만 그 반대의 경우는 자연스럽게 되지 않는다.
Knight k;
MoveKnight(&k); // Knight는 Knight다? YES
MovePlayer(&k); // Knight는 Player다? YES // 자식 클래스에서 부모 클래스로 넘어가는건 자연스럽다
return 0;
}
실행화면
바인딩(Binding) - 정적 바인딩, 동적 바인딩
바인딩(Binding) = 묶는다.
정적 바인딩(Static Binding) | 컴파일 시점에 결정 |
동적 바인딩(Dynamic Binding) | 실행 시점에 결정 |
일반 함수는 정적 바인딩을 사용한다.
동적 바인딩을 원한다면?
- 가상 함수(virtual function)를 사용한다.
#include <iostream>
using namespace std;
class Player{
public:
void Move() { cout << "Move Player! " << endl; }
virtual void VMove() { cout << "Move Player! " << endl; }
public:
int _hp;
};
class Knight : public Player // public Player. public 안 적으면 private으로 인식
{
public:
void Move() { cout << "Move Knight! " << endl; } // 재정의.
// 가상 함수는 재정의를 하더라도 가상 함수다!
virtual void VMove() { cout << "Move Knight! " << endl; }
public:
int _stamina;
};
class Mage : public Player
{
public:
int _mp;
};
void MovePlayer(Player* player)
{
player->VMove();
}
int main()
{
Player p;
Knight k;
MovePlayer(&k);
return 0;
}
실행화면
재정의한 VMove()가 호출된다.
'⭐ Programming > C++' 카테고리의 다른 글
[C++] 초기화 리스트 (0) | 2022.04.05 |
---|---|
[C++] 다형성, 가상함수 테이블, 순수 가상함수, 추상 클래스 (0) | 2022.04.05 |
[C++] 은닉성 (0) | 2022.04.04 |
[C++] 상속성 (0) | 2022.04.04 |
[C++] 생성자와 소멸자 2 (0) | 2022.04.04 |
댓글
이 글 공유하기
다른 글
-
[C++] 초기화 리스트
[C++] 초기화 리스트
2022.04.05 -
[C++] 다형성, 가상함수 테이블, 순수 가상함수, 추상 클래스
[C++] 다형성, 가상함수 테이블, 순수 가상함수, 추상 클래스
2022.04.05 -
[C++] 은닉성
[C++] 은닉성
2022.04.04 -
[C++] 상속성
[C++] 상속성
2022.04.04