关于c++中结构体指针的运算符重载问题

c++代码如下:定义一个结构体typedefstructnode{intkey;intdata;}*pnode;如果对这个结构体的运算符<重载,可这样写friendboo... c++代码如下:
定义一个结构体
typedef struct node
{
int key;
int data;
}*pnode;
如果对这个结构体的运算符 < 重载,可这样写
friend bool operator <(node a, node b)
{
return a.key<b.key;
}
经过验证这样是正确的。没有异议的!
现在是这样的,我想对pnode,就是指向node的指针进行重载,应该怎么做,具体代码如下
pnode x,y;
x = new node;
y = new node;
x.key = 1;
x.data = 11;
y. key = 2;
y.data = 22;
我想直接这样
if(x<y)
cout<<"x<y"<<endl;
经过跟踪,if(x<y) 并没有去执行重载函数,想请教下,怎样才能直接这样使用
展开
 我来答
有你的晴天12138
2011-05-27 · TA获得超过1001个赞
知道小有建树答主
回答量:305
采纳率:80%
帮助的人:211万
展开全部
运算符重载的条件是,必须存在至少一个自定义的类型。
而指针实际上就是地址,即一个32位的整数值,它们的大小是直接进行数值的比较的
如果想比较2个指针所指的对象的大小,可以对它们取 * 操作,再调用 operator < 即可。

另外,楼主写的 operator < 重载,参数应设定为 const node &, 即
bool operator < (const node &a, const node &b)
{
...
}
按LZ的方式去写的话,每次调用 < 运算符时都会存在对象的拷贝。

再者,结构体里面的成员,在默认情况下均是 public 的权限,不需要将 bool operator < 设置为结构体的友员函数,可以直接通过对象访问成员变量。
追问
是的!你这样定义是很科学的!我现在想直接用指针进行比较 譬如x<y    x,y 都是pnode类型的!应该怎么定义重载函数啊,如果不想用*取对象,有没有什么好方法
追答
这个是无法操作的,刚才我上面讲到,任何类型的指针,其实都只是一个32位的整数值,在对它们进行比较大小时,是按其整数值比较的。运算符重载的条件一定是要有至少一个用户自定义的类型,比如结构体或者类。

如果你把 operator < 的参数写成结构体的指针或是类的指针,它们并不会是新的类型,编译时会提示出错:error C2803: 'operator <' must have at least one formal parameter of class type
至少要有一个正常的类类型的参数
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式