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

时间:2013-01-29 23:22:57

标签: 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;
};

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

4 个答案:

答案 0 :(得分:5)

  

最简单解决问题的方法是什么,但保持或与之相关   最低限度修改我的惯例?

最简单的方式可能是略微修改约定,例如使用小写启动方法名称。

顺便说一句,我喜欢你没有使用“#34; get"在存取方法中。本着同样的精神,你可以放弃" set"在mutator方法中(这里,SetMaterial())。签名足以​​区分访问者和变更者。

如果您喜欢,请访问:

class Material
{};

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

private:
    Material* m_material;
};

答案 1 :(得分:1)

大写方法名称​​异常

答案 2 :(得分:1)

看看Qt库。它使用与您几乎相同的约定,它是我见过的最好的代码片段。我看到的唯一区别是方法名称开头的大写字母。因此,改变你的惯例以匹配他们,你会很高兴。

答案 3 :(得分:0)

你没有遵循良好的命名规则而感到痛苦。

要命名函数,请使用强动词后跟对象具有功能性内聚的过程通常对对象执行操作。该名称应反映该过程的作用,对对象的操作意味着动词加对象名称。 GetMaterial(),SetMaterial,PrintDocument(),CalcMonthlyRevenues(),CheckOrderlnfo()和RepaginateDocument()是良好过程名称的样本。

  

解决问题的最简单方法是什么,但保持或尽量少修改我的约定?

只需在对象前面添加一个动作作为函数名称:

Material* GetMaterial() const {return m_material;}