#include "String.h"

#define USER_DEFINEDx

class Student           
{
  public:
      // Constructor
    Student(const char * login, int age, int year, float GPA);

#ifdef USER_DEFINED
      // Explicit copy constructor
    Student(const Student& student);

      // Explicit assignment operator
    Student& operator=(const Student& student);

      // Destructor
    ~Student(void);
#endif

      // Mutators (settors) are rarely const
    void set_login(const char* login);
    void set_age(int age);
    void set_year(int year);
    void set_GPA(float GPA);

      // Accessor (settors) are usually const
    int get_age(void) const;
    int get_year(void) const;
    float get_GPA(void) const;
    const char *get_login(void) const;

      // Nothing will be modified by display
    void display(void) const;

  private:
    String login_; 
    int age_;
    int year_;
    float GPA_;

    void set_login(const String& login);
    void copy_data(const Student& rhs);
};