Advertisement
Guest User

Untitled

a guest
Jan 17th, 2019
98
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.50 KB | None | 0 0
  1. #include <iostream>
  2. #include <string>
  3.  
  4. enum class CellType
  5. {
  6. Text,
  7. Number
  8. };
  9.  
  10.  
  11. class Cell
  12. {
  13. public:
  14. virtual void print() const = 0;
  15.  
  16. virtual CellType getType() const = 0;
  17.  
  18. virtual ~Cell() {};
  19. };
  20.  
  21. class NumberCell : public Cell
  22. {
  23. public:
  24. NumberCell() : value(0) {}
  25.  
  26. void print() const override
  27. {
  28. std::cout << value;
  29. }
  30.  
  31. void set(int value)
  32. {
  33. this->value = value;
  34. }
  35.  
  36. int get()
  37. {
  38. return value;
  39. }
  40.  
  41. CellType getType() const override
  42. {
  43. return CellType::Number;
  44. }
  45.  
  46. private:
  47. int value;
  48. };
  49.  
  50. class TextCell : public Cell
  51. {
  52. public:
  53. TextCell() : value("") {}
  54.  
  55. void print() const override
  56. {
  57. std::cout << value;
  58. }
  59.  
  60. void set(std::string value)
  61. {
  62. this->value = value;
  63. }
  64.  
  65. std::string get()
  66. {
  67. return value;
  68. }
  69.  
  70. CellType getType() const override
  71. {
  72. return CellType::Text;
  73. }
  74. private:
  75. std::string value;
  76. };
  77.  
  78. class Sheet
  79. {
  80. public:
  81. Sheet(int columns, int rows) : rows(rows), columns(columns)
  82. {
  83. cells = new Cell**[columns];
  84. };
  85.  
  86. ~Sheet()
  87. {
  88. for (auto column = 0; column < columns; column++)
  89. {
  90. for (auto row = 0; row < rows; row++)
  91. {
  92. delete cells[column][row];
  93. }
  94. delete[] cells[column];
  95. }
  96.  
  97. delete[] cells;
  98. };
  99.  
  100. void initialize_column(int column, CellType type)
  101. {
  102. if (type == CellType::Text)
  103. {
  104. cells[column] = new Cell*[rows];
  105.  
  106. for (auto row = 0; row < rows; row++)
  107. cells[column][row] = new TextCell();
  108.  
  109. }
  110. else
  111. {
  112. cells[column] = new Cell*[rows];
  113.  
  114. for (auto row = 0; row < rows; row++)
  115. cells[column][row] = new NumberCell();
  116. }
  117. }
  118.  
  119. void print(int column, int row) const
  120. {
  121. cells[column][row]->print();
  122. }
  123.  
  124. void set(int value, int column, int row)
  125. {
  126. if (cells[column][row]->getType() == CellType::Number)
  127. {
  128. NumberCell* ncell = dynamic_cast<NumberCell*>(cells[column][row]);
  129. ncell->set(value);
  130. }
  131. else
  132. {
  133. // some error message?
  134. }
  135. }
  136.  
  137. void set(std::string string, int column, int row)
  138. {
  139. if (cells[column][row]->getType() == CellType::Text)
  140. {
  141. TextCell* tcell = dynamic_cast<TextCell*>(cells[column][row]);
  142. tcell->set(string);
  143. }
  144. else
  145. {
  146. // some error message?
  147. }
  148. }
  149.  
  150. private:
  151. const int rows;
  152. const int columns;
  153.  
  154. Cell*** cells;
  155. };
  156.  
  157. int main()
  158. {
  159. Sheet sheet(2, 10);
  160. sheet.initialize_column(0, CellType::Number);
  161. sheet.initialize_column(1, CellType::Text);
  162.  
  163. sheet.set(42, 0, 1);
  164. sheet.set("lol", 1, 1);
  165.  
  166. sheet.print(0, 1);
  167. sheet.print(1, 1);
  168.  
  169. return 0;
  170. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement