1

请帮助我,在双向链表中实现重载运算符++。我有A和B两个班。

class A {
private:
    int h;
    int a;
public:
    A *next, *prev;

friend A operator ++(A &, int);
};

A operator ++(A &t, int) {
    A temp = t;
    temp.h++;
    temp.a++;
    return temp;
}


class B {
private:
    A *head, *tail;
public:
    void incValue();
};

void B::incValue() {
    while(head != nullptr) {
        head++;
        head = head -> next;
    }
}

执行方法后 incValue() head = NULL 我不明白为什么这不起作用。

PS此代码必须是eq。头++

head -> setH(head -> getH() + 1);
head -> setA(head -> getA() + 1);
4

3 回答 3

1

如果你想调用重载operator++的,A你需要调用(*head)++你的B::incValue方法。

于 2013-11-06T11:19:47.967 回答
1

要重载运算符 ++,您需要支持链接列表的某些数据成员,这些数据成员将定义列表中的当前位置。您还需要一个成员函数来重置链表中的当前位置。

于 2013-11-06T11:18:34.573 回答
0

第一的。您重载运算符以将第一个参数用作类->您不需要使运算符成为朋友。

class A {
private:
    int h;
    int a;
public:
    A *next;
    A *prev;
    void operator ++ ( int ); 
};

这个重载的运算符将与 A 类的对象一起使用。所以要使用它,只需编写:

A a;
a++;

该运算符的实现将是:

void A::operator ++ ( int )
{
  h++;
  a++;
}

你的实现只会像这样工作:

A a;
a = a++;

因为运算符 ++ 返回 A 对象的新副本,但增加了 h 和 a 成员。

第二。关于进入列表:当 head == NULL 时,您的while将停止,因此执行后 while 循环头指针将等于 0。因此,head++将为每个对象执行该循环语句。

于 2013-11-06T11:22:23.513 回答