第七章派生与继承2
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
第七章派生与继承2
/*7.4多继承与虚基类
7.4.1多继承中的二义性问题
解决方式
1<对象名>.<基类名>::<成员名> //数据成员
<对象名>.<基类名>::<成员名>(<参数名>) //成员函数
*/
/*#include
using namespace std;
class Base1
{
public:
int date;
void fun(){cout<<"Member of Base1"<<";base1="< class Base2 { public: int date; void fun(){cout<<"Member of Base2"<<";base2="< class Derived:public Base1,public Base2 { public: int date; void fun(){cout<<"Member of Derived"<<";Derived="< int main() { Derived obj; obj.date=1; obj.fun(); obj.Base1::date=2; obj.Base1::fun(); obj.Base2::date=3; obj.Base2::fun(); return 0; }*/ /*#include using namespace std; class Base { public: int date; void fun(){cout<<"This is Base"<<"; base="< }; class Derived11:public Base { public: int date; void fun(){cout<<"This is Derived11"<<"; Derived11="< }; class Derived12:public Base { public: int date; void fun(){cout<<"This is Derived12"<<"; Derived12="< }; class Derived2:public Derived11,public Derived12 { public: int date; void fun(){cout<<"This is Derived2"<<"; Derived2="< }; int main() { Derived2 obj; obj.date=1; obj.fun(); //obj.Base::date=2; //obj.Base::fun(); obj.Derived11::date=3; obj.Derived11::fun(); obj.Derived12::date=4; obj.Derived12::fun(); return 0;}*/ /*7.4.2虚基类的定义 虚基类格式: class<类名>:virtual<继承方式><基类名> virtual与继承方式的位置无关, 但是必须位于虚基类之前,切只对紧后面的基类名起作用。 7.4.3虚基类的构造函数 由于派生类的对象中只有一个虚基类对象, 所以在建立一个派生类的对象时, 为保证虚基类对象只被初始化一次。这个虚基类构造函数只能被调用一次,当在构造函数的初始化列表中同时出现对虚基类和非虚基类构造函数的调用时虚基类的构造函数先于非基类的构造函数被调用; */ /* #include using namespace std; class Base {public: Base(char i){cout<<"Base'scons"< ~Base(){cout<<"Base'sdes."< private: // char c; }; class Derived11:virtual public Base { public: Derived11(char i,char j):Base(i){cout<<"Derived11's cons"< private: //char b; }; class Derived12:virtual public Base { public: Derived12(char i,char j):Base(i){cout<<"Derived12's cons"< private: //char f; }; class Derived2:public Derived11,public Derived12 { public: Derived2(char i,char j,char k,char l,char m,char n) :Derived12(k,l),Derived11(i,j),Base(i),aa(m) {cout<<"Derived2's cons"< ~Derived2(){cout<<"Derived2's des."< private: Base aa; }; int main() { Derived2 obj('a','b','c','d','e','f'); return 0; }*/ /*7.5子类型关系 1.子类型关系可以传递但不可逆, 公有继承可以实现子类型关系,通过公有继承, 派生类得到了基类的除了构造函数析构函数之外的所有成员。 所以派生类对象就可以作为基类的对象使用,