#ifndef _STUDENT_HPP_ #define _STUDENT_HPP_ #include #include class Student { private: char *name; int aem; public: Student(); Student(const char *name, int aem); Student(const Student& ); ~Student(); char* getName() const; int getAEM() const; void setName(char*); void setAEM(int); friend std::ostream& operator<<(std::ostream& out, const Student & st); bool operator>(const Student& st) const; bool operator<(const Student& st) const; Student& operator=(const Student& st); }; Student::Student(const char *name, int aem) { this->name = new char [strlen(name) + 1]; strcpy(this->name, name); this->aem = aem; std::cerr << "Argu Construct : " << *this << std::endl; } Student::Student(const Student& st) { name = new char [strlen(st.name) + 1]; strcpy(name, st.name); aem = st.aem; std::cerr << "Copy Construct : " << *this << std::endl; } Student::Student() { this->name = nullptr; this->aem = 0; } Student::~Student() { if(name != nullptr) { std::cerr << "Destruct: " << *this << std::endl; delete []name; } } char* Student::getName() const { return name; } int Student::getAEM() const { return aem; } void Student::setName(char* name) { this->name != nullptr; delete this->name; this->name = new char [strlen(name) + 1]; strcpy(this->name, name); } void Student::setAEM(int aem) { this->aem = aem; } Student& Student::operator=(const Student& st) { if(name != nullptr) delete name; name = new char [strlen(st.name) + 1]; strcpy(name, st.name); aem = st.aem; std::cerr << "Copy : " << *this << std::endl; return *this; } std::ostream& operator<<(std::ostream& out, const Student& st) { if(st.name != nullptr) out << st.name << " " << st.aem; return out; } bool Student::operator>(const Student& st) const { if(aem > st.aem) return true; return false; } bool Student::operator<(const Student& st) const { if(aem < st.aem) return true; return false; } #endif