Advertisement
Jopa322

dinamic polimorf

Dec 7th, 2018
116
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 6.24 KB | None | 0 0
  1. #include "stdafx.h"
  2. #include "iostream"
  3. #include "iomanip"
  4. #include <string>
  5.  
  6. using namespace std;
  7.  
  8. //Товар
  9. class Tovar {
  10. protected:
  11. string Name;
  12. int OrderPrice;
  13. int BasicPrice;
  14. int Area;
  15. public:
  16. Tovar(string name = "Строй-товар", int area = 12);
  17. virtual void vvod() = 0;
  18. virtual void vivod() = 0;
  19. virtual void zakaz() = 0;
  20. };
  21. Tovar::Tovar(string name, int basicprice) {
  22. Name = name;
  23. BasicPrice = basicprice;
  24. }
  25.  
  26.  
  27. class Oboi : public Tovar {
  28. private:
  29. int Oclass;
  30. public:
  31. Oboi(string name = "Обои", int basicprice = 20, int oclass = 1);
  32. void vvod() override;
  33. void vivod() override;
  34. void zakaz() override;
  35. };
  36. Oboi::Oboi(string name, int basicprice, int oclass) : Tovar(name, basicprice) {
  37. Oclass = oclass;
  38. }
  39. void Oboi::vvod() {
  40. cout << "Введите класс обоев\n";
  41. cin >> Oclass;
  42. cout << "Введите цену за 1м кв\n";
  43. cin >> BasicPrice;
  44. cout << endl;
  45. }
  46. void Oboi::vivod() {
  47. cout << Name << " класса " << Oclass << ":" << endl;
  48. cout << "Цена за 1м кв: " << BasicPrice << endl;
  49. }
  50. void Oboi::zakaz() {
  51. cout << "Введите площадь стены\n";
  52. cin >> Area;
  53. vivod();
  54. OrderPrice = Oclass * BasicPrice * Area;
  55. cout << "Заказ на : " << Area << " метров квадратных" << endl;
  56. cout << "Цена заказа : " << OrderPrice << " рублей" << endl;
  57. cout << endl;
  58. }
  59.  
  60. class Laminat : public Tovar {
  61. private:
  62. string Type;
  63. int Width;
  64. public:
  65. Laminat(string name = "Ламинат", int basicprice = 20, string type = "Ekonom", int width = 1);
  66. void vvod() override;
  67. void vivod() override;
  68. void zakaz() override;
  69. };
  70. Laminat::Laminat(string name, int basicprice, string type, int width) : Tovar(name, basicprice) {
  71. Type = type;
  72. Width = width;
  73. }
  74. void Laminat::vvod() {
  75. cout << "Введите категорию ламината [Ekonom/Premium]\n";
  76. cin >> Type;
  77. cout << "Введите цену за 1м кв пола\n";
  78. cin >> BasicPrice;
  79. cout << "Введите ширину доски ламината\n";
  80. cin >> Width;
  81. cout << endl;
  82. }
  83. void Laminat::vivod() {
  84. cout << Name << " категории " << Type << endl;
  85. cout << "Базовая цена: " << BasicPrice << endl;
  86. cout << "Ширина ламинатной доски: " << Width << endl;
  87.  
  88. }
  89. void Laminat::zakaz() {
  90. cout << "Введите площадь пола\n";
  91. cin >> Area;
  92. vivod();
  93. if (Type == "Ekonom")
  94. OrderPrice = 1 * BasicPrice * Area * Width;
  95. else if (Type == "Premium")
  96. OrderPrice = 3 * BasicPrice * Area * Width;
  97. else
  98. OrderPrice = 0 * BasicPrice * Area * Width;
  99. cout << "Заказ на : " << Area << " метров квадратных" << endl;
  100. cout << "Цена заказа: " << OrderPrice << " рублей" << endl;
  101. }
  102.  
  103.  
  104. class Plitka : public Tovar {
  105. private:
  106. string Type;
  107. int Size;
  108. public:
  109. Plitka(string name = "Плитка", int basicprice = 30, string type = "Эконом", int size = 10);
  110. void vvod() override;
  111. void vivod() override;
  112. void zakaz() override;
  113. };
  114. Plitka::Plitka(string name, int basicprice, string type, int size) : Tovar(name, basicprice) {
  115. Type = type;
  116. Size = size;
  117. }
  118. void Plitka::vvod() {
  119. cout << "Введите категорию плитки [Ekonom/Premium]\n";
  120. cin >> Type;
  121. cout << "Введите базовую цену за 1м кв\n";
  122. cin >> BasicPrice;
  123. cout << "Введите размер плитки\n";
  124. cin >> Size;
  125. cout << endl;
  126. }
  127. void Plitka::vivod() {
  128. cout << Name << " категории " << Type << endl;
  129. cout << "Базовая цена: " << BasicPrice << endl;
  130. cout << "Размер плитки: " << Size << endl;
  131.  
  132. }
  133. void Plitka::zakaz() {
  134. cout << "Введите площадь пола\n";
  135. cin >> Area;
  136. vivod();
  137. if (Type == "Ekonom")
  138. OrderPrice = 1 * BasicPrice * Area * Size;
  139. else if (Type == "Premium")
  140. OrderPrice = 3 * BasicPrice * Area * Size;
  141. else
  142. OrderPrice = 0 * BasicPrice * Area * Size;
  143.  
  144. cout << "Заказ на: " << Area << " метров квадратных" << endl;
  145. cout << "Цена заказа: " << OrderPrice << " рублей" << endl;
  146. }
  147.  
  148. class Kraska : public Tovar {
  149. private:
  150. string Color;
  151. public:
  152. Kraska(string name = "Краска", int Price = 200, string color = "red");
  153. void vvod() override;
  154. void vivod() override;
  155. void zakaz() override;
  156. };
  157. Kraska::Kraska(string name, int price, string color) : Tovar(name, price) {
  158. Color = color;
  159. }
  160. void Kraska::vvod() {
  161. cout << "Введите цвет краски (red / green / blue / etc)" << endl;
  162. cin >> Color;
  163. cout << "Введите цену за 1м кв покрытия" << endl;
  164. cin >> BasicPrice;
  165. cout << endl;
  166. }
  167. void Kraska::vivod() {
  168. cout << Color << " " << Name << ":" << endl;
  169. cout << "Цена: " << BasicPrice << endl;
  170. }
  171. void Kraska::zakaz() {
  172. cout << "Введите площадь закрашиваемой поверхности" << endl;
  173. cin >> Area;
  174. vivod();
  175. if (Color == "red")
  176. OrderPrice = 1 * BasicPrice * Area;
  177. else if (Color == "green")
  178. OrderPrice = 1 * BasicPrice * Area;
  179. else if (Color == "blue")
  180. OrderPrice = 1 * BasicPrice * Area;
  181. else
  182. OrderPrice = 2 * BasicPrice * Area;
  183. cout << "Заказ на: " << Area << " метров квадратных" << endl;
  184. cout << "Цена заказа: " << OrderPrice << " рублей" << endl;
  185. }
  186.  
  187.  
  188. int main()
  189. {
  190. setlocale(LC_ALL, "Russian");
  191. Tovar *tovar = nullptr;
  192.  
  193. int option = 1;
  194. do {
  195. cout << "Введите тип товара:";
  196. cout << endl;
  197. cout << "1 - Обои " << endl;
  198. cout << "2 - Плитка" << endl;
  199. cout << "3 - Ламинат" << endl;
  200. cout << "4 - Краска" << endl;
  201. cout << "0 - выход" << endl << endl;
  202. cin >> option;
  203. switch (option)
  204. {
  205. case 1:
  206. tovar = new Oboi();
  207. break;
  208. case 2:
  209. tovar = new Plitka();
  210. break;
  211. case 3:
  212. tovar = new Laminat();
  213. break;
  214. case 4:
  215. tovar = new Kraska();
  216. break;
  217. case 0:
  218. cout << "Завершение программы" << endl;
  219. break;
  220. default:
  221. option = -1;
  222. cout << "Ошибка" << endl;
  223. break;
  224. }
  225. if (option != -1 && option != 0) {
  226. system("cls");
  227. tovar->vvod();
  228. tovar->zakaz();
  229. }
  230. } while (option != 0);
  231.  
  232. system("pause");
  233. return 0;
  234. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement