CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
IBM Rational 系统开发最佳实践工具包 WebSphere MQ 最佳实践 TOP 15
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  C/C++ >  C++ 语言

protected和private存在的意义?

楼主wwangzhihang100(大浪淘沙)2006-03-15 09:37:17 在 C/C++ / C++ 语言 提问

是不是为了子类简单,并且方便。如果都使用public,那么子类会非常的大。所以增加了这两种类型的继承。还有其他的作用么? 问题点数:20、回复次数:11Top

1 楼pyrophile(豆子(天上云彩往下飘))回复于 2006-03-15 09:39:37 得分 0

出于对数据封装Top

2 楼sankt(宠辱不惊,看庭前花开花落;去留无意,望天空云卷云舒.)回复于 2006-03-15 11:32:57 得分 0

隐藏内部细节,只是提高外部访问的接口  
  Top

3 楼iamcaicainiao(老菜,长征)回复于 2006-03-15 11:43:37 得分 0

隐藏实现。Top

4 楼windking21(想玩玩WOW 真的那么难吗)回复于 2006-03-15 11:49:43 得分 0

虚拟函数   接口类实现Top

5 楼Jchangcheng(长城)回复于 2006-03-15 12:01:45 得分 0

保护数据.操作灵活.Top

6 楼popy007(Twinsen)回复于 2006-03-15 12:06:01 得分 0

说来话长Top

7 楼sinkileu(小心)回复于 2006-03-15 12:37:52 得分 0

这是从现实的角度来设计的,想想人都是有隐私的,不可能把人的所有内容都让外界知道.所以有了public和private之分.  
  在继承中,父亲的东西不可能全部由孩子来继承的,有些是父亲私有的东西(如:秘密),有些是孩子没能力继承的,如此等等,这些用private限制.  
  至于protected,那是继承机制才用得上的,即:子类可以共享,外部不可以.  
  当然,这些会与继承限制(冒号后面的修饰符)共同作用,产生许许多多种情况.幸运的是,一般继承限制都是publicTop

8 楼longlongago8(南瓜)回复于 2006-03-15 13:38:38 得分 0

分享  
  Top

9 楼aniude(重返荣耀)回复于 2006-03-15 14:52:14 得分 0

试着写一个类,然后对比书上的例子,然后想想Top

10 楼wwangzhihang100(大浪淘沙)回复于 2006-03-15 15:22:49 得分 0

感觉protected存在的意义不是很大Top

11 楼ox_thedarkness()回复于 2006-03-15 17:22:17 得分 20

权限是oop封装的核心工具之一。    
   
  我们的代码是给用户使用的(我们自己也是用户),我们希望提供安全的代码,禁止用户使用我们所不希望的功能。  
   
  即使不涉及封装,很多时候我们也必须使用权限。比如:  
   
   
  ////////////////////////////////////////  
  例1   禁止   A   用   =   执行的默认拷贝操作  
   
  class   A{  
  private:  
      A&   operator=   (   const   A&   );     //   声明   operator=   为   private,禁止其使用  
  };  
   
  A   a,   b;  
  a   =   b;   //非法,   operator   =   为   private  
   
   
   
  /////////////////////////////////////////  
  例2   强迫   A   使用模版版本的赋值、构造函数等。  
   
  我们的   class   A   是一个很复杂的类型,假如我们把它的构造函数、赋值函数写成模版形式:  
   
  class   A{  
  public:  
      template   <class   T>  
      A(   const   T&   );  
   
      template   <class   T>  
      A&   operator=   (   const   T&   );  
  };  
   
  但是!模版形式的构造函数并不能阻止默认版本的产生。   作者如果没有意识到这一点,那么就很危险了:  
   
   
  A   a,   b;     //   居然可以!?   将调用默认(什么也不做的)构造函数   ——   作者很可能希望禁止这一点  
  A   c   =   b;   //   怎么回事!?   居然不掉用我们定义的拷贝构造函数!?  
  a   =   b;       //   怎么回事!?   居然不掉用我们定义的   A::operator   =   !?  
   
   
  解决方案是增加拷贝构造函数和默认赋值函数的声明到private:  
   
   
  class   A{  
      A(   const   A&   );  
      A&   operator=(   const   A&   );  
      //...  
  };  
   
  A   a,   b;     //   非法。必须提供参数  
  A   c   =   b;   //   正确调用了模版版本的拷贝构造函数  
  a   =   b;       //   正确调用了模版版本的   A::operator   =  
   
   
  /////////////////////////////////////////  
  例3     设计一个基类,要求:禁止容器对基类指针使用delete。  
   
  class   Base{  
  protected:  
      ~Base();  
  };  
   
  这里我们只能把他设置为   protected。   如果为   public,   那么容器就可以delete它;   如果为   private,   那么它就无法成为基类   ——   他的派生类无法调用其析构函数。Top

相关问题

  • private的意义是什么呢?
  • 不知道这个目录的存在有没有实际意义?
  • 虚函数定义成private有意义么?
  • 抽象类--〉〉〉〉为什么要有抽象类,他存在的意义是什么?? 各位指点..
  • 关于private和protected
  • 实在弄不非常懂 虚函数,纯虚函数存在的意义,我肯定没有理解,请不懂得你,懂得你随便说两句
  • 大家好,请问链接:href="betting-matches.php?ah 有什么具体意义呢?问号后面的"ah"没有赋值有存在的意义吗?我是初学者,谢谢!
  • \\的意义???
  • 如何在页面加载 Private Sub Page_Load中判断一个表是否存在,若不存在创建该表
  • 关于类中 protected 和 private 的区别?

关键词

  • 函数
  • 模版
  • 拷贝
  • 版本
  • 用户
  • 继承
  • 子类
  • 赋值
  • 调用
  • 构造

得分解答快速导航

  • 帖主:wwangzhihang100
  • ox_thedarkness

相关链接

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

广告也精彩

反馈

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