//: C10:MessengerDemo.cpp
// Z knihy "Myslíme v jazyce C++, část 2" od Bruce Eckela a Chucka Allisona.
// (c) 1995-2004 MindView, Inc. Všechna práva vyhrazena.
// Přečtěte si podmínky používání zdrojových kódů umístěné v souboru 
// 'Licence.txt' dodávaném spolu s balíčkem kódu dostupným na www.MindView.net.
#include <iostream>
#include <string>
using namespace std;

class Bod { // Kuryr
public:
  int x, y, z; // Jelikož slouží jen na přenášení informací
  Bod(int xi, int yi, int zi) : x(xi), y(yi), z(zi) {}
  Bod(const Bod& p) :  x(p.x), y(p.y), z(p.z) {}
  Bod& operator=(const Bod& rhs) {
    x = rhs.x;
    y = rhs.y;
    z = rhs.z;
    return *this;
  }
  friend ostream&
  operator<<(ostream& os, const Bod& p) {
    return os << "x=" << p.x << " y=" << p.y
              << " z=" << p.z;
  }
};

class Vektor { // Matematický vektor
public:
  int velikost, smer;
  Vektor(int m, int d) : velikost(m), smer(d) {}
};

class Prostor {
public:
  static Bod transformuj(Bod p, Vektor v) {
    // Kopírovací konstruktor zabraňuje úpravám origináku.
    // příklad výpočtu:
    p.x += v.velikost + v.smer;
    p.y += v.velikost + v.smer;
    p.z += v.velikost + v.smer;
    return p;
  }
};

int main() {
  Bod p1(1, 2, 3);
  Bod p2 = Prostor::transformuj(p1, Vektor(11, 47));
  cout << "p1: " << p1 << " p2: " << p2 << endl;
} ///:~
