一、基本概念
#include <iostream> #include <time.h> using namespace std; class b1 { public: b1(int i) { cout<<"constructing b1 "<<i<<endl; } }; class b2 { public: b2(int j) { cout<<"constructing b2 "<<j<<endl; } }; class b3 { public: b3() { cout<<"constructing b3"<<endl; } }; class c: public b2, public b1, public b3 { public: c(int a, int b, int c, int d):b1(a), memberb2(d), memberb1(c),b2(b) { } private: b1 memberb1; b2 memberb2; b3 memberb3; }; int main() { c obj(1,2,3,4); return 0; }
#include <iostream> #include <time.h> using namespace std; class b1 { public: b1(int i) { cout<<"constructing b1 "<<i<<endl; } ~b1() { cout<<"destructing b1"<<endl; } }; class b2 { public: b2(int j) { cout<<"constructing b2 "<<j<<endl; } ~b2() { cout<<"destructing b2"<<endl; } }; class b3 { public: b3() { cout<<"constructing b3"<<endl; } ~b3() { cout<<"destructing b3"<<endl; } }; class c: public b2, public b1, public b3 { public: c(int a, int b, int c, int d):b1(a), memberb2(d), memberb1(c),b2(b) { } private: b1 memberb1; b2 memberb2; b3 memberb3; }; int main() { c obj(1,2,3,4); return 0; }
#include <iostream> #include <time.h> using namespace std; class b1 { public: int nv; void fun() { cout<<"member of b1 "<<nv<<endl; } }; class b2 { public: int nv; void fun() { cout<<"member of b2 "<<nv<<endl; } }; class d1: public b1, public b2 { public: int nv; void fun() { cout<<"member of d1 "<<nv<<endl; } }; int main() { d1 d1; d1.nv = 1; d1.fun(); d1.b1::nv = 2; d1.b1::fun(); d1.b2::nv = 3; d1.b2::fun(); return 0; }
#include <iostream> #include <time.h> using namespace std; class b0 { public: int nv; void fun() { cout<<"member of b0 "<<nv<<endl; } }; class b1:public b0 { public: int nv1; }; class b2:public b0 { public: int nv2; }; class d1:public b1, public b2 { public: int nvd; void fund() { cout<<"member of d1"<<endl; } }; int main() { d1 d1; d1.b1::nv = 2; d1.b1::fun(); d1.b2::nv = 3; d1.b2::fun(); return 0; }
#include <iostream> #include <time.h> using namespace std; class b0 { public: int nv; void fun() { cout<<"member of b0 "<<nv<<endl; } }; class b1:virtual public b0 { public: int nv1; }; class b2:virtual public b0 { public: int nv2; }; class d1:public b1, public b2 { public: int nvd; void fund() { cout<<"member of d1"<<endl; } }; int main() { d1 d1; d1.nv = 2; d1.fun(); return 0; }
#include <iostream> #include <time.h> using namespace std; class b0 { public: b0(int n) { nv = n; } int nv; void fun() { cout<<"member of b0 "<<nv<<endl; } }; class b1:virtual public b0 { public: b1(int a):b0(a) { } int nv1; }; class b2:virtual public b0 { public: b2(int a):b0(a) { } int nv2; }; class d1:public b1, public b2 { public: d1(int a):b0(a), b1(a), b2(a) { } int nvd; void fund() { cout<<"member of d1"<<endl; } }; int main() { d1 d1(1); d1.nv = 2; d1.fun(); return 0; }
#include <iostream> #include <time.h> using namespace std; class b0 { public: void display() { cout<<"b0::display()"<<endl; } }; class b1:public b0 { public: void display() { cout<<"b1::display()"<<endl; } }; class b2:public b0 { public: void display() { cout<<"b2::display()"<<endl; } }; void fun(b0 *ptr) { ptr->display(); } int main() { b0 b0; b1 b1; b2 b2; fun(&b0); b0 = b1; fun(&b0); b0 = b2; fun(&b0); return 0; }
输出结果为:
b0::display()
b0::display()
b0::display()
通过这种赋值兼容后,每次调用的同名函数都是基类的同名函数,如果想调用派生类的,则需要使用虚函数。
五、总结
如对本文有疑问, 点击进行留言回复!!
一上来就问分布式事务了解吗?还好复习了这份神仙笔记,怼就完了
网友评论