Chinaunix首页 | 论坛 | 博客
  • 博客访问: 324131
  • 博文数量: 69
  • 博客积分: 2090
  • 博客等级: 大尉
  • 技术积分: 708
  • 用 户 组: 普通用户
  • 注册时间: 2008-09-23 09:31
文章分类

全部博文(69)

文章存档

2012年(1)

2011年(4)

2010年(48)

2009年(14)

2008年(2)

我的朋友

分类: C/C++

2010-06-12 20:10:28

                   
                                              

虚基类

                                              
                                              
该文基础知识可参见“C++学习笔记(10)——虚基类的作用”
                              
当一个基类被声明为虚基类后,即使它成为了多继承链路上的公共基类,最后的派生类中也只有它的一个备份。例如:
                                
class CBase { };
class CDerive1:virtual public CBase{ };
class CDerive2:virtual public CBase{ };
class CDerive12:public CDerive1,CDerive2{ };
                                      
则在类CDerive12的对象中,仅有类CBase的一个对象数据
                                  
虚基类的特点:
       虚基类构造函数的参数必须由最新派生出来的类负责初始化(即使不是直接继承);
       虚基类的构造函数先于非虚基类的构造函数执行。
                                              
                                              
代码如下:
                                
                                     
/************************************************************************
 * 虚继承构造函数的调用顺序
 ***********************************************************************
*/


#include
<iostream.h>
#include 
<stdio.h>

class A
{
public:
    A(
char *s)
    
{
        cout
<<s<<endl;
    }

    
~A(){cout<<"A destruction!"<<endl;}
}


class B:virtual public A
{
public:
    B(
char *s1,char *s2):A(s1)
    
{
        cout
<<s2<<endl;
    }

    
~B(){cout<<"B destruction!"<<endl;}
}


class C:virtual public A
{
public:
    C(
char *s1,char *s2):A(s1)
    
{
        cout
<<s2<<endl;
    }

    
~C(){cout<<"C destruction!"<<endl;}
}


class D:public B,public C
{
public:
    D(
char *s1,char *s2,char *s3,char *s4):B(s1,s2),C(s1,s3),A(s1)
    
{
        cout
<<s4<<endl;
    }

    
~D(){cout<<"D destruction!"<<endl;}
}
;

int main()
{
    D d(
"A construction!","B construction!","C construction!","D construction!");

    
return 0;
}
阅读(749) | 评论(0) | 转发(0) |
0

上一篇: 浅谈makefile

下一篇:内联函数

给主人留下些什么吧!~~