Guest User

Untitled

a guest
Dec 14th, 2018
87
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.22 KB | None | 0 0
  1. #include <iostream>
  2. #include <cstddef>
  3.  
  4. enum variety{
  5. oolong,
  6. green,
  7. };
  8.  
  9. class T
  10. {
  11. public:
  12. virtual void drink() = 0;
  13. };
  14.  
  15. class T1: public T
  16. {
  17. T1() = delete;
  18. public:
  19. T1(int a):
  20. sugar(a)
  21. {
  22. std::cout<<"T1 ctorn";
  23. }
  24. void drink()
  25. {
  26. std::cout<<"Sipping oolong with sugar: "<<sugar<<'n';
  27. }
  28. ~T1()
  29. {
  30. std::cout<<"T1 dtorn";
  31. }
  32. private:
  33. int sugar;
  34. };
  35.  
  36. class T2: public T
  37. {
  38. T2() = delete;
  39. public:
  40. T2(int a):
  41. sugar(a)
  42. {
  43. std::cout<<"T2 ctorn";
  44. }
  45. void drink()
  46. {
  47. std::cout<<"Sipping green with sugar: "<<sugar<<'n';
  48. }
  49. ~T2()
  50. {
  51. std::cout<<"T2 dtorn";
  52. }
  53. private:
  54. int sugar;
  55. };
  56.  
  57. class TFactory
  58. {
  59. TFactory() = delete;
  60. public:
  61. static T* brew(variety v, int sugar){
  62. if(v == oolong)
  63. return new T1(sugar);
  64. else if (v== green)
  65. return new T2(sugar);
  66. else
  67. return nullptr;
  68. }
  69. };
  70.  
  71. int main(){
  72. T* t1 = TFactory::brew(oolong, 5);
  73. t1->drink();
  74. delete t1;
  75. }
Add Comment
Please, Sign In to add comment