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

How to avoid duplicate names of class and method?

本文关键字:方法 何避免      更新时间:2023-10-16

目前我对类名和方法名使用相同的约定。它们有一个不带前缀的前导大写字母。而且我不使用"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;
};
解决问题

的最简单方法是什么,但保留或尽量减少对我的约定的修改?多谢!

解决问题的最简单方法是什么,但保持或与 对我的约定进行最低限度的修改?

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

顺便说一句,我喜欢您在访问器方法中不使用"get"一词。本着同样的精神,您可以在突变器方法中删除"set"一词(此处为 SetMaterial() )。签名足以区分访问者和突变者。

如果您喜欢它们,您可以通过以下方式联系:

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

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

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

你不遵守好的命名规则会让你受咬。

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

解决问题

的最简单方法是什么,但保留或尽量减少对我的约定的修改?

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

Material* GetMaterial() const {return m_material;}  
相关文章: