0

そこで、作成したクラス オブジェクトの REFERENCES を保持するリンク リストを作成しました。

リンクされたリストを検索し、オブジェクトが存在する場合はオブジェクトへの const 参照を返すメソッドを実行したい、オブジェクトが存在しない場合は SOME VALUE を返すメソッドを実行したいと考えています。

どの値にする必要がありますか?int の場合は 0 を返し、ポインターの場合は NULL を返します。

const Node& NodeList::NodeNumSearch(int num) const
{
    Member *TempHead=MemberHead;
    while(TempHead!=NULL)
    {
        if(TempHead->GetNode().getNum() == num)
            return TempHead->GetNode();
        TempHead=TempHead->GetNext();
    }

    return ???;
}

PS メンバー オブジェクトはリンク リストのメンバーです。Node オブジェクトは、リンクされたリストの Member オブジェクトの値です。

4

3 に答える 3

4

この場合は例外であるかthrow、代わりにポインタで返すように関数を変更してください。ここに「空の」参照を返すための正しい方法はありません。

または、標準ライブラリのアプローチを採用し、値によってイテレータのようなプロキシを返します。そうすれば、それが適切かどうかを確認できますend

于 2012-04-30T21:46:52.820 に答える
2

独自の NullNode を静的メンバー var として定義し、それを返すことができます。

// header
class NodeList
{
    .....

    static Node k_NullNode;
};


// cpp
/* static */ Node NodeList::k_NullNode; // you might need to pass a special argument to make it different from normal nodes.

const Node& NodeList::NodeNumSearch(int num) const
{
    ....

    return k_NullNode;
}

// test
void test()
{
    const Node& ret = NodeNumSearch(0);
    if( ret == NodeList::k_NullNode ) // you might need to override == operator.
    {
        // failed to search..
    }
    else
    {
        // succeeded..
    }
}
于 2012-04-30T21:56:05.877 に答える
0

C/C++ では、通常、ポインターを渡して結果を保持し、関数が機能したかどうかに基づいて実際に値を返すと思います。あるいは、例外が機能しない場合は、デフォルト オブジェクトを返すのではなく、例外をスローする必要があります。そのデフォルトを他のコードで使用することが予想される場合にのみ、デフォルトを戻してください - ありそうにない検索のために。

// Inject Node pointer to hold the reference
// Returns 1 if it worked, 0 otherwise
const int NodeList::NodeNumSearch(int num, Node* node) const
{
  //your code here
}
于 2012-04-30T21:50:17.253 に答える