如何避免类和方法的重复名称?

use*_*020 0 c++ naming

目前我对类名和方法名使用相同的约定.他们有一个没有前缀的主要大写字母.我不使用"Get"前缀来获取属性.但是,我在以下代码中遇到名称冲突问题

class Material
{};

class Background
{
public:
    Material* Material() const             {return m_material;}  // Name conflict
    void SetMaterial(Material* material)   {m_material = material;}

private:
    Material* m_material;
};
Run Code Online (Sandbox Code Playgroud)

什么是解决问题的最简单方法,但保持或最小化我的约定?非常感谢!

Aru*_*run 5

什么是解决问题的最简单方法,但保持或最小化我的约定?

最简单的方法可能是稍微修改公约,如用小写字母开头的方法名.

顺便说一下,我喜欢你在accessor方法中没有使用"get"这个词.本着同样的精神,你可以在mutator方法中删除"set"这个词(这里SetMaterial()).签名足以​​区分访问者和增变者.

如果你喜欢他们,你会到达:

class Material
{};

class Background
{
public:
    Material* material() const          {return m_material;}
    void material(Material* material)   {m_material = material;}

private:
    Material* m_material;
};
Run Code Online (Sandbox Code Playgroud)

  • 这是一个很好的问题,很高兴你问!对我来说,"获取"或"设置"似乎是多余的,因为使用使得代码正在获取或设置变得清晰明确.此外,与`if(bg.getMaterial()== foo)`相比,我个人觉得`if(bg.material()== foo)`更容易阅读. (4认同)