fork download
  1. #include <string>
  2. #include <iostream>
  3. #include <memory>
  4. #include <cstdio>
  5. #include <vector>
  6.  
  7. #define counted_ptr std::shared_ptr
  8.  
  9. namespace OOP {
  10.  
  11. class BaseClass
  12. {
  13. public:
  14. std::string name;
  15.  
  16. BaseClass(std::string arg) {name=arg;}
  17.  
  18. friend std::ostream & operator<<(std::ostream &os, const BaseClass& ref)
  19. {
  20. os << ref.name << "\n"; //gives ! ???
  21. return os;
  22. }
  23.  
  24. };
  25.  
  26.  
  27.  
  28. class array
  29. {
  30. public:
  31. std::vector <counted_ptr<OOP::BaseClass> > myvec;
  32.  
  33. void push_back( OOP::BaseClass *arg)
  34. {
  35. counted_ptr< OOP::BaseClass> tmp(arg);
  36. myvec.push_back(tmp);
  37. myvec.push_back(tmp);
  38. }
  39.  
  40. };
  41.  
  42.  
  43.  
  44. void print_tab_el(array arr)
  45. {
  46.  
  47. std::vector <counted_ptr<OOP::BaseClass> >::iterator it;
  48.  
  49. for (it=arr.myvec.begin();it!=arr.myvec.end();++it){
  50. std::cout<<**it;
  51. }
  52.  
  53. }
  54.  
  55. };
  56.  
  57. int main()
  58. {
  59. OOP::array tab;
  60.  
  61. for(int i = 0; i < rand()%10 + 1; ++i)
  62. {
  63. tab.push_back(new OOP::BaseClass("OOP::BaseClass 1"));
  64. tab.push_back(new OOP::BaseClass("OOP::BaseClass 2"));
  65. tab.push_back(new OOP::BaseClass("OOP::BaseClass 3"));
  66. }
  67.  
  68. OOP::print_tab_el(tab); //prints tab using operator<< for its elements.
  69. }
  70.  
Success #stdin #stdout 0s 3432KB
stdin
Standard input is empty
stdout
OOP::BaseClass 1
OOP::BaseClass 1
OOP::BaseClass 2
OOP::BaseClass 2
OOP::BaseClass 3
OOP::BaseClass 3
OOP::BaseClass 1
OOP::BaseClass 1
OOP::BaseClass 2
OOP::BaseClass 2
OOP::BaseClass 3
OOP::BaseClass 3
OOP::BaseClass 1
OOP::BaseClass 1
OOP::BaseClass 2
OOP::BaseClass 2
OOP::BaseClass 3
OOP::BaseClass 3
OOP::BaseClass 1
OOP::BaseClass 1
OOP::BaseClass 2
OOP::BaseClass 2
OOP::BaseClass 3
OOP::BaseClass 3