Так что я потратил некоторое время на размышления об этом и всюду по Google искал «решение» (решение, скорее всего, является вопросом предпочтения, но я не уверен в этом). Ниже приведена проблема, с которой я столкнулся, но эту проблему можно применить ко многим ситуациям, связанным с композицией.
У меня есть класс Color, содержащий элементы красного, зеленого, синего и альфа. Каждый из них имеет функцию set и get. Достаточно просто.
class Colour
{
public:
float getRed();
void setRed(float);
float getGreen();
void setGreen(float);
...
private:
float red;
float green;
...
};
Я буду использовать этот класс в других классах для определения их цвета, например (для краткости опускаем конструктор и деструктор):
class ColourableObject
{
private:
Colour colour;
};
Теперь моя проблема заключается в следующем: как классу ColourableObject лучше всего получить доступ к этому объекту Color? Было бы лучше получить объект Color для прямого доступа к его функциям-членам, например:
class ColourableObject
{
public:
Colour& getColour();
private:
Colour colour;
};
Или было бы лучше дать классу ColourableObject свой собственный набор и получить функции для цвета, в которых действуют на объект Color, например, так:
class ColourableObject
{
public:
float getRed();
void setRed(float);
...
private:
Colour colour;
};
Для меня первый вариант наиболее логичен, поскольку он избавил бы от множества проблем при добавлении функциональности в каждый класс, для которого требуется этот объект Color, просто воздействуя непосредственно на этот объект Color.
Однако не является ли последний более восприимчивым к изменениям в классе ColourableObject? Не говоря уже о том, что colourableObject.getColour (). SetRed (x) не кажется мне слишком естественным, так как get и set конфликтуют друг с другом.
У меня, вероятно, совершенно неправильный подход. Я относительно новичок в C ++, поэтому я готов учиться! Таким образом, вопрос заключается в том, должен ли я использовать первый метод, второй метод или совершенно другой метод?