daily pastebin goal
19%
SHARE
TWEET

Untitled

a guest Jan 17th, 2019 63 Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  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. }
RAW Paste Data
We use cookies for various purposes including analytics. By continuing to use Pastebin, you agree to our use of cookies as described in the Cookies Policy. OK, I Understand
 
Top