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 メソッド (ここではSetMaterial()) で「set」という単語を削除できます。署名は、アクセサーとミューテーターを区別するのに十分です。

それらが気に入った場合は、次の場所にアクセスします。

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()、CheckOrderlnfo()、およびRepaginateDocument()は、適切なプロシージャ名のサンプルです。

問題を解決するための最も簡単な方法は何ですか?しかし、私の慣習を維持するか、最小限の変更で?

オブジェクトの前に関数名としてアクションを追加するだけです。

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