Следует ли использовать средства доступа для сложных типов данных? Вот пример:
Скажи, что у меня есть Player
класс и внутри него есть Sprite
объект. Скажем Sprite
объект имеет setPosition()
метод доступа. Теперь предположим, что я хочу вызвать этот метод через проигрыватель, поэтому я создаю средство доступа к Sprite
объект в Player
,
class Player
{
public:
const Sprite& getSprite() const;
private:
Sprite sprite;
}
Теперь, скажем, я создаю объект «Player», как я могу вызвать setPosition
на sprite
? Я не могу просто сказать playerObject.getSprite().setPosition();
поскольку Sprite
ссылаться на getSprite()
метод возвращает const.
Должен ли я просто сделать sprite
возразить общественности в этой ситуации, учитывая sprite
объект имеет защиту от всех своих членов? Или это плохая практика, и мне нужно использовать средства доступа?
Нет хорошего ответа:
Имея 2D точку:
class Point {
public:
// Skipping constructors here.
int x() const { return m_x; }
int x&() { return m_x; }
int y() const { return m_y; }
int y&() { return m_y; }
private:
int m_x;
int m_y;
};
выглядит излишним по сравнению с
struct Point {
int x;
int y;
};
Первая позволяет вам изменить внутренние данные (скажем, на std :: vector), а вторая структура данных не допускает изменений. Даже первое громоздко, я предпочитаю это (но это вопрос вкуса)
Других решений пока нет …