2014-02-16 32 views
0

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

假设我有一个Player类,并在里面有一个Sprite对象。假设Sprite对象有一个setPosition()访问器方法。现在让我们假设我想通过播放器调用该方法,因此我创建了一个对象的访问器,用于访问Player

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

private: 
    Sprite sprite; 
} 

现在让我们说我创建了一个“球员”的对象,我怎么呼吁sprite ?我不能只说playerObject.getSprite().setPosition();,因为Sprite引用getSprite()方法返回的是const。

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

+0

你应该考虑[SOLID](http://en.wikipedia.org/wiki/SOLID_(object-oriented_design))原理。从代码的模块化和可维护性的角度来看,您的问题的答案可能不是您明确要求的。首先,您可能想要将游戏逻辑与演示(精灵等)分开, –

回答

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