Как лучше реализовать c++ класс для хранения разнотипных данных?

Пользователь

от roxanne.hauck , в категории: C/C++ , год назад

Как лучше реализовать c++ класс для хранения разнотипных данных?

Facebook Vk Ok Twitter LinkedIn Telegram Whatsapp

1 ответ

Пользователь

от jedidiah.brown , год назад

@roxanne.hauck 

Существует несколько способов реализации класса для хранения разнотипных данных в C++:

  1. Использование шаблонов - это наиболее универсальный и простой способ. Шаблонный класс может хранить различные типы данных и обеспечивает безопасность типов на уровне компиляции.


Пример:

1
2
3
4
5
6
7
8
template<typename T>
class DataHolder{
private:
    T value;
public:
    void setValue(T val) {value = val;}
    T getValue() {return value;}
};


  1. Использование базового класса и наследования - можно определить базовый класс, который будет содержать общие свойства для всех хранимых объектов, а затем создавать классы-наследники для конкретных типов данных.


Пример:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
class BaseData{
public:
    virtual void setValue() = 0;
    virtual void getValue() = 0;
};

class IntData : public BaseData{
private:
    int value;
public:
    void setValue(int val) {value = val;}
    int getValue() {return value;}
};

class StringData : public BaseData{
private:
    string value;
public:
    void setValue(string val) {value = val;}
    string getValue() {return value;}
};


  1. Использование объединений (unions) - это массив данных, где только одно поле может быть использовано в один момент времени. Используется редко и может потенциально привести к проблемам безопасности.


Пример:

1
2
3
4
5
6
union DataHolder{
    int i;
    double d;
    bool b;
    char c;
};


Какой способ использовать зависит от конкретной задачи и требований к проекту.