#include<iostream.h>
class A
{
public:
A(const char *s)
{
cout<<s<<endl;
}
~A(){}
};class B:virtual public A {
public:
B(const char *s1,const char *s2):A(s1) //问题一??????????
{
cout<<s2<<endl;
}
};class C:virtual public A
{
public:
C(const char *s1,const char *s2):A(s1)
{
cout<<s2<<endl;
}
};class D:public B,public C //问题二????????????????
{
public:
D(const char *s1,const char *s2,const char *s3,const char *s4):B(s1,s2),C(s1,s3),A(s1)
{
cout<<s4<<endl;
}
};void main()
{
D *ptr=new D("class A","class B","class C","class D");
delete ptr;
}
————————————————————————————————————
问题一:
我知道
class B:public A
{
....
};
是说明类B从类A中派生而来,
B(const char *s1,const char *s2):A(s1)
是什么意思?而且构造函数B()和A()参数个数也不同,请问该如何理解?问题二:
class D:public B,public C
怎么理解以上语句,D类从两个类派生出来吗?该如何理解?————————————————————————
谢谢各位大虾帮忙!
class A
{
public:
A(const char *s)
{
cout<<s<<endl;
}
~A(){}
};class B:virtual public A {
public:
B(const char *s1,const char *s2):A(s1) //问题一??????????
{
cout<<s2<<endl;
}
};class C:virtual public A
{
public:
C(const char *s1,const char *s2):A(s1)
{
cout<<s2<<endl;
}
};class D:public B,public C //问题二????????????????
{
public:
D(const char *s1,const char *s2,const char *s3,const char *s4):B(s1,s2),C(s1,s3),A(s1)
{
cout<<s4<<endl;
}
};void main()
{
D *ptr=new D("class A","class B","class C","class D");
delete ptr;
}
————————————————————————————————————
问题一:
我知道
class B:public A
{
....
};
是说明类B从类A中派生而来,
B(const char *s1,const char *s2):A(s1)
是什么意思?而且构造函数B()和A()参数个数也不同,请问该如何理解?问题二:
class D:public B,public C
怎么理解以上语句,D类从两个类派生出来吗?该如何理解?————————————————————————
谢谢各位大虾帮忙!
解决方案 »
- 有没有办法,用C++编写的ActiveX控件,它的函数参数在C#里显示为数组
- 网络编程之疑问
- 怎么实现运行光盘上的程序,然后光盘弹出后,程序还能继续运行?
- 如何将OnLButtonDown中的鼠标位置坐标映射到某控件上?
- 关于Google Maps,想在CHtmlView的派生视里绘图和显示文字的高难度问题!
- 推荐一本关于算法的通俗易懂的好书
- 怎么得到另外一个程序的托盘图标?
- 新增的类在ClassWizard里为什么看不到
- 一个俺不知道的错误,大家帮俺顶顶
- vc中win32 application 和win32 console applation 有什么区别?谢谢!
- 如何在应用程序中获得鼠标的位置, 不是通过监听控件上的鼠标事件?
- 在建立子对话框过程中,初始显示的时候不想显示其中的部分控件,怎么办?
此段 代码 演示了在 多继承 存在 菱形的 体系 ,
一般这样的代码不常见, 也不推荐 这样的多继承, 编译运行, 演示了 构造函数的调用次序。
多继承一般推荐 多在 接口继承中使用。
这是B的构造函数,构造函数后边加冒号可以对基类或自己的数据成员进行初始化。
该句是用s1的值对类A进行了初始化。
(2)class D:public B,public C
是,当然。
是多重继承,类D是类B和类C的子类。
现在编程尽量不要使用多重继承,容易造成一些语义模糊的现象。
一般只用在纯虚函数(接口)中。
晕...