Advertisement
Eiffel

Exercise 2/26

Feb 26th, 2020
269
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.67 KB | None | 0 0
  1. #include <iostream>
  2. #include <string>
  3. using namespace std;
  4. struct Grades {
  5.     int grade1;
  6.     int grade2;
  7.     int grade3;
  8. };
  9.  
  10. class Student {
  11. public:
  12.     Student(string n = " ", int g1 = 0, int g2 = 0, int g3 = 0); // overloaded
  13.     Student(const Student &obj); // copy constructor
  14.     Student & operator=(const Student &obj); //assignment operator
  15.     friend ostream & operator << (ostream & out, const Student &obj);
  16.     ~Student(); // destructor
  17.  
  18. private:
  19.     string name;
  20.     Grades *ptr;
  21. };
  22.  
  23. // Member functions definitions
  24. Student::Student(string n, int g1, int g2, int g3) {
  25.     cout << "Overloaded constructor." << endl;
  26.  
  27.     // ptr points at a struct called Grades
  28.     name = n;
  29.     ptr = new Grades;
  30.     ptr->grade1 = g1;
  31.     ptr->grade2 = g2;
  32.     ptr->grade3 = g3;
  33.  
  34. }
  35.  
  36. Student::Student(const Student &obj) {
  37.     cout << "Copy constructor." << endl;
  38.     ptr = new Grades;
  39.     ptr->grade1 = obj.ptr->grade1;
  40.     ptr->grade2 = obj.ptr->grade2;
  41.     ptr->grade3 = obj.ptr->grade3;
  42.  
  43. }
  44.  
  45. Student::~Student() {
  46.     cout << "Freeing memory!" << endl;
  47.     delete[] ptr;
  48.     ptr = nullptr;
  49. }
  50.  
  51.  
  52. Student& Student::operator= (const Student &obj) {
  53.     cout << "Assignment operator." << endl;
  54.     if (this != &obj) {
  55.         delete ptr;
  56.         ptr = new Grades;
  57.         ptr->grade1 = obj.ptr->grade1;
  58.         ptr->grade2 = obj.ptr->grade2;
  59.         ptr->grade3 = obj.ptr->grade3;
  60.     }
  61.     return *this;
  62. }
  63. ostream & operator << (ostream & out, const Student & obj) {
  64.     out << obj.name << " ";
  65.     out << obj.ptr->grade1 << " ";
  66.     out << obj.ptr->grade2 << " ";
  67.     out << obj.ptr->grade3 << " " << endl;
  68.     return out;
  69. }
  70.  
  71. // Main function for the program
  72. int main() {
  73.  
  74.     Student s1("BOB", 98, 78, 95);
  75.     cout << s1;
  76.     Student s2;
  77.     s2 = s1;
  78.     Student s3 = s2;
  79.  
  80.  
  81. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement