如何在链表中重载operator ++

时间:2013-11-06 11:10:06

标签: c++ linked-list operator-overloading doubly-linked-list

请帮助我,在双向链表中实现重载操作符++。 我有两个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 我不明白为什么这不起作用。

P.S。此代码必须是eq。头++

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

3 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:1)

如果您想为operator++调用重载的A,则需要在(*head)++方法中调用B::incValue

答案 2 :(得分: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++;

因为operator ++返回A对象的新副本,但是增加了h和成员。

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