多重继承重名成员变量问题
各位大虾:
下面是我的程序,书上说可以这样写的,可是问题2处有个错误
#include "iostream.h"
class A {
public: int ID;
A(){ID=0;}
};
class B: public A {
public: int ID;
B(){ID=1;}
};
class C: public A {
public: int ID;
C(){ID=2;}
};
class D:public B,public C {
public: int ID;
D(){ID=3;}
/*public: //int ID;
D(){B::ID=3;}*/ //问题1
};
void main()
{
A a;
cout<<"A.ID="<<a.ID<<endl;
B b,*p;
cout<<"B.ID="<<b.ID<<endl;
C c;
cout<<"C.ID="<<c.ID<<endl;
cout<<"C.A.Id="<<c.A::ID<<endl;
D d;
// cout<<"D.C.Id="<<d.C::ID<<endl;
cout<<"D.C.A.Id="<<d.C.A::ID<<endl; //问题2
/* p=&d;
int k=p->A::ID;
cout<<"D.C.A.Id="<<k<<endl;*/ //问题3
}
类D中的ID有多个来源,但是书上说可以用d.C.A::ID来访问,可是我试了不行,是为什么?谢谢.
[解决办法]
问题1: 参数相同的构造函数定义了两次,因此出错,只要改一下其中一个构造函数的参数即可
问题2: d.C.A::ID 修改为d.C::A::ID 或者是d.A::ID 即可
问题3: 运行没有问题啊!
[解决办法]
lz看什么书 还在搞iostream.h
赶快换一个新点的书籍吧.
[解决办法]
哪本书这么晕啊...
你这个继承都出现菱形继承了.
class B:virtual public A
class C:virtual public A
[解决办法]
知道怎么解决菱形继承的问题吗?
查查