Seoul-Transfer-Proj / design-pattern

C++로 디자인 패턴 구현해보며 이해하기 위한 레포
0 stars 0 forks source link

타입이 정해져 있는 배열에 다른 타입 요소를 어떻게 insert할 것인가..? #9

Open changhwan77 opened 3 months ago

changhwan77 commented 3 months ago

💡 작업 내용

image


🤔 해결책

  1. 배열의 요소 type을 auto로 한다.
    • 근데 이러면 요소의 type이 전부 제 각각이라서 안되는 것인가
    • 근데 요소의 type이 서로 다르면 안되는 건가?
  2. MenuItem의 포인터를 배열 요소의 타입으로 바꾼다. -> 그럼 Dessert Menu가 MenuItem을 상속해야 하는데..
  3. (구현 시도 중)그림에서 트리구조라는 힌트를 줬으니 Node라는 타입으로 관리한다? -> 그럼 인터페이스로 사용할 수 있어서 각 클래스(Menu와 MenuItem 클래스의 역할이 섞이지 않아서 좋을 것 같은데..)

✏️ 참고 사항

changhwan77 commented 3 months ago

[ 해결책 3 구현 기록 ]

changhwan77 commented 3 months ago

[ 해결 기록 ]

문제


해결책


class MenuComponent {
public:
  virtual string getName() = 0;
  virtual string getDescription() = 0;

  // MenuItem과 Menu에서 필요한 메서드만 상속해서 사용하기 위한 장치
  // 함수 body가 빈 값이면 { } 컴파일 에러 발생.
  virtual double getPrice() {
    throw logic_error("getPrice()는 이 객체에서 사용할 수 없습니다.");
  };
  virtual bool isVegetarian() {
    throw logic_error("isVegetarian()는 이 객체에서 사용할 수 없습니다.");
  };
  virtual void print() {
    throw logic_error("print()는 이 객체에서 사용할 수 없습니다.");
  }
  virtual void add(MenuComponent* menuComponent) {
    throw logic_error("add()는 이 객체에서 사용할 수 없습니다.");
  }
  virtual void remove(MenuComponent* menuComponent) {
    throw logic_error("remove()는 이 객체에서 사용할 수 없습니다.");
  }
  virtual MenuComponent* getChild(int position) {
    throw logic_error("getChild()는 이 객체에서 사용할 수 없습니다.");
  }
};