#include <iostream>

using namespace std;

struct Punkt
  {
   static unsigned Ilosc;
   double x,y;
   Punkt();
   Punkt(const Punkt &P):x(P.x),y(P.y) { ++Ilosc; cout<<"Copy"<<endl; }
   Punkt(double x,double y);
   void Zeruj();
   void Drukuj()const;
   void Ustaw(double x,double y);
  };
unsigned Punkt::Ilosc=0;

inline Punkt::Punkt():x(0),y(0)
  {
   ++Ilosc;
  }

Punkt::Punkt(double x,double y):x(x),y(y)
  {
   ++Ilosc;
  }

inline void Punkt::Zeruj()
  {
   x=0; y=0;
  }

void Punkt::Drukuj()const
  {
   cout<<'('<<x<<','<<y<<')'<<endl;
  }

void Punkt::Ustaw(double x,double y)
  {
   Punkt::x=x;
   this->y=y;
  }

Punkt f(Punkt P)
  {
   cout<<"W"<<endl;
   return P;
  }

int main()
  {
   Punkt A;
   A.Drukuj();
   const Punkt B(3,4);
   B.Drukuj();
   A.Ustaw(6,7);
   A.Drukuj();
   Punkt *C[3];
   C[0]=new Punkt(1,2);
   C[1]=new Punkt(2,3);
   C[2]=new Punkt(B);
   Punkt D(B);

   cout<<"Przed"<<endl;
   D=f(A);
   cout<<"Po"<<endl;

   for(int i=0;i<3;++i)
     {
      C[i]->Drukuj();
      delete C[i];
     }
   cout<<"Ilosc="<<A.Ilosc<<endl;
   cout<<"Ilosc="<<Punkt::Ilosc<<endl;
   cin.get();
   return 0;
  }

