当前位置:  编程技术>c/c++/嵌入式

C++中virtual继承的深入理解

    来源: 互联网  发布时间:2014-10-16

    本文导语:  今天专门看了一下虚继承的东西,以前都没怎么用过,具体如下:父类:  代码如下:class   CParent { .... }; 继承类的声明比较特别: class   CChild   :   virtual   public   CParent { .... }  请问,这个"virtual"是什么作用及含义? ---...

今天专门看了一下虚继承的东西,以前都没怎么用过,具体如下:
父类: 
代码如下:

class   CParent
{
....
};
继承类的声明比较特别:
class   CChild   :   virtual   public   CParent
{
....


请问,这个"virtual"是什么作用及含义?
---------------------------------------------------------------
表示虚拟继承,和普通继承是C++的两种继承方式。
例如B1、B2   继承A   而C多重继承B1、B2
如果普通继承则C包含两份A的拷贝,分别来自于B1、B2
而虚拟继承则只包含一份A的拷贝
---------------------------------------------------------------
这个"virtual"是什么作用及含义?
证明这个CParent是CChild   的虚基类
虚基类   的   作用
虚基类是指:class   SubClass   :   virtual   public   BaseClass   中以virtual声明的基类!!由于C++支持多重继承,所以对于一个派生类中有几个直接父类,而几个直接父类中有几个可能分别继承自某一个基类(就是父类的父类),这样在构造最终派生类时,会出现最终派生类中含有多个同一个基类的情况,就会产生二义性的问题(不知道该调用哪个基类的成员变量和函数),为解决此问题,需要使用虚基类,即只对此基类生成一块内存区域,这样最终派生类中就只会含有一个基类了
典型的需要用虚基类的情况如下:
                        A
                      /  
                    B       C
                         /
                        D
其中D继承自BC,BC分别继承自A,所以A要分别被BC虚拟继承
程序嘛………… 
代码如下:

class   A   {
    public:
        void   printA()   {cout        CA
IUnknown        ->            IY
通常将一种类型的指针转换成另外一种类型的指针并不会改变指针的值,但为了支持多重继承,在某些情况下,C++必须改变类指针的值。COM中的多接口继承就是如此,此时
CA* pA = new CA();
IY * pc = pA;          会被编译器改成   IY * pC = (char * )pA + deltaIY(一个偏移量);
基类的析构函数也应该定义成virtual才会在继承类的实例析构时被调用以清除基类用到的资源。

    
 
 
 
本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • 深入理解C# abstract和virtual关键字
  • 我在我的win2000上装了一个virtual pc在virtual pc 上装redhat7.2 但不知道为什么,就是进不了图形界面
  • 有人在WINXP环境下用过VIRTUAL PC吗?
  • Eurotux Virtualization Manager
  • 为什么我的virtual pc 特别慢
  • 小问题:Virtual PC与主机共享目录不需网络的方法
  • 虚拟打印机 Virtual Image Printer
  • jQuery Virtual DOM Events Plugin
  • 三维真实世界仿真 Virtual Universe
  • 求Virtual PC 5.0!!
  • error: ‘CLOCK_VIRTUAL’ was not declared in this scope
  • Linux视频解决方案 Heroine Virtual
  • Open Virtual Machine Tools
  • 那里有Virtual PC v5.1.370软件下载?D版市面上有吗?(高分)
  • virtual pc 安装 redhat 9.0 问题
  • Virtual PC如何改变窗口大小?
  • 在virtual machine 上装了linux后,屏幕嘿嘿的,是怎么了 ?
  • 使用Virtual PC安装Linux AS4时出现问题?
  • virtual box 里怎么装软件啊
  • 请教不需要网络使虚拟机Virtual PC与主机共享的方法
  • could not load the Java virtual machine.program will exit!


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3