inheritance.cpp 1.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374
  1. #include <iostream>
  2. /**
  3. * c->A->D
  4. * ->B->
  5. */
  6. using namespace std;
  7. //基类
  8. class D
  9. {
  10. public:
  11. D(){cout<<"D()"<<endl;}
  12. ~D(){cout<<"~D()"<<endl;}
  13. void print(){cout<<"print d"<<endl;}
  14. virtual void print_virtual() = 0;//{cout<<"print virtual d"<<endl;}
  15. protected:
  16. int d;
  17. };
  18. class B:public D
  19. {
  20. public:
  21. B(){cout<<"B()"<<endl;}
  22. ~B(){cout<<"~B()"<<endl;}
  23. void print(){cout<<"print b"<<endl;}
  24. virtual void print_virtual(){cout<<"print virtual b"<<endl;}
  25. protected:
  26. int b;
  27. };
  28. class A:public D
  29. {
  30. public:
  31. A(){cout<<"A()"<<endl;}
  32. ~A(){cout<<"~A()"<<endl;}
  33. void print(){cout<<"print a"<<endl;}
  34. virtual void print_virtual(){cout<<"print virtual a"<<endl;}
  35. protected:
  36. int a;
  37. };
  38. class C:public B, public A
  39. {
  40. public:
  41. C(){cout<<"C()"<<endl;}
  42. ~C(){cout<<"~C()"<<endl;}
  43. void print(){cout<<"print c"<<endl;}
  44. virtual void print_virtual(){cout<<"print virtual c"<<endl;}
  45. protected:
  46. int c;
  47. };
  48. void global_print(D& s){
  49. s.print();
  50. s.print_virtual();
  51. }
  52. int main()
  53. {
  54. cout << "Hello World!" << endl;
  55. //D d; //抽象类,含纯虚函数
  56. B b;
  57. A a;
  58. C c; //D, B, A ,C
  59. //cout<<sizeof(d)<<endl;
  60. cout<<sizeof(b)<<endl;
  61. cout<<sizeof(a)<<endl;
  62. cout<<sizeof(c)<<endl;
  63. //global_print(d);
  64. global_print(b);
  65. global_print(a);
  66. // global_print(c); // 多继承,重构二义性
  67. return 0;
  68. }