/* Voorbeeldcode behorende bij het college "Programmeertechnieken",
* LIACS, Universiteit Leiden.
*/
#include <iostream>
#include <vector>
class Coordinaat
{
private:
int x, y;
/* Declareer als "friend function" zodat de functie de private members
* mag lezen.
*/
friend std::ostream &operator<<(std::ostream &out, const Coordinaat &c);
public:
Coordinaat(void)
: x(0), y(0)
{ }
Coordinaat(const int x, const int y)
: x(x), y(y)
{ }
inline int getX(void) const
{
return x;
}
inline int getY(void) const
{
return y;
}
/* Overload operator +=. We tellen "b" op bij "this". Let op, geef een
* reference naar onszelf als returnwaarde.
*/
Coordinaat &operator+=(const Coordinaat &b)
{
this->x += b.x;
this->y += b.y;
return *this;
}
};
/* Overload operator +, maak een nieuw coordinaat c en hergebruik de
* implementatie van "+=".
*/
Coordinaat operator+(const Coordinaat &a, const Coordinaat &b)
{
Coordinaat c(a);
c += b;
return c;
}
std::ostream &operator<<(std::ostream &out, const Coordinaat &c)
{
return out << "(" << c.x << ", " << c.y << ")";
}
int main(void)
{
Coordinaat a(3, 5);
Coordinaat b(5, 7);
Coordinaat c = a + b;
std::cout << a << std::endl;
std::cout << b << std::endl;
std::cout << c << std::endl << std::endl;
b += c;
std::cout << b << std::endl;
/* We kunnen Coordinaat ook in een vector stoppen. */
std::vector<Coordinaat> coordinaten;
coordinaten.push_back(Coordinaat(3, 4));
coordinaten.push_back(Coordinaat(16, 1));
coordinaten.push_back(Coordinaat(1, 5));
for (std::vector<Coordinaat>::const_iterator it = coordinaten.begin();
it != coordinaten.end(); ++it)
std::cout << *it << " ";
std::cout << std::endl;
return 0;
}