你应该对复杂数据类型使用访问器吗?下面是一个示例:
假设我有一个Player
类,里面有一个Sprite
对象。假设 Sprite
对象具有 setPosition()
访问器方法。现在假设我想通过播放器调用该方法,因此我在Player
中创建了一个Sprite
对象的访问器。
class Player
{
public:
const Sprite& getSprite() const;
private:
Sprite sprite;
}
现在假设我创建了一个"播放器"对象,如何在sprite
上调用setPosition
?我不能只说playerObject.getSprite().setPosition();
因为getSprite()
方法返回的Sprite
引用是 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,第二个数据结构不允许更改。即使是第一个也很麻烦,我更喜欢(但这是一个品味问题)