0

所以我制作了一个链接列表,其中包含我创建的类对象的引用。

我想做一个在链接列表中搜索并返回对对象的 const 引用(如果它存在)的方法,否则,如果对象不存在,则返回一些值。

它应该是什么值?如果是 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一个Member对象是链表的成员。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 回答