1. Это хорошая идея - установить 2 значения (uid и gid) с помощью одного метода установки (setUidGid ())?
Я не понимаю, почему нет, у вас может быть один установщик , если вы собираетесь создать пользователя, а затем установить uid и gid, вы также можете создать для него конструктор.
2. Можно ли использовать такую функцию в методе установки setUserName (), а также устанавливать из нее разные члены (setUidGid ()). Или лучше установить все три члена из него (имя пользователя, uid, gid).
Если вы собираетесь сделать сеттер, чтобы установить все три, вы должны быть ясны в именах методов, вы можете сделать 3 частных установщика для каждого свойства и сеттер publi c, который может быть назван, скажем, setAll(std::string username, std::string uid, std::string gid)
, и вызвать все 3 установщика изнутри него или просто установить их там напрямую, я не не вижу там проблемы, пока понятное название ..
3. Можно ли хранить такие взаимосвязанные объекты как разные члены класса? Есть ли лучшее решение?
Это не неправильно, вы также можете создать другой класс / структуру с этими тремя полями и создать его экземпляр в классе владельца, в зависимости от его содержимого, если он только имеет эти три свойства или, скажем так, некоторые другие связанные свойства, это нормально, но если у вас есть класс, который имеет больше свойств, которые напрямую не связаны с пользователем, лучше инкапсулировать поля в его собственный класс, это вопрос design.
Таким образом, пример класса с геттерами и сеттерами, которые требуются, с описанным шаблоном проектирования, будет выглядеть следующим образом (при условии, что класс, которому требуется подкласс пользователя, и со встроенными методами для простоты ):
#include <iostream>
class User
{
private:
std::string _username;
std::string _gid;
std::string _uid;
public:
const std::string &getUserName() const
{
return _username;
}
//The other getters
void setAllProperties(std::string username, std::string uid, std::string gid)
{
_username = username;
_gid = gid;
_uid = uid;
}
};
class ProcessConfig
{
private:
User user;
//...
int someUnrelatedProperty;
double yetAnotherProperty;
//...
public:
const User &getUser() const
{
return user;
}
void setUser(std::string username, std::string uid, std::string gid)
{
user.setAllProperties(username, uid, gid);
}
};
int main()
{
ProcessConfig process;
process.setUser("name", "uid", "gid");
std::cout << process.getUser().getUserName();
}