Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <fstream>
- #include <string>
- #include <chrono>
- class Parent
- {
- protected:
- int id;
- public:
- Parent(int val = 0) : id{ val } {};
- virtual std::ostream& print(std::ostream& out)
- {
- if (typeid(out) == typeid(std::ofstream))
- {
- std::cout << "File I/O!!!\n";
- return out << 'P' << '\n' << id << '\n';
- }
- return out << "Parent id:" << id << '\n';
- };
- virtual std::istream& input(std::istream& in)
- {
- return in >> id;
- }
- virtual ~Parent() {};
- friend std::ostream& operator<<(std::ostream& out, Parent& obj);
- friend std::istream& operator>>(std::istream& in, Parent& obj);
- };
- std::ostream& operator<<(std::ostream& out, Parent& obj)
- {
- return obj.print(out);
- };
- std::istream& operator>>(std::istream& in, Parent& obj)
- {
- return obj.input(in);
- };
- class Child : public Parent
- {
- std::string name;
- public:
- Child(std::string str = "Child", int val = 0) : Parent{ val }, name{ str } {};
- virtual std::ostream& print(std::ostream& out)
- {
- if (typeid(out) == typeid(std::ofstream))
- {
- std::cout << "File I/O!!!\n";
- return out << 'C' << '\n' << id << '\n' << name << '\n';
- }
- return out << "Child id:" << id << " name:" << name << '\n';
- };
- virtual std::istream& input(std::istream& in)
- {
- return in >> id >> name;
- }
- void childWork() { std::cout << "Children " << name << " is working hard!\n"; };
- virtual ~Child() {};
- };
- int main()
- {
- srand(time(0));
- Parent* objects[4];
- for (auto& object : objects)
- {
- object = (rand() % 2 ? new Parent : new Child);
- }
- for (auto& object : objects)
- {
- if (typeid(*object) == typeid(Child))
- {
- std::cout << "Input Child id and name\n";
- }
- else
- {
- std::cout << "Input Parent id\n";
- }
- std::cin >> *object;
- }
- std::ofstream outf{ "file.txt" };
- if (!outf.is_open())
- {
- std::cout << "Cannot create file! Exit now!\n";
- }
- for (auto& object : objects)
- {
- std::cout << *object;
- outf << *object;
- delete object;
- }
- outf.close();
- std::cout << "Now read file!\n";
- char buf[50];
- std::ifstream inf{ "file.txt" };
- if (!inf.is_open())
- {
- std::cout << "Cannot open file! Exit now!\n";
- }
- Parent fParent;
- Child fChild;
- std::string str;
- str.reserve(50);
- while (!inf.eof())
- {
- getline(inf, str);
- if (str == "P")
- {
- std::cout << "Got Parent!\n";
- inf >> fParent;
- std::cout << fParent << '\n';
- }
- if (str == "C")
- {
- std::cout << "Got Child!\n";
- inf >> fChild;
- std::cout << fChild << '\n';
- }
- }
- inf.close();
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement