Chinaunix首页 | 论坛 | 博客
  • 博客访问: 2084454
  • 博文数量: 414
  • 博客积分: 10312
  • 博客等级: 上将
  • 技术积分: 4921
  • 用 户 组: 普通用户
  • 注册时间: 2007-10-31 01:49
文章分类

全部博文(414)

文章存档

2011年(1)

2010年(29)

2009年(82)

2008年(301)

2007年(1)

分类: C/C++

2009-01-17 08:53:01

1.   基类对象指针/引用   =   派生类对象指针/引用;  
        可以将派生类对象指针/引用赋值给基类对象指针/引用。C++要求指针/引用类型  
        与赋给的类型相匹配,这一规则对继承来说是例外,但这种例外是单向的。并  
        且不需要强制转换就可以进行,这种向上的转换是安全的。  
           
   
  2.   派生类对象指针/引用   =   基类对象指针/引用;  
        这种转换不属于上一条中的例外,并且只有通过强制转换才能进行。而且使用这  
        种指针/引用不是安全的。  
   
   
  3.   基类对象   =   派生类对象;    
        派生类对象可以赋值给基类对象,但其中新增的成员将被忽略。赋值时使用基类  
        的赋值操作符。  
   
   
  4.   派生类对象   =   基类对象;  
        只有在派生类定义了适当的转换操作符,赋值操作符时这种赋值才是可能的。   
    
    
  1.   用Is-a定义即可证明其逻辑合理性  
   
  2.   会引起访问越界出错  
   
  3.   “裁剪”  
   
  4.   bitwise拷贝并不适用,因为会破坏派生类对象的vbtr
 
 
1、不是例外,C++里派生类就是基类,所以类型是匹配的。安全。  
  2、dynamic_cast就是为了解决这个问题引入的安全转换。  
  3、对。此外vtable将被修改。  
  4、基本上是设计失败的表现。   
 
在可以用static_cast安全地进行转换时比用dynamic_cast转换更优秀,这说明设计的比较好。用dynamic_cast进行转换通常说明可能会转换失败,或是存在“菱形继承”或“虚继承”。  
          当对象存在vtpr时,隐含生成的拷贝成员也不会是简单的bit-move操作。  
          在没有定义从基类到衍生类的转换时事实上是不会调用拷贝成员的。   
 
 
 
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'  
  */
 
 
就是说向上强制类型转换OK,而相反却不行,因为派生类中可能有新增的数据或函数成员
阅读(1716) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~