请帮助我,在双向链表中实现重载操作符++。 我有两个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);
答案 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++
。