The purpose of this lab is to give you practice with overloading operators and separate compilation.
The following is the header and implemenation for a Pair class. The class simply stores a pair of numbers. There is an overloaded member operator + that adds two pairs together or adds a constant value to each number in the pair. Here is the class definition that goes in the file Pair.h:
#pragma once
class Pair
{
private:
int num1, num2;
public:
Pair();
Pair(int num1, int num2);
int get1();
int get2();
Pair operator+(const Pair &other);
Pair operator+(int otherNum);
};
Here is the implementation that goes in the file Pair.cpp:
#include "Pair.h"
Pair::Pair() : num1(0), num2(0)
{
}
Pair::Pair(int num1, int num2) : num1(num1), num2(num2)
{
}
int Pair::get1()
{
return num1;
}
int Pair::get2()
{
return num2;
}
// Return a new pair that adds the corresponding numbers
Pair Pair::operator+(const Pair &other)
{
Pair newPair(this->num1, this->num2);
newPair.num1 += other.num1;
newPair.num2 += other.num2;
return newPair;
}
// Return a new pair that adds otherNum to num1 and num2
Pair Pair::operator+(int otherNum)
{
Pair newPair(this->num1, this->num2);
newPair.num1 += otherNum;
newPair.num2 += otherNum;
return newPair;
}
Here is the contents of the file main.cpp:
#include <iostream>
#include "Pair.h"
using namespace std;
int main()
{
Pair p1(5,10);
Pair p2(1,2);
// Outputs 5 and 10
cout << p1.get1() << " " << p1.get2() << endl;
// Outputs 1 and 2
cout << p2.get1() << " " << p2.get2() << endl;
Pair p3 = p2 + p1;
// Outputs 6 and 12
cout << p3.get1() << " " << p3.get2() << endl;
p3 = p3 + 2;
// Outputs 8 and 14
cout << p3.get1() << " " << p3.get2() << endl;
}
As written, the program runs as intended! But if we change the last overloaded + so that the 2 is the first operand
then the program will not compile. In other words, we have problems if we write:
p3 = 2 + p3;To do:
p3 = p3 + 2; to p3 = 2 + p3; and explain why it doesn't work.2 + p3 or p3 + 2 or p1 + p2 or p2 + p1
(the last two already work in the original code, but you should rewrite them as friends also to be consistent and for a little extra practice).
The best place to put the global friend function(s) is in main.cpp (don't put it in Pair.cpp).