| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1079 人关注过本帖
标题:求助:我该怎样理解箭头操作符?红色处
只看楼主 加入收藏
恭喜我发财
Rank: 1
等 级:新手上路
帖 子:16
专家分:0
注 册:2008-7-4
结帖率:50%
收藏
已结贴  问题点数:2 回复次数:4 
求助:我该怎样理解箭头操作符?红色处
#include "node.h"//需要使用链表结点类
#include <iostream>
using namespace std;
class Linklist
{
    public:
        Linklist(int i,char c);//链表类构造函数
        bool Locate(int i);//根据整数查找结点
        bool Locate(char c);//根据字符查找结点
        bool Insert(int i=0,char c='0');//在当前结点之后插入结点
        bool Delete();//删除当前结点
        void Show();//显示链表所有数据
        void Destroy();//清除整个链表
    private:
        Node head;//头结点
        Node * pcurrent;//当前结点指针
};
Linklist::Linklist(int i,char c):head(i,c)//类名::构造函数名(参数表):成员对象名1(参数表),链表
                                          //类构造函数,调用head对象的构造函数重载1,详见Node.h文件
{
    cout<<"Linklist constructor is running..."<<endl;//提示构造函数运行
    pcurrent=&head;//使当前结点指向头结点,并调用head对象的构造函数重载1
}
bool Linklist::Delete()//删除当前结点
{
    if(pcurrent!=NULL && pcurrent!=&head)//head 结点不能删除
    {
        Node * temp=pcurrent;//temp指针指向当前结点(定位到当前结点)
        if (temp->readn()!=NULL)//如果temp指针没有指向尾部
        {
            //红色部分应该怎样理解?谢谢指导
            temp->readn()->setp(pcurrent->readp());        
                   }
        temp->readp()->setn(pcurrent->readn());//先连
        pcurrent=temp->readp();
        delete temp;//后断
        return true;
    }
    else
    {
    return false;
    }
}
====================(附另一头文件说明)
class Node//定义一个链表结点类
{
    public:
        Node();//构造函数0
        Node(int i,char c='0');//构造函数重载1,参数c 默认为'0'
        Node(int i,char c,Node *p,Node *n);//构造函数重载2
        int readi() const;//读取idata
        char readc() const;//读取cdata
        Node * readp() const;//读取上一个结点的位置
        Node * readn() const;//读取下一个结点的位置
        bool set(int i);//重载,通过该函数修改idata
        bool set(char c);//重载,通过该函数修改cdata
        bool setp(Node *p);//通过该函数设置前驱结点
        bool setn(Node *n);//通过该函数设置后继结点
    private:
        int idata;//存储数据保密
        char cdata;//存储数据保密
        Node *prior;//前驱结点的存储位置保密
        Node *next;//后继结点的存储位置保密
};

[ 本帖最后由 恭喜我发财 于 2009-8-20 13:45 编辑 ]
搜索更多相关主题的帖子: 操作符 箭头 
2009-08-20 13:42
恭喜我发财
Rank: 1
等 级:新手上路
帖 子:16
专家分:0
注 册:2008-7-4
收藏
得分:0 
一般只有一个箭头操作符,现在有两个,真不知道怎样理解
2009-08-20 13:46
ly861014
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:66
专家分:177
注 册:2008-10-28
收藏
得分:0 
回复 楼主 恭喜我发财

箭头操作符等价于先解引用(*)再点操作(.)

对于temp->readn()->setp(pcurrent->readp());

首先是temp->readn(),     等价于(*temp).readn(),   这个返回一个指向Node型对象的指针,假设为pn1, 即 Node *pn1 = (*temp).readn();

同时,pcurrent->readp(), 等价于(*pcurrent).readp();也是返回一个指向Node型对象的指针, 假设为pn2, 即 Node *pn2 = (*pcurrent).readp();

最后是(*pn1).setp(pn2).
2009-08-20 14:40
newCpp
Rank: 5Rank: 5
来 自:火星
等 级:职业侠客
威 望:3
帖 子:256
专家分:375
注 册:2009-8-17
收藏
得分:0 
看不明白啥意思

编程语言视频教程在线播放学习
2009-08-20 21:52
pangding
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:北京
等 级:贵宾
威 望:94
帖 子:6784
专家分:16751
注 册:2008-12-20
收藏
得分:0 
回复 楼主 恭喜我发财
就是从左到右的调用,第二个箭头是利用第一个箭头的返回值链式调用的。
其实不乏这样的语法,比如 a+b+c 也是先把a, b加起来。然后再用它们的和(相当于a+b返回的值)与c相加。
由于和数学里的一样,所以很习惯。箭头这个操作符看着比较奇怪,一开始有点反应不过来而已~ 熟悉了就好了,加油
2009-08-21 11:17
快速回复:求助:我该怎样理解箭头操作符?红色处
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.023312 second(s), 9 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved