-1

メンバー項目をメンバー関数に不必要に渡すことの結果 (貧弱なコード以外) は何ですか:

struct foobar
{
  char * arr; //properly initialized to SIZE at some point
}

class foo
{
  public:
    void bar(foobar&);
    foobar barfoo;
};


void foo::bar(foobar& barf)
{
    cin.get(barf.arr, SIZE, '\n');
    cin.ignore(100, '\n');
}

barパラメータを完全に削除せず、barfoo直接呼び出すだけの理由はありますか? そうしないと、どのような結果になりますか?

4

4 に答える 4

3

場合によります。

foo::bar呼び出される唯一のコンテキストががthis->barfooパラメーターとして渡された場合である場合、それは非常にばかげています (明白に有害ではありませんが)。

しかしthis->barfoo、メンバー関数に渡すことができる唯一のパラメーターではない状況では、明らかに問題ありません。

于 2012-05-25T20:58:31.887 に答える
2

結果の 1 つは、foobar の他のインスタンスを同じメソッドに渡すことができないということです。

問題は、メンバーが時々メソッドに送信されるかどうかではなく、呼び出し元がパラメーターを指定できることが望ましいかどうかです。

これは public メソッドであるため、このクラス以外の呼び出し元が存在する可能性があります。

于 2012-05-25T21:00:01.067 に答える
1

それを排除しない理由はありません。少なくとも、関数で渡すときに追加の逆参照を行うことになります。

ただし、何かがクラス外から bar(foobar&) を使用している場合は、それをオーバーロードして次のようにすることができます。

class foo {
public:
    void bar(); /* Uses default barfoo */
    void bar(foobar&);
    foobar barfoo; 
private:
};

viod foo:bar() {
     bar(barfoo);
}

void foo::bar(foobar& barf) {
    cin.get(barf.arr, SIZE, '\n');
    cin.ignore(100, '\n'); 
} 
于 2012-05-25T20:59:58.163 に答える
1

パラメータを渡すとわずかなオーバーヘッドが発生するため、別のメンバーでそのメソッドを呼び出さない場合は、パラメータを取り除くことができます。将来、このようなことをする必要があるかもしれない場合:

class foo 
{ 
  public: 
    void bar(foobar&); 

  private/*(or still public)*/: 
    foobar barfoo;
    foobar barfoo2;

    void some_other_method() {
      //do stuff
      bar(barfoo);
      bar(barfoo2);
}; 

それから私はそれを放っておきます。

于 2012-05-25T21:00:01.550 に答える