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

可以使用类Private数据成员?

楼主pwtitle(doodoo)2004-08-04 17:52:11 在 C/C++ / C++ 语言 提问

一个List类的其中一个成员函数,其中  
  data和ptrNext都是private的,  
  这里申明了一个新的List对象,为什么该对象可以直接访问类的私有数据成员呢?  
  因为newPtr对象并不是当前对象啊。  
   
   
  void   List::insert(int   i)  
  {  
        List   *newPtr   =   new   List;  
        assert(newPtr!=0);  
        newPtr->data   =   i;  
        newPtr->ptrNext   =   0; //   最后一个元素    
         
  }  
   
  问题点数:5、回复次数:10Top

1 楼RookieStar(Yukon)回复于 2004-08-04 17:58:55 得分 0

是否私有是对类来讲的,不是对对象而言的,前者范畴广,所以产生了你所谓的疑问。Top

2 楼pwtitle(doodoo)回复于 2004-08-06 11:37:52 得分 0

没明白!!!!!Top

3 楼geochway(geochway)回复于 2004-08-06 13:28:45 得分 2

RookieStar说得有点道理,不过问题似乎并不是那么简单.  
   
  我看了BCB中有关private的描述,我感觉应该这样理解:  
   
        类的私有成员只有该类的成员函数或友元函数才能存取,  
  类的成员函数同时也是类的友元函数,因此它可以在该类的  
  对象之外存取对象内的私有成员.  
        而protected成员只有继承的类能够存取,但继承的类和  
  基类概念上并不是同一个类,因此继承的类虽然可以存取基  
  类的protected成员,但仅限于自身.  
   
  class   base  
  {   private:    
          int   Priv;  
      protected:  
          int   Prot;  
      public:  
          int   GetPri(base   &B){   return   B.Priv;   }     //可以  
  };  
   
  class   CBase   :   public   base  
  {   public:  
          int   GetPrivate(base   &B){   return   B.Priv;   }   //错误  
          int   GetProt1(base   &B){   return   B.Prot;   }   //错误  
          int   GetProt2(){   return   Prot;   }   //可以  
          int   GetPriv(){   return   Priv;   }   //错误  
  };  
  Top

4 楼pwtitle(doodoo)回复于 2004-08-06 13:38:33 得分 0

类的成员函数同时也是类的友元函数,因此它可以在该类的  
  对象之外存取对象内的私有成员.  
   
  这里我的List   *newPtr   =   new   List;  
  完全是一个新的对象啊。和当前对象并不是同一对象。  
  也就是或在Class   A内的成员函数中申明A对象B,B如何能访问到A的私有成员呢?  
  照这样的理解下面岂不也是正确的?  
   
  void   List::insert(int   i)  
  {  
        MyClass   *obj   =   new   MyClass;  
        obj->data   =   i;   //data为类的私有数据成员  
  }  
  Top

5 楼universe01(未知软体)回复于 2004-08-06 14:55:55 得分 0

因为  
   
  在void   List::insert(int   i)  
  里面吧!Top

6 楼bailingke(大钊)回复于 2004-08-06 16:35:49 得分 0

A\B对象都有自己的data和ptrNext成员变量  
  所以newPtr->data   =   i;  
        newPtr->ptrNext   =   0;  
  是不违反语法的。  
   
  希望我已经解释清楚了。Top

7 楼shenyiwen(沈亦文)回复于 2004-08-06 16:50:31 得分 2

"这里我的List   *newPtr   =   new   List;  
  完全是一个新的对象啊。和当前对象并不是同一对象。"  
   
  前面已经说了,访问权限是基于类的,不是基于对象的.  
  尽管对象是新建的,但类还是List.相同类可以互相访问私有成员.Top

8 楼qhgary(Gary)回复于 2004-08-06 16:59:23 得分 1

私有是相对于不同类之间的实例来说的(子类也属于不同类)  
  就是说同一个类的不同对象之间不存在私有的问题Top

9 楼toxyboy(不专业,我就顶,绝不误导别人!!)回复于 2004-08-06 17:52:04 得分 0

MarkTop

10 楼bravebarbarian(野蛮人)回复于 2004-08-06 18:04:19 得分 0

你拿个指针,就没有你访问不了的东西。  
  算偏移再强制转换。Top

相关问题

  • 关于C++的private数据成员
  • delphi中不能使用静态数据成员?
  • 微妙的陷阱:返回对private数据成员的引用
  • 如何在CMainFrame中使用视类的数据成员?不是GetActiveView()的问题。
  • 简单问题!全局函数中怎么使用文档的数据成员?
  • private的数据成员和成员函数的参数一样怎么区分啊?
  • 类的const数据成员?
  • 类字段(或者叫数据成员)必须在初始化块使用它之前定义吗?
  • 静态数据成员之疑问
  • 关于静态数据成员

关键词

  • 函数
  • 数据
  • 类
  • 对象
  • 成员
  • 私有
  • newptr
  • ptrnext
  • 存取
  • 访问

得分解答快速导航

  • 帖主:pwtitle
  • geochway
  • shenyiwen
  • qhgary

相关链接

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

广告也精彩

反馈

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