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

【讨论】基类对象,派生类对象,及其指针/引用间的赋值。

楼主LoveCreatesBeauty(lovecreatesbeauty.googlepages.com)2003-12-02 10:52:08 在 C/C++ / C++ 语言 提问

1.   基类对象指针/引用   =   派生类对象指针/引用;  
        可以将派生类对象指针/引用赋值给基类对象指针/引用。C++要求指针/引用类型  
        与赋给的类型相匹配,这一规则对继承来说是例外,但这种例外是单向的。并  
        且不需要强制转换就可以进行,这种向上的转换是安全的。  
           
   
  2.   派生类对象指针/引用   =   基类对象指针/引用;  
        这种转换不属于上一条中的例外,并且只有通过强制转换才能进行。而且使用这  
        种指针/引用不是安全的。  
   
   
  3.   基类对象   =   派生类对象;    
        派生类对象可以赋值给基类对象,但其中新增的成员将被忽略。赋值时使用基类  
        的赋值操作符。  
   
   
  4.   派生类对象   =   基类对象;  
        只有在派生类定义了适当的转换操作符,赋值操作符时这种赋值才是可能的。  
   
   
  //   欢迎讨论,共同进步。  
  //   真诚欢迎批评,指正,补充。  
  问题点数:100、回复次数:15Top

1 楼fireseed(【VC无敌,英明神武,千秋万代,一统江湖!】—奶油狗)回复于 2003-12-02 10:57:57 得分 34

1.   用Is-a定义即可证明其逻辑合理性  
   
  2.   会引起访问越界出错  
   
  3.   “裁剪”  
   
  4.   bitwise拷贝并不适用,因为会破坏派生类对象的vbtrTop

2 楼fierygnu(va_list)回复于 2003-12-02 10:59:32 得分 33

1、不是例外,C++里派生类就是基类,所以类型是匹配的。安全。  
  2、dynamic_cast就是为了解决这个问题引入的安全转换。  
  3、对。此外vtable将被修改。  
  4、基本上是设计失败的表现。  
  Top

3 楼LoveCreatesBeauty(lovecreatesbeauty.googlepages.com)回复于 2003-12-02 11:20:03 得分 0

多谢   fireseed,   fierygnu   两位的指正。Top

4 楼plainsong(短歌)()回复于 2003-12-03 00:21:07 得分 33

 
          在可以用static_cast安全地进行转换时比用dynamic_cast转换更优秀,这说明设计的比较好。用dynamic_cast进行转换通常说明可能会转换失败,或是存在“菱形继承”或“虚继承”。  
          当对象存在vtpr时,隐含生成的拷贝成员也不会是简单的bit-move操作。  
          在没有定义从基类到衍生类的转换时事实上是不会调用拷贝成员的。  
  Top

5 楼renfengxing(任风行)回复于 2003-12-03 09:43:12 得分 0

请问楼上的大哥,这种知识是怎么学来的啊?  
  我非常~~非常~想知道~~~  
  能不能给我介绍本相关的书??谢谢~Top

6 楼LoveCreatesBeauty(lovecreatesbeauty.googlepages.com)回复于 2003-12-03 09:46:23 得分 0

夜里这么晚了   ,多谢   plainsong   。艳羡您的学识:)Top

7 楼byyyyy(苦行僧【苦】)回复于 2003-12-03 11:36:37 得分 0

太深奥了。学习中。。。。Top

8 楼LoveCreatesBeauty(lovecreatesbeauty.googlepages.com)回复于 2003-12-03 14:11:26 得分 0

http://expert.csdn.net/Expert/topic/2443/2443196.xml?temp=.5420038  
   
  《冬夜》...辛笛...——1934年12月   西山松堂一夜    
  http://poem365.myetang.com/xd/xd3.htm  
   
  终可求证,难为了我对于美好的事物的好记性。犹今日之诗,不意时空相隔如斯。  
   
  //今日开始我要为新工作奔忙了,记之。Top

9 楼LoveCreatesBeauty(lovecreatesbeauty.googlepages.com)回复于 2003-12-03 14:15:09 得分 0

http://poem365.myetang.com/mpoem/peom_m.htmTop

10 楼LoveCreatesBeauty(lovecreatesbeauty.googlepages.com)回复于 2003-12-04 10:24:18 得分 0

class   Base{  
  };  
   
  class   Derived   :   //public    
  Base{  
  };  
   
  int   main()  
  {  
          Derived   objD;  
          Base   &   pB   =   objD;  
  }  
   
  /*    
  在private继承中,派生类的指针/引用不能赋值给基类的指针/引用。  
   
  Dev-C++   v498  
  11   D:\Working\c++\Untitled1.cpp  
  `Base'   is   an   inaccessible   base   of   `Derived'  
  */Top

11 楼transformers()回复于 2003-12-05 13:59:45 得分 0

太需要学习了!Top

12 楼LoveCreatesBeauty(lovecreatesbeauty.googlepages.com)回复于 2003-12-14 20:49:40 得分 0

upTop

13 楼jzflyaway(flyaway)回复于 2003-12-14 21:15:39 得分 0

我前几天做关于这的题目时,总是搞不懂,  
  现在看了楼主的贴子,真的是省了我很多时间,  
   
  不过楼主,能不能举个简单的例子证实一下.  
   
  谢谢!Top

14 楼langzi8818(┤天道酬勤┝爱老婆┦┷我是来学习滴┷)回复于 2003-12-14 22:02:58 得分 0

1,3我知道!  
  2,4就是不太懂了,因为我从来没有这么做过!这样做我想危险很大的  
  4,我想肯定会破坏vtableTop

15 楼bestsmoke((嘿嘿))回复于 2003-12-15 10:50:14 得分 0

就是说向上强制类型转换OK,而相反却不行,因为派生类中可能有新增的数据或函数成员Top

相关问题

  • delphi指针赋值问题
  • 指针赋值求教
  • 指针赋值的问题
  • 引用指针
  • 引用和指针??
  • 引用和指针
  • 引用与指针!
  • 指针的引用?
  • 指针与引用
  • 怎样给指针赋值为NULL?

关键词

  • c++
  • 指针
  • 转换
  • 拷贝
  • 安全
  • 赋值
  • 引用
  • 对象
  • 基类
  • 派生类

得分解答快速导航

  • 帖主:LoveCreatesBeauty
  • fireseed
  • fierygnu
  • plainsong

相关链接

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

广告也精彩

反馈

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