Overloading IO Stream

#include <iostream>
#include <string>

class Person {
private:
    std::string name;
    int age;

public:
    Person() : name(""), age(0) {}

    Person(std::string name, int age) : name(name), age(age) {}

    friend std::ostream &operator<<(std::ostream &out, const Person &person) {
        out << "Name: " << person.name << ", Age: " << person.age;
        return out;
    }

    friend std::istream &operator>>(std::istream &in, Person &person) {
        std::cout << "Enter name: ";
        in >> person.name;
        std::cout << "Enter age: ";
        in >> person.age;
        return in;
    }
};

int main() {
    Person person;

    std::cout << "Enter person details:\n";
    std::cin >> person;

    std::cout << "Person details: " << person << "\n";

    return 0;
}