fork download
  1. #include <iostream>
  2.  
  3. class Old
  4. {
  5. protected:
  6. long val;
  7. public:
  8. long myVal()
  9. {
  10. return val;
  11. }
  12.  
  13. void myVal(long val)
  14. {
  15. this->val = val;
  16. }
  17. };
  18.  
  19. template<typename T> class In: virtual public Old
  20. {
  21. protected:
  22. T value;
  23.  
  24. public:
  25. void setValue(T val)
  26. {
  27. value = val;
  28. }
  29.  
  30. T getValue()
  31. {
  32. return value;
  33. }
  34. };
  35.  
  36.  
  37. class My: public In<int>, public In<bool>
  38. {
  39.  
  40. };
  41.  
  42. int main(int argc, char **argv)
  43. {
  44. My m;
  45. m.myVal(100);
  46. In<int> iv = m;
  47. std::cout << "start_ils: " << m.In<int>::getValue() << std::endl;
  48. std::cout << "start_vs: "<< iv.getValue() << std::endl;
  49. m.In<int>::setValue(10);
  50. std::cout << "=== old's val ===" << std::endl;
  51. std::cout << "old_vs: "<<iv.myVal() << std::endl;
  52. std::cout << "old_ilsi: " << m.In<int>::myVal() << std::endl;
  53. std::cout << "old_ilsb: " << m.In<bool>::myVal() << std::endl;
  54. std::cout << "=== set_ils ===" << std::endl;
  55. std::cout << "get_ils: " << m.In<int>::getValue() << std::endl;
  56. std::cout << "get_vs: "<< iv.getValue() << std::endl;
  57. iv.setValue(10);
  58. std::cout << "=== set_vs ===" << std::endl;
  59. std::cout << "get_ils: " << m.In<int>::getValue() << std::endl;
  60. std::cout << "get_vs: "<< iv.getValue() << std::endl;
  61. }
Success #stdin #stdout 0s 3140KB
stdin
Standard input is empty
stdout
start_ils: 1
start_vs: 1
=== old's val ===
old_vs: 100
old_ilsi: 100
old_ilsb: 100
=== set_ils ===
get_ils: 10
get_vs: 1
=== set_vs ===
get_ils: 10
get_vs: 10