上一篇虚继承举例:http://10638473.blog.51cto.com/10628473/1964414


本文将A类中的show()函数前加上virtual关键字。

//多重继承#include<iostream>usingnamespacestd;classA{public:inta;A(inta=0):a(a){cout<<"A基类A::A()"<<endl;}~A(){cout<<"A基类A::~A()"<<endl;}virtualvoidshow(){cout<<"A基类A::a="<<a<<endl;}};classB:virtualpublicA{protected:intb;public:B(inta=0,intb=0):A(a),b(b){cout<<"B子类B:B()"<<endl;}~B(){cout<<"B子类B:~B()"<<endl;}voidshow(){cout<<"B子类B::b="<<b<<endl;}};classC:virtualpublicA{protected:intc;public:C(inta=0,intc=0):A(a),c(c){cout<<"C子类C::C()"<<endl;}~C(){cout<<"C子类C::~C()"<<endl;}voidshow(){cout<<"C子类C::c="<<c<<endl;}};classD:publicB,publicC{protected:intd;public:D(inta=0,intb=0,intc=0,intd=0):d(d),B(a,b),C(a,c){cout<<"D孙子类D::D()"<<endl;}~D(){cout<<"D孙子类D::~D()"<<endl;}voidshow(){cout<<"D孙子类D::c="<<d<<endl;}};voidDisplay(A*p){p->show();}intmain(intargc,char*argv[]){Aa(1);Bb(2,3);Cc(4,5);Dd(6,7,8,9);A*p;p=&a;p->show();p=&b;p->show();p=&c;p->show();B*q;q=&d;q->show();return0;}


可以和上一篇对比一下结果。