C++继承性和多态性(六)
5.多重继承:
其中,<
派生类构造函数的调用顺序:
①基类构造函数
②子对象成员类的构造函数(如果有子对象成员的话)
③派生类构造函数
派生类的析构函数:
析构函数也不能被继承,因而当派生类对象消亡调用派生类的析构函数时,基类的析构函数也将同时被调用。
①派生类析构函数
②子对象成员类的析构函数(如果有子对象成员的话)
③基类析构函数
#include< iostream >
#include< string >
using namespace std;
class Teacher
{public:
};
class Student
{ protected:
};
class Graduate:public Teacher,public Student
{
protected:
float wage;
public:
Graduate (string nam,int a,string t, char s,float sc,float w):Teacher(nam,a,t),Student(nam,s,sc),wage(w){}
void show();
};
void Graduate::show()
{
cout<<"age:"<<age<<endl;
cout<<"title:"<<title<<endl;
cout<<"sex:"<<sex<<endl;
cout<<"score:"<<score<<endl;
cout<<"wage:"<<wage<<endl;
}
int main()
{
Graduate grd1("Wang-li",24,"assistant",'f',89.5,1234.5);
grd1.show();
return 0;
}
多重继承引起的二义性问题:
class A
{ public:
}
class B
{ public:
}
class C:public A,public B
{ public:
}
intmain()
{ C c1;
}
intmain()
{ C c1;
}
⑵ 两个基类和派生类都有同名成员。
class
{ public:
}
class
{ public:
}
class
{ public:
}
int
{ C c1;
}
#include< iostream >
using namespace std;
class N
{
public:
int a;
void display()
{
cout<<"A::a="<<a<<endl;
}
};
class A :public N
{ public:
};
class B:public N
{ public:
};
class C :public A,public B
{ public:
};
void C::show()
{
}
int main()
{
C c1;
c1.A::a=3;
c1.A::display();
c1.show();
}
虚基类:
class A
{ ……};
//声明类B是类A的公有派生类,A是B的虚基类
class B :virtualpublic A
{ ……};
//声明类C是类A的公有派生类,A是C的虚基类
class C :virtualpublic A
{ ……};
!!!注意:虚基类并不是在声明基类时声明的,而是在声明派生类,指定继承方式时声明的。
在派生类B和C做了上面的声明后,派生类D中的成员如下图:
!!!注意: