C++

[C++] 순수가상함수, 추상클래스

khkg12 2023. 7. 28. 15:36

순수가상함수

자식 클래스나 구조체에서 정의를 해주어야 하는 함수로 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