Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <string>
- enum class CellType
- {
- Text,
- Number
- };
- class Cell
- {
- public:
- virtual void print() const = 0;
- virtual CellType getType() const = 0;
- virtual ~Cell() {};
- };
- class NumberCell : public Cell
- {
- public:
- NumberCell() : value(0) {}
- void print() const override
- {
- std::cout << value;
- }
- void set(int value)
- {
- this->value = value;
- }
- int get()
- {
- return value;
- }
- CellType getType() const override
- {
- return CellType::Number;
- }
- private:
- int value;
- };
- class TextCell : public Cell
- {
- public:
- TextCell() : value("") {}
- void print() const override
- {
- std::cout << value;
- }
- void set(std::string value)
- {
- this->value = value;
- }
- std::string get()
- {
- return value;
- }
- CellType getType() const override
- {
- return CellType::Text;
- }
- private:
- std::string value;
- };
- class Sheet
- {
- public:
- Sheet(int columns, int rows) : rows(rows), columns(columns)
- {
- cells = new Cell**[columns];
- };
- ~Sheet()
- {
- for (auto column = 0; column < columns; column++)
- {
- for (auto row = 0; row < rows; row++)
- {
- delete cells[column][row];
- }
- delete[] cells[column];
- }
- delete[] cells;
- };
- void initialize_column(int column, CellType type)
- {
- if (type == CellType::Text)
- {
- cells[column] = new Cell*[rows];
- for (auto row = 0; row < rows; row++)
- cells[column][row] = new TextCell();
- }
- else
- {
- cells[column] = new Cell*[rows];
- for (auto row = 0; row < rows; row++)
- cells[column][row] = new NumberCell();
- }
- }
- void print(int column, int row) const
- {
- cells[column][row]->print();
- }
- void set(int value, int column, int row)
- {
- if (cells[column][row]->getType() == CellType::Number)
- {
- NumberCell* ncell = dynamic_cast<NumberCell*>(cells[column][row]);
- ncell->set(value);
- }
- else
- {
- // some error message?
- }
- }
- void set(std::string string, int column, int row)
- {
- if (cells[column][row]->getType() == CellType::Text)
- {
- TextCell* tcell = dynamic_cast<TextCell*>(cells[column][row]);
- tcell->set(string);
- }
- else
- {
- // some error message?
- }
- }
- private:
- const int rows;
- const int columns;
- Cell*** cells;
- };
- int main()
- {
- Sheet sheet(2, 10);
- sheet.initialize_column(0, CellType::Number);
- sheet.initialize_column(1, CellType::Text);
- sheet.set(42, 0, 1);
- sheet.set("lol", 1, 1);
- sheet.print(0, 1);
- sheet.print(1, 1);
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement