M2103-TP9-EXO-5-Corrigé

    class System;

    class User
    {
        string   myName;
        System * mySystem;
        vector <PrivateMessage>    mySentMessages;
        vector <PrivateMessager *> myRecievedMessages;
        vector <User *>            myFriends;

      public :
        User (const string & name, System * system = NULL) : myName (name), mySystem (system)
        {
            mySentMessages.reserve (20);
        }
        void addFriend (User * aFriend)
        {
           myFriends.push_back (aFriend);

        } // addFriend()

        const string & getName (void) const { return myName; }

        User * getFriend (unsigned i) const { return myFriends [i]; }

        const PrivateMessage & getSentMessage (unsigned i) const { return mySentMessages [i]; }

        const PrivateMessage * getRecievedMessage (unsigned i) const { return myRecievedMessages [i]; }

        System * getSystem (void) const { return mySystem; }

        unsigned getNbFriends        (void) const { return myFriends.size (); }

        unsigned getNbSentMessages   (void) const { return mySentMessages.size (); }

        unsigned getNbRecievedMessages (void) const { return myRecievedMessages.size ();  }

        void sendMessage (const PrivateMessage * message)
        {
            myRecievedMessages.push_back (message);

        } // sendMessage()

        void addMessage (const PrivateMessage & message)
        {
            mySentMessages.push_back (message);
        }

    }; // User