Гетеры и сеттеры C++

107
25 августа 2019, 14:00

Можете объяснить, как более правильно написать геттер для этого класса?

class Data{
public:
    string famil, name, skype, email, tg, mainlng;
    int lvlprog;
    Data(string _famil="", string _name="",string _skype="", string _email="", string _tg="",string _mainlng="", int _lvlprog=0):famil(_famil),name(_name),skype(_skype),email(_email),tg(_tg),mainlng(_mainlng),lvlprog(_lvlprog) {
    }
    void SetData(string _famil="", string _name="",string _skype="", string _email="", string _tg="",string _mainlng="", int _lvlprog=0) {
        famil =_famil;
        name =_name;
        skype =_skype;
        email =_email;
        tg =_tg;
        mainlng =_mainlng;
        lvlprog =_lvlprog;
    }
    string GetData() {  
    }
};
Answer 1
class Data
{
public:
    Data(std::string _famil = "", std::string _name = "", std::string _skype = "", std::string _email = "", std::string _tg = "", std::string _mainlng = "", int _lvlprog = 0)
        : famil   { _famil }
        , name    { _name }
        , skype   { _skype }
        , email   { _email }
        , tg      { _tg }
        , mainlng { _mainlng }
        , lvlprog { _lvlprog }
    {
    }
    ~Data()
    {
    }
    std::string get_famil() const { return famil; }
    std::string get_name() const { return name; }
    std::string get_skype() const { return skype; }
    std::string get_email() const { return email; }
    std::string get_tg() const { return tg; }
    std::string get_mainlng() const { return mainlng; }
    int get_lvlprog() const { return lvlprog; }
    void set_famil(const std::string& _famil) { famil = _famil; }
    void set_name(const std::string& _name) { name = _name; }
    void set_skype(const std::string& _skype) { skype = _skype; }
    void set_email(const std::string& _email) { email = _email; }
    void set_tg(const std::string& _tg) { tg = _tg; }
    void set_mainlng(const std::string& _mainlng) { mainlng = _mainlng; }
    void set_lvlprog(int _lvlprog) { lvlprog = _lvlprog; }
protected:
    std::string famil;
    std::string name;
    std::string skype;
    std::string email;
    std::string tg;
    std::string mainlng;
    int lvlprog;
};

В самом общем случае гет/сет реализуются для каждого конкрентного поля класса.
Если необходимо предоставить весь набор полей класса вызывающей стороне, то определяется формат в котором это надо, например вернем класс как кортеж:

std::tuple<std::string, std::string, std::string, std::string, std::string, std::string, int> get_as_tuple() const
    {
        return std::make_tuple(famil, name, skype, email, tg, mainlng, lvlprog);
    }

Или вернем класс в виде json строки (код условный)

std::string get_as_json() const
{
    JSON_Document document;
    document.add_field("famil", famil);
    document.add_field("name", name);
    document.add_field("skype", skype);
    document.add_field("email", email);
    document.add_field("tg", tg);
    document.add_field("mainlng", mainlng);
    document.add_field("lvlprog", lvlprog);
    return document.to_std_string();
    // {
    //  "famil": "Pupkin",
    //  "name": "Vasya",
    //  ...
    // }
}

Также это может быть мап (ключ-значение), вектор, хмл или любой другой нужный вам формат

Какой конкретно способ выбрать зависит от условий использования. Если данные публичные, то проще лучше организовать вместо класса структуру с публичными полями.

READ ALSO
Невозможность асинхронного вызова recvfrom()

Невозможность асинхронного вызова recvfrom()

Вызов recvfrom() из вызванной асинхронно функции блокирует не только нить, в которой функция, но и вызывавший поток (возврат в него не происходит)Почему...

120
Данные в загруженном файле не меняются

Данные в загруженном файле не меняются

Я недавно начал заниматься C++, и пишу простую программку которая получает данные из файла который находится в интернетеСама функция:

101
Определить возвращаемый тип перегруженной функции в шаблоне

Определить возвращаемый тип перегруженной функции в шаблоне

У меня возникает проблема с определением типа возвращаемого значения перегруженной функции внутри шаблонаВозвращаемый тип зависит от параметра,...

97