标题:虚基类的问题
只看楼主
chen3bing
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:507
专家分:104
注 册:2008-11-12
结帖率:91.22%
已结贴  问题点数:10 回复次数:3 
虚基类的问题
书上一个程序:

#include<iostream>
//
using namespace std;
class B0{
      
    public:
       int nV0;
      void fun(){cout<<"Member of B0"<<endl;}
      B0(int n){nV0=n;cout<<"B0 "<<nV0<<endl;}
    //private:
      
};
class B1: virtual public B0{
       int nV1;
      public:
        B1(int a):B0(a){nV1=a;cout<<"B1 "<<nV1<<endl;}   
             //void fun(){cout<<"Member of B1"<<endl;}
};
class B2:virtual public B0{
         int nV2;
      public:
          B2(int a):B0(a){nV2=a;cout<<"B2 "<<nV2<<endl;}   
            // void fun(){cout<<"Member of B2"<<endl;}
};
class B3{
       int nV3;
    public:
      
      
      B3(int a){nV3=a;cout<<"B3 "<<nV3<<endl;}
    //private:
      
};
class D1: public B1,public B2,public B3{
         int nVd;
         B3 b3;
         B2 b2;
      public:
            
             void fun(){cout<<"Member of D1"<<endl;}
             D1(int a):B0(a),B1(a+1),B2(a+2),b3(a+3),B3(a+4),b2(a+5){}
            
};

int main()
{D1 d1(3);
 
 getchar();
 
}
运行结果:
B0 3
B1 4
B2 5
B3 7
B3 6
B0 8          //请问这一行是怎么回事?
B2 8

搜索更多相关主题的帖子: 基类 
2010-06-19 19:34
cnfarer
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:179
帖 子:3330
专家分:21157
注 册:2010-1-19
得分:5 
b2(a+5)的结果得到两行

★★★★★为人民服务★★★★★
2010-06-19 21:36
chen3bing
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:507
专家分:104
注 册:2008-11-12
得分:0 
多谢斑竹!
不过我还是不懂,b2(a+5)为什么得到两行?
而b3(a+3)只得到一行?
请不吝赐教!
2010-06-20 18:43
pbreak
Rank: 7Rank: 7Rank: 7
等 级:黑侠
威 望:1
帖 子:83
专家分:558
注 册:2007-5-10
得分:5 
因为b2在构造的时候继承了B0的构造函数,而b3没有。
2010-06-21 09:44



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-310673-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.016163 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved