Advertisement
avr39-ripe

ParentChildDemoClasses

Feb 12th, 2020
280
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.80 KB | None | 0 0
  1. #include <iostream>
  2. #include <fstream>
  3. #include <algorithm>
  4. #include <iterator>
  5. #include <string>
  6. #include <vector>
  7.  
  8.  
  9. class Parent
  10. {
  11. protected:
  12.     int id;
  13. public:
  14.     Parent(int val=0) : id{val} {};
  15.     virtual std::ostream& print(std::ostream& out) const
  16.     {
  17.         if (typeid(out) == typeid(std::ofstream))
  18.         {
  19.             std::cout << "File I/O!!!\n";
  20.             return out << 'P' << '\n' << id << '\n';
  21.         }
  22.         return out << "Parent id:" << id << '\n';
  23.     };
  24.  
  25.     virtual std::istream& input(std::istream& in)
  26.     {
  27.         return in >> id;
  28.     }
  29.  
  30.     virtual ~Parent(){};
  31.     friend std::ostream& operator<<(std::ostream& out, const Parent& obj);
  32.     friend std::istream& operator>>(std::istream& in, Parent& obj);
  33. };
  34.  
  35. std::ostream& operator<<(std::ostream& out, const Parent& obj)
  36. {
  37.     return obj.print(out);
  38. };
  39.  
  40. std::istream& operator>>(std::istream& in, Parent& obj)
  41. {
  42.     return obj.input(in);
  43. };
  44.  
  45. class Child : public Parent
  46. {
  47.     std::string name;
  48. public:
  49.     Child(std::string str="Child", int val=0) : Parent{val}, name{str} {};
  50.     virtual std::ostream& print(std::ostream& out) const
  51.     {
  52.         if (typeid(out) == typeid(std::ofstream))
  53.         {
  54.                 std::cout << "File I/O!!!\n";
  55.                 return out << 'C' << '\n' << id << '\n' << name << '\n';
  56.         }
  57.         return out << "Child id:" << id << " name:" << name << '\n';
  58.     };
  59.  
  60.     virtual std::istream& input(std::istream& in)
  61.     {
  62.         return in >> id >> name;
  63.     }
  64.  
  65.     void childWork() {std::cout << "Children " << name << " is working hard!\n"; };
  66.  
  67.     virtual ~Child(){};
  68. };
  69.  
  70.  
  71. class Dereference
  72. {
  73. public:
  74.     template<class T>
  75.     const T& operator()(const T* ptr)
  76.     {
  77.         return *ptr;
  78.     }
  79.  
  80. };
  81.  
  82. /*
  83.     for(auto& object : objects)
  84.     {
  85.         if ( typeid(*object) == typeid(Child))
  86.         {
  87.             std::cout << "Input Child id and name\n";
  88.         }
  89.         else
  90.         {
  91.             std::cout << "Input Parent id\n";
  92.         }
  93.         std::cin >> *object;
  94.     }
  95.  
  96. */
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement