C++ 指针 运算符重载

我写了一个链表,我用链表节点的指针指向一个节点,正常我应该用p=p->next;获得下一个节点的地址,如果我想调用p++就实现这功能,那么怎么样重载指针的++运算符呢... 我写了一个链表,我用链表节点的指针指向一个节点,正常我应该用 p = p->next;获得下一个节点的地址,如果我想调用p++就实现这功能,那么怎么样重载指针的++运算符呢 展开
 我来答
qy40pl
2011-04-08 · TA获得超过312个赞
知道答主
回答量:557
采纳率:100%
帮助的人:0
展开全部
后面要加一个V,好像并没有定义啊?
这是函数的形式参数,就好像你定义int fun(int i){}里面的i一样。

2.第一行为什么是myVector myVector::operator()而不是myVector::opertator()为什么要重复一次。
第一个是返回值类型,第二个是类名

3.this 这个句子中的V.x指的是什么啊?this->x+V.x 这两个x分别是什么啊?
this->x指的是当前对象的成员x,V.x指的是参数V的成员x

关于运算符重载,可以参考

关于this指针,可以参考
百度网友958793d17
2011-04-07 · TA获得超过829个赞
知道小有建树答主
回答量:1275
采纳率:0%
帮助的人:1087万
展开全部
Plus operator++(PLink& p)
{
p=p->next;
return p;
}
Plus是类型,PLink是p指针的类型
追问
你确定行?
这个Plus和PLink是不同类型的...你理解我的意思么
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
Frank7258
2011-04-08 · TA获得超过1503个赞
知道小有建树答主
回答量:381
采纳率:0%
帮助的人:547万
展开全部
比如这么定义:
template <typename T>
class LinkedList
{
public:
struct Node
{
T data;
Node* pNext;
Node& operator ++() //后置,注意后置的返回之前的节点
{
Node* pNode = this;
(*this) = *(this->pNext);
return *pNode;
}
Node& operator ++(int) //前置,返回Next节点
{
(*this) = *(this->pNext);
return *this;
}
};
inline Node& GetFirstNode() //链表为空会出错
{
return *pFirst;
}
private:
Node* pFirst;
};
不过以上代码有个很大的问题,实际上是不能用的,只是为了说明一下。因为返回引用,所以在访问到最后一个节点的时候会出现访问违规,因为最后一点的pNext是个Null,你对NULL调用*号就会出问题,如果返回Node的指针那就没问题了,但是如果返回指针,你
LinkedList::Node* pNode = ....GetFirstNode();
(*pNode)++;
这样才行,看起来很不爽。
如果要向stl的iterator那样,那前提就是最后的一个节点要特殊处理,stl就有end()这个特殊处理。
追问
(*this) = *(this->pNext);
就这一句话我就纠结了........
按我的理解,这就与我问的不一样了....
追答
你的问题不就是要实现p++的效果么,p++是要改变自己的内容的。
优美的实现你可以看C++标准stl库的代码,它是用了一个叫做迭代器的类来包装指针p,迭代器主要就是重载了++, --, ->, *(引用,不是乘法) 等操作,使得迭代器可以和指针p一样通过->和*来操作,并且可以通过++和--来往前或者往后遍历链表。
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式