CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
可用分押宝游戏火热进行中... 专题改版:Java Web 专题
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  VC/MFC >  基础类

☆☆☆☆☆紧急求救:关于C++版数据结构中的一些探讨和困惑☆☆☆☆☆

楼主enterprise54(忘掉她好难)2003-09-04 09:52:07 在 VC/MFC / 基础类 提问

本人最近在准备研究生入学考试,在看指定教材的时候遇到了如下的困惑,昨天在图书馆查了一天的资料也没有解决,所以现在来请各位大侠指点。  
   
  我选了一段程序如下:  
   
  template<class   T>   class   List;       //类的前导声明  
   
  //链表结点类定义  
  template<class   T>   class   ListNode{        
  public:  
          friend   class   List<T>;  
  private:  
          T   data;  
          ListNode<T>     *link;  
  public:  
          //构造函数  
          ListNode():link(NULL){}  
          ListNode(T   item,ListNode<T>   *next=NULL):data(item),link(next){}  
   
        //结点类操作函数  
        ListNode<T>   *getLink(){return   link;}           //获取下一个结点的指针  
        void   setLink(ListNode<T>   *next){link=next;}     //设置下一个结点的指针  
   
        T   getData(){return   data;}                   //获取结点的数据  
        void   setData(T   value){data=value;}       //设置结点的数据  
  };  
   
  //链表类的声明  
  template<class   T>     class   List{  
   
  private:  
          ListNode<T>   *first,*current;     //链表的表头指针和当前元素的指针  
   
  public:  
          .  
          .  
          .  
          int   Length()   const;           //计算链表的长度  
  };  
   
  //计算带表头链表的长度  
  template<class   T>   int   List<T>::Length()  
  {  
          ListNode<T>   *p=first->link;  
          int   count=0;  
          while(p!=NULL)             //在链表中循环扫描  
          {  
                  p=p->link;  
                  count++;  
          }  
          return   count;         //返回结点数目  
  }  
   
  我的问题在这里:  
        1、类ListNode将List类声明为友元类,所以List类中的成员函数可以任意  
  的访问类ListNode中的成员。但在函数int   List<T>::Length()中,定义了一个  
  ListNode<T>   *p指针对象,而在类ListNode中,link被声明为private的访问级  
  别,因此一个ListNode<T>对象是不能直接访问link的,意思说:  
          *p=first->link;  
            p=p->link;  
  上面两个语句是错误的,应该用如下的形式代替:  
          *p=first->getLink();  
            p=p->getLink();  
  这是通过类ListNode的公共接口来访问它自己的私有成员变量。但问题的最关键  
  是那本指定的数据结构统统采用的是类似:*p=first->link;   的访问方式,我不  
  知道这到底是怎么回事,希望各位大侠指点迷津!  
     
   
  问题点数:0、回复次数:2Top

1 楼LocalVar(分乃身外之物,即使我回答对了,也别给分)回复于 2003-09-04 12:59:10 得分 0

这没有什么错误  
  首先,那两句代码出现在List的函数中,而List是ListNode的友元,所以访问完全正确。  
   
   
  其次,ListNode难道不能访问ListNode的成员变量吗?因为ListNode等于ListNode,所以ListNode也是ListNode的友元。换句话说:你用个人名义存钱,然后你就取不出来了,这合理吗?  
   
   
   
   
   
   
  打击你一下,我今年研究生毕业了,可我对中国的学校教育也彻底失去信心了  
  别的不说了,上面的代码多么没有效率,有一点实用价值吗?这就是中国的学校教育。Top

2 楼xiaoliuzi(小六子)回复于 2003-09-04 13:59:47 得分 0

好像我没看出你的  
  template<class   T>   int   List<T>::Length()  
  {  
          ListNode<T>   *p=first->link;  
          int   count=0;  
          while(p!=NULL)             //在链表中循环扫描  
          {  
                  p=p->link;  
                  count++;  
          }  
          return   count;         //返回结点数目  
  }  
  有什么错也,你试着编译一下,编译通的过,你再来考虑这个问题好吗。虽然你是在看书,实际上,你最关心的应该是编译器怎样做的,再考虑自己的想法是不是有问题。还有你这样的学方法还像不好,在看代码的过程中,遇到无论什么问题,首先看看编译器是怎样对待这个问题的,其次才去找资料看书。呵呵,你好像化了一些冤枉的时间在图书馆。Top

相关问题

  • c数据结构问题
  • C#与数据结构
  • c#中的数据结构.
  • 数据结构初始化的困惑
  • c和c++数据结构的差别
  • 数据结构的问题(c语言)
  • 数据结构与C++的关系!!
  • C++实现 队列的数据结构
  • 用C#实现数据结构
  • 热烈欢迎加入c语言学习交流群 大家共同探讨共同进步!!! 热烈欢迎数据结构高手加盟 qq群号12573954

关键词

  • 结点
  • 函数
  • 指针
  • 代码
  • template
  • null
  • listnode
  • 类
  • 链表
  • 访问

得分解答快速导航

  • 帖主:enterprise54

相关链接

  • Visual C++类图书
  • Visual C++类源码下载

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
世纪乐知(北京)网络技术有限公司 版权所有, 京 ICP 证 020026 号
北京创新乐知广告有限公司 提供技术支持
Copyright © 2000-2007, CSDN.NET, All Rights Reserved
GongshangLogo