0

您应该对复杂数据类型使用访问器吗?这是一个例子:

假设我有一个Player类,里面有一个Sprite对象。假设该Sprite对象有一个setPosition()访问器方法。现在假设我想通过播放器调用该方法,所以我SpritePlayer.

class Player
{
public:
    const Sprite& getSprite() const;

private:
    Sprite sprite;
}

现在假设我创建了一个“播放器”对象,我setPosition该如何调用sprite?我不能说playerObject.getSprite().setPosition();是因为方法返回的Sprite引用getSprite()是 const。

考虑到该对象具有针对其所有成员的保护,我是否应该sprite在这种情况下公开该对象?sprite或者这是一种不好的做法,我确实需要使用访问器?

4

1 回答 1

0

没有好的答案:

有一个二维点:

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,第二个数据结构不允许更改。即使第一个很麻烦,我更喜欢那个(但这是一个品味问题)

于 2014-02-16T20:51:28.437 回答