/* Voorbeeldcode behorende bij het college "Programmeertechnieken",
* LIACS, Universiteit Leiden.
*/
#include <iostream>
#include <vector>
/* Hier is onze Coordinaat klasse weer, maar nu als templatized versie. */
template <typename T>
class Coordinaat
{
private:
T x, y;
public:
Coordinaat(void)
: x(0), y(0)
{ }
Coordinaat(const T x, const T y)
: x(x), y(y)
{ }
/* Copy constructor */
Coordinaat(const Coordinaat &c)
: x(c.x), y(c.y)
{ }
inline T getX(void) const
{
return x;
}
inline T getY(void) const
{
return y;
}
Coordinaat &operator+=(const Coordinaat &b)
{
this->x += b.x;
this->y += b.y;
return *this;
}
/* In dit geval is het eenvoudiger de << operator overload als
* non-member functie binnen de klasse te definieren.
*/
friend std::ostream &operator<<(std::ostream &out, const Coordinaat &c)
{
return out << "(" << c.x << ", " << c.y << ")";
}
};
template <typename T>
Coordinaat<T> operator+(const Coordinaat<T> &a, const Coordinaat<T> &b)
{
Coordinaat<T> c(a);
c += b;
return c;
}
int main(void)
{
Coordinaat<int> a(3, 5);
Coordinaat<int> b(5, 7);
Coordinaat<int> c = a + b;
std::cout << a << std::endl;
std::cout << b << std::endl;
std::cout << c << std::endl << std::endl;
Coordinaat<float> F(4.4520, 0.3);
Coordinaat<float> G(1.4520, 0.9);
F += G;
std::cout << F << std::endl;
/* We kunnen Coordinaat ook in een vector stoppen. */
std::vector<Coordinaat<double> > coordinaten;
coordinaten.push_back(Coordinaat<double>(3.234, 4.634));
coordinaten.push_back(Coordinaat<double>(16.74, 1.245));
coordinaten.push_back(Coordinaat<double>(1.234, 5.345));
for (std::vector<Coordinaat<double> >::const_iterator it = coordinaten.begin();
it != coordinaten.end(); ++it)
std::cout << *it << " ";
std::cout << std::endl;
return 0;
}