1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 | #include<iostream> #include<string> class Beverage { protected: std::string name = ""; int price = 0; virtual void InterfaceSeperator() = 0 {} public: virtual int cost() { return this->price; } virtual std::string get_name() { return " " + name; } void set_name(std::string par) { name = par; } void set_cost(int par) { this->price = par; } }; class Decorator : public Beverage { protected: virtual void InterfaceSeperator() = 0 {} Beverage* Decorated = nullptr; public: void decorate(Beverage* par) { Decorated = par; } virtual int cost() { if (Decorated) { return this->price + Decorated->cost(); } else { return this->price; } } virtual std::string get_name() { if (Decorated) { return " " + name + Decorated->get_name(); } else { return " " + name; } } }; class CaffeLatte : public Beverage { protected: virtual void InterfaceSeperator() {} }; class Americano : public Beverage { private: protected: virtual void InterfaceSeperator() {} }; class Espresso : public Beverage { private: static int price; protected: virtual void InterfaceSeperator() {} }; class Cream : public Decorator { private: static int price; protected: virtual void InterfaceSeperator() {} }; class Water : public Decorator { protected: virtual void InterfaceSeperator() {} }; class Milk : public Decorator { protected: virtual void InterfaceSeperator() {} }; int main() { CaffeLatte CaffeLatteVar; CaffeLatteVar.set_cost(30); CaffeLatteVar.set_name("CaffeLatte"); Milk MilkVar; MilkVar.set_name("Milk"); MilkVar.set_cost(300); Water WaterVar; WaterVar.set_cost(500); WaterVar.set_name("Water"); MilkVar.decorate(&CaffeLatteVar); std::cout << MilkVar.cost() << std::endl; std::cout << MilkVar.get_name() << std::endl; WaterVar.decorate(&MilkVar); std::cout << WaterVar.cost() << std::endl; std::cout << WaterVar.get_name() << std::endl; Cream CreamVar; CreamVar.set_cost(500); CreamVar.set_name("Cream"); std::cout << CreamVar.cost() << std::endl; std::cout << CreamVar.get_name() << std::endl; CreamVar.decorate(&MilkVar); std::cout << CreamVar.cost() << std::endl; std::cout << CreamVar.get_name() << std::endl; } | cs |
이걸 응용해서 메뉴 프로그램을 만드려보려고 시도했으나..
별로 흥미는 없는데 구상하다보니 끝도 없이 프로그램이 커지는 바람에 결국 실패로 끝났다.
괜히 시간만 날린 것 같다.
앞으로 프로그램을 만들 땐 내가 만들 수 있는 것으로 처음부터 철저하게 구상해놔야 할 것 같다.
'진행중인 프로젝트들' 카테고리의 다른 글
RPG 게임 프로젝트 시작 (0) | 2022.12.27 |
---|---|
Simple Factory 예제 (0) | 2022.12.14 |
스택 사칙연산계산기에 대한 추가적인 설명 (0) | 2022.11.16 |
스택을 이용한 사칙연산계산기 완성 (0) | 2022.11.15 |
스택을 이용한 사칙연산계산기 구현 -1 중위표기법과 후위표기법 (0) | 2022.11.09 |