// grades3.cc #include #include using namespace std; class ClassGrades { private: string Name; int* Grades; public: ClassGrades(string inName) { cout << "In constructor for record " << inName << endl; Name = inName; Grades = new int[3]; // assume 3 assignments for (int i=0; i<3; i++) { Grades[i] = 0; } } ~ClassGrades() { cout << "In destructor for record " << Name << endl; if (Grades != NULL) delete [] Grades; } ClassGrades(const ClassGrades& src) { cout << "In Copy Constructor copying from " << src.Name << endl; Name = src.Name; Grades = new int[3]; for (int i=0; i<3; i++) { Grades[i] = src.Grades[i]; } } ClassGrades& operator= (const ClassGrades& src) { cout << "In Copy Assignment Operator" << endl; cout << "Copying record " << src.Name << " into record " << Name << endl; Name = src.Name; if (this != &src && src.Grades != NULL) { if (Grades != NULL) delete[] Grades; Grades = new int[3]; for (int i=0; i<3; i++) { Grades[i] = src.Grades[i]; } } return *this; } int& operator [] (int Index) { if (Index >=0 && Index < 3) { return Grades[Index]; } } ClassGrades operator- (const ClassGrades& ToSubtract) { cout << "Subtracting record " << ToSubtract.Name; cout << " from record " << Name << endl; string NewName; NewName = Name + " - " + ToSubtract.Name; ClassGrades NewClassGrades(NewName); for (int i=0; i<3; i++) { NewClassGrades[i] = Grades[i] - ToSubtract.Grades[i]; } return NewClassGrades; } void PrintGrades() { cout << "Student " << Name << " has grades: "; for (int i=0; i<3; i++) { cout << Grades[i] << " "; } cout << endl; } }; int main() { ClassGrades Student1("John Smith"); Student1[0] = 99; Student1[1] = 85; Student1[2] = 86; Student1.PrintGrades(); ClassGrades Avg("Class Average"); Avg[0] = 70; Avg[1] = 72; Avg[2] = 68; Avg.PrintGrades(); // Compute how far above/below Class Avg were each of Student1's scores ClassGrades StudentvsAvg("Label-will-be-overwritten"); StudentvsAvg = Student1 - Avg; StudentvsAvg.PrintGrades(); }