Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <string>
- using namespace std;
- struct Grades {
- int grade1;
- int grade2;
- int grade3;
- };
- class Student {
- public:
- Student(string n = " ", int g1 = 0, int g2 = 0, int g3 = 0); // overloaded
- Student(const Student &obj); // copy constructor
- Student & operator=(const Student &obj); //assignment operator
- friend ostream & operator << (ostream & out, const Student &obj);
- ~Student(); // destructor
- private:
- string name;
- Grades *ptr;
- };
- // Member functions definitions
- Student::Student(string n, int g1, int g2, int g3) {
- cout << "Overloaded constructor." << endl;
- // ptr points at a struct called Grades
- name = n;
- ptr = new Grades;
- ptr->grade1 = g1;
- ptr->grade2 = g2;
- ptr->grade3 = g3;
- }
- Student::Student(const Student &obj) {
- cout << "Copy constructor." << endl;
- ptr = new Grades;
- ptr->grade1 = obj.ptr->grade1;
- ptr->grade2 = obj.ptr->grade2;
- ptr->grade3 = obj.ptr->grade3;
- }
- Student::~Student() {
- cout << "Freeing memory!" << endl;
- delete[] ptr;
- ptr = nullptr;
- }
- Student& Student::operator= (const Student &obj) {
- cout << "Assignment operator." << endl;
- if (this != &obj) {
- delete ptr;
- ptr = new Grades;
- ptr->grade1 = obj.ptr->grade1;
- ptr->grade2 = obj.ptr->grade2;
- ptr->grade3 = obj.ptr->grade3;
- }
- return *this;
- }
- ostream & operator << (ostream & out, const Student & obj) {
- out << obj.name << " ";
- out << obj.ptr->grade1 << " ";
- out << obj.ptr->grade2 << " ";
- out << obj.ptr->grade3 << " " << endl;
- return out;
- }
- // Main function for the program
- int main() {
- Student s1("BOB", 98, 78, 95);
- cout << s1;
- Student s2;
- s2 = s1;
- Student s3 = s2;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement