fork download
  1. #include <string>
  2. #include <iostream>
  3.  
  4. using namespace std;
  5.  
  6. class C1 {
  7. protected:
  8. int i;
  9. public:
  10. int getI() const { return i; }
  11. void setI(int i_) { i = i_; }
  12. };
  13.  
  14. class C2 {
  15. protected:
  16. string s;
  17. public:
  18. string getS() const { return s; }
  19. void setS(string s_) { s = s_; }
  20. };
  21.  
  22. class C3 {
  23. protected:
  24. float f;
  25. public:
  26. float getF() const { return f; }
  27. void setF(float f_) { f = f_; }
  28. };
  29.  
  30. class C12 : public virtual C1, public virtual C2
  31. {
  32. };
  33.  
  34. class C23 : public virtual C2, public virtual C3
  35. {
  36. };
  37.  
  38. class C123 : public virtual C1, public virtual C12, public virtual C23
  39. {
  40. };
  41.  
  42.  
  43. void f1(C1& c1)
  44. {
  45. cout << "f1:\n";
  46. cout << " getI: " << c1.getI() << endl;
  47. }
  48.  
  49. void f2(C12& c12)
  50. {
  51. cout << "f2:\n";
  52. cout << " getI: " << c12.getI() << endl;
  53. cout << " getS: " << c12.getS() << endl;
  54. }
  55.  
  56. void f3(C23& c23)
  57. {
  58. cout << "f3:\n";
  59. cout << " getS: " << c23.getS() << endl;
  60. cout << " getF: " << c23.getF() << endl;
  61. }
  62.  
  63. void test()
  64. {
  65. C1 c1;
  66. c1.setI(1);
  67. f1(c1);
  68.  
  69. cout << "\n===== " << endl;
  70.  
  71. C12 c12;
  72. c12.setI(12);
  73. c12.setS("str12");
  74. f1(c12);
  75. f2(c12);
  76.  
  77. cout << "\n===== " << endl;
  78.  
  79. C123 c123;
  80. c123.setI(123);
  81. c123.setF(1.23f);
  82. c123.setS("str123");
  83. f1(c123);
  84. f2(c123);
  85. f3(c123);
  86.  
  87. cout << "\n===== " << endl;
  88. }
  89.  
  90. int main()
  91. {
  92. test();
  93. }
  94.  
Success #stdin #stdout 0s 15240KB
stdin
Standard input is empty
stdout
f1:
  getI: 1

===== 
f1:
  getI: 12
f2:
  getI: 12
  getS: str12

===== 
f1:
  getI: 123
f2:
  getI: 123
  getS: str123
f3:
  getS: str123
  getF: 1.23

=====