fork download
  1. #include <iostream>
  2. using namespace std;
  3.  
  4. class B1 {
  5. public:
  6. virtual void m1() {
  7. cout << "B1::m1\n";
  8. }
  9. };
  10.  
  11. class B2 {
  12. public:
  13. virtual void m2() = 0;
  14. };
  15.  
  16. class I : public B1, public B2 {
  17. public:
  18. virtual void m2() = 0;
  19. };
  20.  
  21. class D1 : public I {
  22. public:
  23. virtual void m2() {
  24. cout << "D1::m2\n";
  25. }
  26.  
  27. };
  28.  
  29. class D2 : public I {
  30. public:
  31. virtual void m2() {
  32. cout << "D2::m2\n";
  33. }
  34.  
  35. };
  36.  
  37. class Client {
  38. public:
  39. Client() {
  40. optionD1 = new D1();
  41. optionD2 = new D2();
  42. }
  43. ~Client() {
  44. delete optionD1;
  45. delete optionD2;
  46. }
  47. void m3() {
  48. optionD1->m1();
  49. optionD1->m2();
  50. optionD2->m1();
  51. optionD2->m2();
  52. }
  53. private:
  54. I *optionD1;
  55. I *optionD2;
  56. };
  57.  
  58. int main() {
  59. Client c;
  60. c.m3();
  61. return 0;
  62. }
Success #stdin #stdout 0s 3428KB
stdin
Standard input is empty
stdout
B1::m1
D1::m2
B1::m1
D2::m2