순수가상함수
자식 클래스나 구조체에서 정의를 해주어야 하는 함수로 virtual키워드를 붙여 사용한다.
추상클래스
순수가상함수가 하나이상 포함되어 있는 클래스를 뜻한다.
코드예시
struct Weapon
{
int increaseDamage;
virtual void Attack() = 0; // 순수가상함수 : 자식 클래스나 구조체에서 정의를 해주어야하는 함수
// 순수가상함수가 하나이상 포함되어있다면 자식에서 꼭 정의, 그런 구조체 혹은 클래스를 추상클래스
};
struct Gun : Weapon
{
int bulletSpeed;
void Attack()
{
cout << "탕!" << endl;
}
};
struct Sword : Weapon
{
void Attack()
{
cout << "스릉!" << endl;
}
};
struct Player
{
private:
Weapon* weapon = nullptr; // has a 관계, nullptr로 자동초기화되지 않으니 초기화해주어야함
public:
void Attack()
{
if (weapon != nullptr)
{
weapon->Attack();
}
else
{
cout << "펀치!" << endl;
}
}
void SetWeapon(Weapon* _weapon)
{
if (weapon != nullptr)
{
delete weapon; // 원래 장착되어있던 무기를 해제
}
weapon = _weapon;
}
};
위 코드에서 Player 객체를 생성 후 무기를 총, 검으로 SetWeapon을 통해 설정해준뒤 Attack을 실행하면 각각 무기에 해당하는 기능이 실행된다.
'C++' 카테고리의 다른 글
예외처리 / try throw catch (0) | 2023.08.09 |
---|---|
define 과 const 의 차이(심볼릭 상수) (0) | 2023.08.03 |
[C++]배열의 동적할당 / 가상소멸자 (0) | 2023.07.18 |
매개변수에 들어가는 배열 (0) | 2023.07.11 |
[C++] 함수 오버로딩 (0) | 2023.07.10 |