问题处,我已标记出.谢谢您的执教.非常感谢
class A//基类
{
private :
int a;
public:
A(int t=0)
{
a=t;
cout<<"in A"<<endl;}
void dis()//显示基类的数据成员
{cout<<"a is "<<a<<endl;}
};class B :virtual public A//继承自A,虚继承
{
public:
B(int b):A(b)//构造函数
{cout<<"in B"<<endl;}
};class G : virtual public A//继承自A,虚继承
{
public:
G(int g):A(g)//构造函数
{cout<<"in G"<<endl;}};
class z : public B,public G//类z多重继承自B C
{
public:
z(int z):B(z),G(z){}//????问题????构造函数,此时如何将参数传给基类A???在此处加上'A(z)',就可以实现.这样对吗??加上'A(z)'后此句为:z(int z):B(z),G(z),A(z){}这样可以实现对A的初始化
//请各位指教.为什么用B(z)和G(z)不能对A()初始化.他只是取A构造中的默认值,传给的参数z他不用???
                           

};void main()
{
z z1(7);
z1.dis();
}

解决方案 »

  1.   

    这是c++ 多继的的语法要求的,一定要在孙类中加入祖的初始化,因为如果两个父都传参数的时候就不知道要传谁的了。。这样的继承很容易出现问题。在c++编程也不建议用多继承。有关细的问题你可以看看Effective C++
      

  2.   

    thank you very  much!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!1
      

  3.   

    好象VC和Java都不提倡多继承吧。
      

  4.   

    同意Analyst的意见,即基类A不应该有成员变量,应该只定义接口。