class MyCloneableClass(){
	private:
		int size;
		int* data;
	public:
		//0.Απλος δομητης
		MyClonableClass(int s){
			size=s;
			data=new int[size];
		}

		//1.Copy Constructor
		//Χρηση: MyCloneableClass obj2=obj1;
		MyCloneableClass(const MyCloneableClass& other){
			//A. Αντιγραφη απλων μεταβλητων
			this->size=other.size;

			//B. Δεσμευση νεας δυναμικης μνημης
			this->data=new int[this->size];

			//Γ. Αντιγραφη των δεδομενων ενα-ενα
			for(int i=0;i<size;i++){
				this->data[i]=other.data[i];
			}
		}

		//2. Τελεστης αναθεσης
	    	MyCloneableClass& operator=(const MyCloneableClass& other){
			//A. Ελεγχος ταυτισης. Μηπως ο χρηστης εγραψε obj1=obj1
			if(this==&other){
				return *this;
			}
			//B. Καθαρισμος της παλιας μνημης του αντικειμενου
			delte[] this->data;
			//Γ. Βαθια αντιγραφη (ακριβως ιδια με τον copy constructor)
			this->size=other.size;
			this->data=new int[this->size];
			for(int i=0;i<this->size;i++){
				this->data[i]=other.data[i];
			}
			return *this;
	    	}

	    	//3. Αποδομητης
	    	~MyCloneableClass(){
			delete[] data;//Αποφυγη Memory Leak
	    	}
};

/*Παραδειγμα χρησης τελεστη αποδοσης

Robot r1;
Robot r2;
r2=r1;<--Εδω

Δηλαδη οταν ιδη υπαρχουν και τα δυο αντικειμενα*/
