// "New" means new compared to previous level
#include <iostream>
using namespace std;
class InchSize {
public:
InchSize(int wholeInches = 0, int sixteenths = 0);
void Print() const;
InchSize operator+(InchSize rhs);
InchSize operator+(int sixteenthsOfInch);
private:
int inches;
int sixteenths;
};
InchSize InchSize::operator+(InchSize rhs) {
InchSize totalSize;
totalSize.inches = inches + rhs.inches;
totalSize.sixteenths = sixteenths + rhs.sixteenths;
// If sixteenths is greater than an inch, carry 1 to inches.
if (totalSize.sixteenths >= 16) {
totalSize.inches += 1;
totalSize.sixteenths -= 16;
}
return totalSize;
}
// New: Overloaded + operator adding integers.
InchSize InchSize::operator+(int sixteenthsOfInch) {
InchSize totalSize;
totalSize.inches = inches;
totalSize.sixteenths = sixteenths + sixteenthsOfInch;
// While sixteenths is greater than an inch, carry to inches.
while (totalSize.sixteenths >= 16) {
totalSize.inches += 1;
totalSize.sixteenths -= 16;
}
return totalSize;
}
InchSize::InchSize(int wholeInches, int sixteenthsOfInch) {
inches = wholeInches;
sixteenths = sixteenthsOfInch;
}
void InchSize::Print() const {
cout << inches << " " << sixteenths << "/16 inches" << endl;
}
int main() {
InchSize size1(7, 13);
InchSize size2(8, 14);
InchSize sumSize;
InchSize totalSize;
sumSize = size1 + size2;
totalSize = sumSize + 22;
totalSize.Print();
return 0;
}
Ly8gIk5ldyIgbWVhbnMgbmV3IGNvbXBhcmVkIHRvIHByZXZpb3VzIGxldmVsCiNpbmNsdWRlIDxpb3N0cmVhbT4KdXNpbmcgbmFtZXNwYWNlIHN0ZDsKCmNsYXNzIEluY2hTaXplIHsKICAgcHVibGljOgogICAgICBJbmNoU2l6ZShpbnQgd2hvbGVJbmNoZXMgPSAwLCBpbnQgc2l4dGVlbnRocyA9IDApOwogICAgICB2b2lkIFByaW50KCkgY29uc3Q7CiAgICAgIEluY2hTaXplIG9wZXJhdG9yKyhJbmNoU2l6ZSByaHMpOwogICAgICBJbmNoU2l6ZSBvcGVyYXRvcisoaW50IHNpeHRlZW50aHNPZkluY2gpOwogICBwcml2YXRlOgogICAgICBpbnQgaW5jaGVzOwogICAgICBpbnQgc2l4dGVlbnRoczsKfTsKCkluY2hTaXplIEluY2hTaXplOjpvcGVyYXRvcisoSW5jaFNpemUgcmhzKSB7CiAgIEluY2hTaXplIHRvdGFsU2l6ZTsKCiAgIHRvdGFsU2l6ZS5pbmNoZXMgPSBpbmNoZXMgKyByaHMuaW5jaGVzOwogICB0b3RhbFNpemUuc2l4dGVlbnRocyA9IHNpeHRlZW50aHMgKyByaHMuc2l4dGVlbnRoczsKCiAgIC8vIElmIHNpeHRlZW50aHMgaXMgZ3JlYXRlciB0aGFuIGFuIGluY2gsIGNhcnJ5IDEgdG8gaW5jaGVzLgogICBpZiAodG90YWxTaXplLnNpeHRlZW50aHMgPj0gMTYpIHsKICAgICAgdG90YWxTaXplLmluY2hlcyArPSAxOwogICAgICB0b3RhbFNpemUuc2l4dGVlbnRocyAtPSAxNjsKICAgfQoKICAgcmV0dXJuIHRvdGFsU2l6ZTsKfQoKLy8gTmV3OiBPdmVybG9hZGVkICsgb3BlcmF0b3IgYWRkaW5nIGludGVnZXJzLgpJbmNoU2l6ZSBJbmNoU2l6ZTo6b3BlcmF0b3IrKGludCBzaXh0ZWVudGhzT2ZJbmNoKSB7CiAgIEluY2hTaXplIHRvdGFsU2l6ZTsKCiAgIHRvdGFsU2l6ZS5pbmNoZXMgPSBpbmNoZXM7CiAgIHRvdGFsU2l6ZS5zaXh0ZWVudGhzID0gc2l4dGVlbnRocyArIHNpeHRlZW50aHNPZkluY2g7CgogICAvLyBXaGlsZSBzaXh0ZWVudGhzIGlzIGdyZWF0ZXIgdGhhbiBhbiBpbmNoLCBjYXJyeSB0byBpbmNoZXMuCiAgIHdoaWxlICh0b3RhbFNpemUuc2l4dGVlbnRocyA+PSAxNikgewogICAgICB0b3RhbFNpemUuaW5jaGVzICs9IDE7CiAgICAgIHRvdGFsU2l6ZS5zaXh0ZWVudGhzIC09IDE2OwogICB9CgogICByZXR1cm4gdG90YWxTaXplOwp9CgpJbmNoU2l6ZTo6SW5jaFNpemUoaW50IHdob2xlSW5jaGVzLCBpbnQgc2l4dGVlbnRoc09mSW5jaCkgewogICBpbmNoZXMgPSB3aG9sZUluY2hlczsKICAgc2l4dGVlbnRocyA9IHNpeHRlZW50aHNPZkluY2g7Cn0KCnZvaWQgSW5jaFNpemU6OlByaW50KCkgY29uc3QgewogICBjb3V0IDw8IGluY2hlcyA8PCAiICIgPDwgc2l4dGVlbnRocyA8PCAiLzE2IGluY2hlcyIgPDwgZW5kbDsKfQoKaW50IG1haW4oKSB7CiAgIEluY2hTaXplIHNpemUxKDcsIDEzKTsKICAgSW5jaFNpemUgc2l6ZTIoOCwgMTQpOwogICBJbmNoU2l6ZSBzdW1TaXplOwogICBJbmNoU2l6ZSB0b3RhbFNpemU7CgogICBzdW1TaXplID0gc2l6ZTEgKyBzaXplMjsKICAgdG90YWxTaXplID0gc3VtU2l6ZSArIDIyOwoKICAgdG90YWxTaXplLlByaW50KCk7CgogICByZXR1cm4gMDsKfQ==