fork download
  1. #include <iostream>
  2.  
  3. struct Manoscritto
  4. {
  5. virtual ~Manoscritto() {}
  6.  
  7. // ...
  8.  
  9. virtual std::ostream& memorizza_dati( std::ostream& stm ) const // 1
  10. {
  11. std::cout << "memorizza_dati for Manoscritto" ;
  12. // TODO: replace the above with writing out the actual stuff
  13.  
  14. return stm ;
  15. }
  16.  
  17. // ...
  18. };
  19.  
  20. std::ostream& operator << ( std::ostream& stm, const Manoscritto& m ) // 2
  21. { return m.memorizza_dati(stm) ; }
  22.  
  23. struct Lettera : public Manoscritto
  24. {
  25. // ...
  26.  
  27. virtual std::ostream& memorizza_dati( std::ostream& stm ) const override // 3
  28. {
  29. // call base class function if required
  30. // Manoscritto::print(stm) ;
  31.  
  32. std::cout << "memorizza_dati for Lettera" ;
  33. // TODO: replace the above with writing out added stuff
  34.  
  35. return stm ;
  36. }
  37.  
  38. // ...
  39. };
  40.  
  41. int main()
  42. {
  43. Manoscritto m1, m2 ;
  44. Lettera l1, l2, l3 ;
  45.  
  46. Manoscritto* Elenco[] = { &m1, &l1, &l2, &m2, &l3 } ;
  47.  
  48. for( Manoscritto* p : Elenco ) std::cout << *p << '\n' ;
  49.  
  50. std::cout << '\n' ;
  51.  
  52. // or:
  53. for( Manoscritto* p : Elenco ) p->memorizza_dati(std::cout) << '\n' ;
  54. }
  55.  
Success #stdin #stdout 0s 2896KB
stdin
Standard input is empty
stdout
memorizza_dati for Manoscritto
memorizza_dati for Lettera
memorizza_dati for Lettera
memorizza_dati for Manoscritto
memorizza_dati for Lettera

memorizza_dati for Manoscritto
memorizza_dati for Lettera
memorizza_dati for Lettera
memorizza_dati for Manoscritto
memorizza_dati for Lettera