0

目前我对类名和方法名使用相同的约定。它们有一个没有前缀的前导大写字母。而且我不使用“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

4 回答 4

5

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

简单的方法可能是稍微修改约定,例如以小写开头的方法名称。

顺便说一句,我喜欢你没有在访问器方法中使用“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;
};
于 2013-01-29T23:26:39.623 回答
1

将方法名称大写是不常见的。

于 2013-01-29T23:24:59.153 回答
1

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

于 2013-01-29T23:28:40.967 回答
0

你被不遵守良好的命名规则所困扰。

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

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

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

Material* GetMaterial() const {return m_material;}  
于 2013-01-29T23:43:43.607 回答