“最晚辈派生”类和虚基初始化

如果虚基类存在一个构造函数, 虚基类的使用并不是很简单。
为了便于理解,引入一个新术语:最晚辈派生类(most-derived)。

见下面代码:

#include < iostream >
using   namespace  std;

class   base
{
protected:
    
int a;
public:
    
base(int aa)           // constructor
    {
        a
=aa;
    }

}
;

class  derivedA:  virtual   public   base
{
protected:
    
int b;
public:
    derivedA(
int aa, int bb):base(aa)  // constructor
    {
        b
=bb;
    }

    
void show()
    
{
        cout
<<a<<endl;
        cout
<<b<<endl;
    }

}
;

class  derivedB:  virtual   public   base
{
protected:
    
int c;
public:
    derivedB(
int aa, int cc):base(13)   // constructor
    {
        c
=cc;
    }

    
void show()
    
{
        cout
<<a<<endl;
        cout
<<c<<endl;
    }


}
;

class  AB: public  derivedA,  public  derivedB
{

public:
    AB(
int aa, int bb, int cc) : derivedA(aa, bb), derivedB(aa, cc), base(33{}  // constructor
   
    
void show()
    
{
        cout
<<a<<endl;
        cout
<<b<<endl;
        cout
<<c<<endl;   
    }

}
;

int  main()
{
    derivedA aa(
12);
    aa.show();  cout
<<endl;

    derivedB bb(
34);
    bb.show();  cout
<<endl;
   
    AB ab(
567);
    ab.show();

    
return 0;
}


输出
1
2

13
4

33
6
7

最晚辈派生类是当前所在的类,当考虑构造函数时它尤其重要。
在前面的例子中,基构造函数里的最晚辈派生类是base;
在derivedA构造函数中,derivedA是最晚辈派生类;
在AB构造函数中, AB是最晚辈派生类。
打算使用一个虚基类时,最晚辈派生类的构造函数的职责是对虚基类进行初始化。
这意味着该类不管离虚基类多远,都有责任对虚基类进行初始化。

参考:  《Thinking in C++》
width="728" scrolling="no" height="90" frameborder="0" align="middle" src="http://download1.csdn.net/down3/20070601/01184120111.htm" marginheight="0" marginwidth="0">
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值