CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
英特尔®游戏设计大赛100美元现金周周送 专题改版:Java Web 专题
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  C/C++ >  C++ 语言

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

楼主enterprise54(忘掉她好难)2003-09-04 09:49:20 在 C/C++ / C++ 语言 提问

本人最近在准备研究生入学考试,在看指定教材的时候遇到了如下的困惑,昨天在图书馆查了一天的资料也没有解决,所以现在来请各位大侠指点。  
   
  我选了一段程序如下:  
   
  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、回复次数:6Top

1 楼MSN3000(气死我了)回复于 2003-09-04 10:14:08 得分 0

 
  ListNode的成员函数可以放问的东西,为什么他的友员类List的成员函数就不能放问呢?  
  注意:是外部函数不能访问!!!List的成员函数。。。。。。   也属于公有接口来。。Top

2 楼neubird(带发修行的猪)回复于 2003-09-04 10:27:58 得分 0

你仔细看清楚:  
  *p=first->link;  
  p=p->link;  
  这两种写法是写在了哪儿,如果是在ListNode自己的成员函数,或它的友元List的成员函数中,当然可以直接访问!  
  Top

3 楼neubird(带发修行的猪)回复于 2003-09-04 10:28:15 得分 0

你仔细看清楚:  
  *p=first->link;  
  p=p->link;  
  这两种写法是写在了哪儿,如果是在ListNode自己的成员函数,或它的友元List的成员函数中,当然可以直接访问!  
  Top

4 楼steedhorse(晨星)回复于 2003-09-04 10:31:30 得分 0

都被你搞糊涂了,呵呵。类的函数当然可以访问自己的成员,访问控制机制只对外,不对内。Top

5 楼steedhorse(晨星)回复于 2003-09-04 10:32:25 得分 0

都被你搞糊涂了,呵呵。类的函数当然可以访问自己的成员,访问控制机制只对外,不对内。Top

6 楼neubird(带发修行的猪)回复于 2003-09-04 10:33:04 得分 0

这样说吧,对于public,protected,private等关键字,只是编译器来做检查,在自己或友元的成员函数中,编译器就允许这样来写。Top

7 楼enterprise54(忘掉她好难)回复于 2003-09-04 10:52:05 得分 0

我知道自己犯了什么错误了!谢谢各位!  
  Top

8 楼steedhorse(晨星)回复于 2003-09-04 18:32:33 得分 0

不用客气,:PTop

相关问题

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

关键词

  • 函数
  • 结点
  • 指针
  • template
  • null
  • listnode
  • 成员
  • 访问
  • 类
  • 链表

得分解答快速导航

  • 帖主:enterprise54

相关链接

  • C/C++ Blog
  • C/C++类图书
  • C/C++类源码下载

广告也精彩

反馈

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