C++

Pure Virtual Function(순수 가상 함수)

Nin 2020. 12. 31. 03:06
class Item
{
private:
   int m_Cost;
public:
   virtual int Cost()
   {
      return m_Cost;
   }
   
   void SetCost(int _Cost)
   {
      m_Cost = _Cost;
   }
};

class Weapon : public Item
{
public:
   int m_Enchant;

public:
   Weapon() : m_Enchant(0)
   {
   
   }
   
public:
   void EnchantUp()
   {
      ++m_Enchant;
   }
   
public:
   int Cost()
   {
      return Item::Cost() + Item::Cost() * m_Enchant;
   }
};

위의 코드는 Item 클래스를 부모로 만들고 Weapon 클래스에는

강화수치가 있으며 강화수치에 따라 가격이 달라지게 만든것이다.

가상함수를 사용해서 각 자식 클래스가 자신만의 다른 동작을 할 수 있게 해주는 것이다.

여기서 예를 들어서 아이템의 종류에 방어구,퀘스트,캐쉬 등등 여러종류가 있다면

Item 클래스를 상속받아서 만들어 주면 된다.

보통 상속이 여러 단계가 되다보면 상위에 존재하는 클래스는 

객체화가 될일이 없는 경우가 많다.여기서는 Item 클래스를 말하는 것이다.

Item 그 자체가 만들어지는 경우를 말한다.그렇기 때문에 순수 가상함수라는 문법을 사용한다.

public:

   virtual int Cost() = 0 
   {
      return m_Cost;
   }

이렇게 해주면 순수 가상함수가 되고 순수 가상함수가 들어있는 클래스를 추상클래스라고 한다.

추상클래스는 객체화가 불가능해진다. 사용하는 이유는 위에서 말했듯이

부모가 자식에게 인터페이스를 제공하는 형태로만 사용하는 경우가 많기 때문이다.

또한 순수가상함수가 있는 부모클래스를 상속받은 자식클래스는

반드시 이 순수가상함수를 구현해줘야 한다.그렇지 않으면 에러가 난다.

이는 프로그래머가 Item 그 자체로 객체화 시켜서 뭘 만드려고 하지말고 

상속을 받아서 사용하라고 말하고 있는것이다.

 

'C++' 카테고리의 다른 글

이너클래스(Inner Class)  (0) 2021.01.04
동적 메모리 할당과 해제,댕글링 포인터,vector의 내부동작  (0) 2020.12.31
가상함수 추가설명  (0) 2020.12.31
Virtual Function(가상 함수),다운 캐스팅  (0) 2020.12.31
String  (0) 2020.12.29