C++ 指针 运算符重载
我写了一个链表,我用链表节点的指针指向一个节点,正常我应该用p=p->next;获得下一个节点的地址,如果我想调用p++就实现这功能,那么怎么样重载指针的++运算符呢...
我写了一个链表,我用链表节点的指针指向一个节点,正常我应该用 p = p->next;获得下一个节点的地址,如果我想调用p++就实现这功能,那么怎么样重载指针的++运算符呢
展开
3个回答
展开全部
后面要加一个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指针,可以参考
这是函数的形式参数,就好像你定义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指针,可以参考
展开全部
Plus operator++(PLink& p)
{
p=p->next;
return p;
}
Plus是类型,PLink是p指针的类型
{
p=p->next;
return p;
}
Plus是类型,PLink是p指针的类型
追问
你确定行?
这个Plus和PLink是不同类型的...你理解我的意思么
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
比如这么定义:
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()这个特殊处理。
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一样通过->和*来操作,并且可以通过++和--来往前或者往后遍历链表。
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询