#include #include using namespace std; /** * Base class */ class Person { protected: string name; int age; public: // default constructor Person() { name = ""; age = 0; } // constructor with 2 arguments Person(string n, int a) { name = n; age = a; } // display class virtual ostream& print(ostream& out) { out << name << ", " << age; return out; } friend ostream& operator<<(ostream& out, Person& p) { return p.print(out); } }; /** * Inherited class with redefinition of virtual method print */ class Student : public Person { protected: string level; public: Student(string n, int a, string l) : Person(n, a), level(l) { } ostream& print(ostream& out) { Person::print(out); out << ", level = " << level; return out; } }; int main() { Person p("toto", 10); Student s("john", 20, "l3 informatique"); cout << p << endl; cout << s << endl; return 0; }