CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
不看会后悔的Windows XP之经验谈 简单快捷DIY实用家庭影院
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  C/C++ >  C++ 语言

成员私有公有的问题!

楼主Bobosail(Time++;)2006-03-08 17:59:22 在 C/C++ / C++ 语言 提问

template   <class   T>  
  class   Iter                                           //类似与STL迭代器  
  {  
  T*   ptr;  
  T*   end;  
  T*   begin;  
  unsigned   length;  
  public:  
  Iter()                                           //构造函数  
  {  
  ptr=end=begin=NULL;  
  length=0;  
  }  
   
  Iter(T*   p,T*   first,T*   last)     //复制构造函数  
  {  
  ptr=p;  
  end=last;  
  begin=first;  
  length=last-first;             //last-first为指针之间的距离  
  }  
   
  unsigned   size()   {return   length;}  
   
  T&   operator*()                           //重载*运算符  
  {  
  if((ptr>=end)||(ptr<begin))  
  throw   OutOfRangeExc();                 //指针越界抛出异常  
  return   *ptr;  
  }  
   
  T*   operator->()                           //重载->运算符  
  {  
  if((ptr>=end)||(ptr<begin))  
  throw   OutOfRangeExc();                 //指针越界抛出异常  
  return   ptr;  
  }  
   
   
          //以下是重载自增自减运算符,以及2种形式------------  
  Iter   operator++()  
  {  
  ptr++;  
  return   *this;  
  }  
   
  Iter   operator--()  
  {  
  ptr--;  
  return   *this;  
  }  
   
  Iter   operator++(int   notused)  
  {  
  T   *tmp=ptr;  
  ptr++;  
  return   Iter<T>(tmp,begin,end);  
  }  
   
  Iter   operator--(int   notused)  
  {  
  T   *tmp=ptr;  
  ptr--;  
  return   Iter<T>(tmp,begin,end);  
  }  
   
  //----------------------------------------  
   
  T&   operator[](int   i)       //重载下标运算符  
  {  
  if((i<0)||(i>=(end-begin)))  
  throw   OutOfRangeExc();  
  return   ptr[i];  
  }  
   
  //以下是重载关系运算符--------------------------------------------------  
  bool   operator==(Iter   op2)  
  {  
  return   ptr==op2.ptr;  
  }  
   
  bool   operator!=(Iter   op2)  
  {  
  return   ptr!=op2.ptr;  
  }  
   
  bool   operator<(Iter   op2)  
  {  
  return   ptr<op2.ptr;  
  }  
   
  bool   operator<=(Iter   op2)  
  {  
  return   ptr<=op2.ptr;  
  }  
   
  bool   operator>(Iter   op2)  
  {  
  return   ptr>op2.ptr;  
  }  
   
  bool   operator>=(Iter   op2)  
  {  
  return   ptr>op2.ptr;  
  }  
  //---------------------------------------------------------------------  
   
  Iter   operator-(int   n)  
  {  
  ptr-=n;  
  return   *this;  
  }  
   
  Iter   operator+(int   n)  
  {  
  ptr+=n;  
  return   *this;  
  }  
   
  int   operator-(Iter<T>   &itr2)  
  {  
  return   ptr-itr2.ptr;  
  }  
  };  
  程序中多次出现了如itr2.ptr等的情况,显然是调用了私有成员,但是为什么可以通过编译?  
  难道接受传过来的是相同类的对象时是可以直接调用私有成员的吗? 问题点数:20、回复次数:5Top

1 楼ugg(逸学堂(exuetang.net))回复于 2006-03-08 18:17:46 得分 20

重载=,==,<   等操作符号时,是允许这样的..  
   
  难道接受传过来的是相同类的对象时是可以直接调用私有成员的吗?  
  `~`~`~`~`~  
  这句话是正确的,如果不允许这样,那就需要给类中的每个成员变量定义接口了..  
  基于以上考虑,,所以在相同类型中允许访问私有变量..Top

2 楼benlei999(醉明月)回复于 2006-03-08 18:42:26 得分 0

在自己的接口实现中当然可以访问自己的成员啊(不管公有私有,访问限制只是针对其他类)Top

3 楼xiaocai0001(高楼目尽欲黄昏/梧桐叶上萧萧雨)回复于 2006-03-08 18:46:11 得分 0

私有,公有权限只是对类的实例来说的,   对于类的成员函数时没有此限制.Top

4 楼Bobosail(Time++;)回复于 2006-03-08 18:53:11 得分 0

谢谢1楼的  
  后面的说的也对,但是后面的再看看  
  bool   operator>=(Iter   op2)  
  {  
  return   ptr>op2.ptr;  
  }  
   
  这个传过来的应该是实例吧。只有1楼的说的通吧Top

5 楼hdt(倦怠)回复于 2006-03-08 19:27:12 得分 0

oo   语言都是这样  
  class   a{  
        int   _nId;  
  public:   test(   a   atemp   )  
        {  
                    atemp._nId   =   100;   //  
          }  
  };  
  Top

相关问题

  • 私有成员和公有成员问题
  • 一个菜鸟的问题,私有成员和公有成员,谁可以举例说明一下?谢谢
  • 提问:[类]私有和公有?
  • 书上说如果发现一个公有继承体系没有用到虚函数,那就表示这个公有继承是不正确的,应该使用私有继承或者成员对象。说公有继承是为了实现
  • 常私有成员初值
  • 公有成员问题!
  • php的类中有没有私有、公有、友员之分?
  • 类私有数据成员的疑问
  • 私有成员保护的问题
  • 引用私有成员的问题?

关键词

  • op2
  • 私有
  • 重载
  • 运算符
  • ptr
  • iter
  • 成员
  • itr2
  • operator
  • begin

得分解答快速导航

  • 帖主:Bobosail
  • ugg

相关链接

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

广告也精彩

反馈

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