// "New" means new compared to previous level
#include <iostream>
using namespace std;
class SubstituteTeacher {
public:
SubstituteTeacher();
~SubstituteTeacher();
SubstituteTeacher& operator=(const SubstituteTeacher& objToCopy);
// New: grade pointer member in SubstituteTeacher
void SetSubjectAndGrade(string setSubject, int setGrade) {
*grade = setGrade;
*subject = setSubject;
}
void Print();
private:
int* grade;
string* subject;
};
SubstituteTeacher::SubstituteTeacher() {
subject = new string;
*subject = "none";
grade = new int;
*grade = 0;
}
SubstituteTeacher::~SubstituteTeacher() {
delete grade;
delete subject;
}
// New: assignment operator also copies grade member
SubstituteTeacher& SubstituteTeacher::operator=(const SubstituteTeacher& objToCopy) {
if (this != &objToCopy) {
delete subject;
subject = new string;
*subject = *(objToCopy.subject);
delete grade;
grade = new int;
*grade = *(objToCopy.grade);
}
return *this;
}
// New: Print function
void SubstituteTeacher::Print() {
cout << *grade << ": " << *subject << endl;
}
int main() {
SubstituteTeacher msWong;
SubstituteTeacher mrPark;
SubstituteTeacher mrDorf;
msWong.SetSubjectAndGrade("Math", 1);
mrPark.SetSubjectAndGrade("History", 5);
mrDorf.SetSubjectAndGrade("Art", 3);
mrPark = msWong;
msWong = mrDorf;
mrPark.Print();
msWong.Print();
return 0;
}
Ly8gIk5ldyIgbWVhbnMgbmV3IGNvbXBhcmVkIHRvIHByZXZpb3VzIGxldmVsCiNpbmNsdWRlIDxpb3N0cmVhbT4KdXNpbmcgbmFtZXNwYWNlIHN0ZDsKCmNsYXNzIFN1YnN0aXR1dGVUZWFjaGVyIHsKICAgcHVibGljOgogICAgICBTdWJzdGl0dXRlVGVhY2hlcigpOwogICAgICB+U3Vic3RpdHV0ZVRlYWNoZXIoKTsKICAgICAgU3Vic3RpdHV0ZVRlYWNoZXImIG9wZXJhdG9yPShjb25zdCBTdWJzdGl0dXRlVGVhY2hlciYgb2JqVG9Db3B5KTsKCiAgICAgIC8vIE5ldzogZ3JhZGUgcG9pbnRlciBtZW1iZXIgaW4gU3Vic3RpdHV0ZVRlYWNoZXIKICAgICAgdm9pZCBTZXRTdWJqZWN0QW5kR3JhZGUoc3RyaW5nIHNldFN1YmplY3QsIGludCBzZXRHcmFkZSkgewogICAgICAgICAqZ3JhZGUgPSBzZXRHcmFkZTsKICAgICAgICAgKnN1YmplY3QgPSBzZXRTdWJqZWN0OwogICAgICB9CgogICAgICB2b2lkIFByaW50KCk7CiAgIHByaXZhdGU6CiAgICAgIGludCogZ3JhZGU7CiAgICAgIHN0cmluZyogc3ViamVjdDsKfTsKClN1YnN0aXR1dGVUZWFjaGVyOjpTdWJzdGl0dXRlVGVhY2hlcigpIHsKICAgc3ViamVjdCA9IG5ldyBzdHJpbmc7CiAgICpzdWJqZWN0ID0gIm5vbmUiOwogICBncmFkZSA9IG5ldyBpbnQ7CiAgICpncmFkZSA9IDA7Cn0KClN1YnN0aXR1dGVUZWFjaGVyOjp+U3Vic3RpdHV0ZVRlYWNoZXIoKSB7CiAgIGRlbGV0ZSBncmFkZTsKICAgZGVsZXRlIHN1YmplY3Q7Cn0KCi8vIE5ldzogYXNzaWdubWVudCBvcGVyYXRvciBhbHNvIGNvcGllcyBncmFkZSBtZW1iZXIKU3Vic3RpdHV0ZVRlYWNoZXImIFN1YnN0aXR1dGVUZWFjaGVyOjpvcGVyYXRvcj0oY29uc3QgU3Vic3RpdHV0ZVRlYWNoZXImIG9ialRvQ29weSkgewogICBpZiAodGhpcyAhPSAmb2JqVG9Db3B5KSB7CiAgICAgIGRlbGV0ZSBzdWJqZWN0OwogICAgICBzdWJqZWN0ID0gbmV3IHN0cmluZzsKICAgICAgKnN1YmplY3QgPSAqKG9ialRvQ29weS5zdWJqZWN0KTsKCiAgICAgIGRlbGV0ZSBncmFkZTsKICAgICAgZ3JhZGUgPSBuZXcgaW50OwogICAgICAqZ3JhZGUgPSAqKG9ialRvQ29weS5ncmFkZSk7CiAgIH0KCiAgIHJldHVybiAqdGhpczsKfQoKLy8gTmV3OiBQcmludCBmdW5jdGlvbgp2b2lkIFN1YnN0aXR1dGVUZWFjaGVyOjpQcmludCgpIHsKICAgY291dCA8PCAqZ3JhZGUgPDwgIjogIiA8PCAqc3ViamVjdCA8PCBlbmRsOwp9CgppbnQgbWFpbigpIHsKICAgU3Vic3RpdHV0ZVRlYWNoZXIgbXNXb25nOwogICBTdWJzdGl0dXRlVGVhY2hlciBtclBhcms7CiAgIFN1YnN0aXR1dGVUZWFjaGVyIG1yRG9yZjsKCiAgIG1zV29uZy5TZXRTdWJqZWN0QW5kR3JhZGUoIk1hdGgiLCAxKTsKICAgbXJQYXJrLlNldFN1YmplY3RBbmRHcmFkZSgiSGlzdG9yeSIsIDUpOwogICBtckRvcmYuU2V0U3ViamVjdEFuZEdyYWRlKCJBcnQiLCAzKTsKCiAgIG1yUGFyayA9IG1zV29uZzsKICAgbXNXb25nID0gbXJEb3JmOwoKICAgbXJQYXJrLlByaW50KCk7CiAgIG1zV29uZy5QcmludCgpOwoKICAgcmV0dXJuIDA7Cn0JCg==