大胖的部落格

Just a note

  C++博客 :: 首页 :: 新随笔 :: 联系 :: 聚合  :: 管理 ::
  112 随笔 :: 0 文章 :: 3 评论 :: 0 Trackbacks
当一个类被虚拟继承时,基类才叫虚基类。

初始化
在多层的继承关系中,虚基类的初始化是由最终派生类完成的。中间派生类对虚基类构造函数的调用被抑制。
class Base
{
public:
    Base(
int i){cout<<"Base: "<<i<<endl;}
}
;

//virtual inheritance
class Base1: public virtual Base
{
public:
    Base1(
int,int):Base(3){}    //Base(3) not called
}
;


class Derived : public Base1
{
public:
    Derived():Base(
4),Base1(2,3){}    //Base(4) called
}
;
输出:Base: 4

在非虚拟继承时,派生类只能显示初始化其直接基类。
class Base
{
public:
    Base(
int i){cout<<"Base: "<<i<<endl;}
}
;

class Base1: public Base
{
public:
    Base1(
int,int):Base(3){}    
}
;


class Derived : public Base1
{
public:
    Derived():Base1(
2,3){}    //can't call Base() here
}
;

构造函数的调用:
按照继承时基类的声明顺序,依次查找虚基类,调用虚基类构造函数;
虚基类构造完后,依次构造非虚基类;
最后调用派生类构造函数。


 
posted on 2009-06-01 16:48 大胖 阅读(167) 评论(0)  编辑 收藏 引用 所属分类: C++

只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理