CCCPaste

Глубокое копирование!




#include 
using namespace std;

////////////////////////////////////////////////
class Array 
{
      
      private:  
                
    
      public:   int  size;
                int *data;
      ////////////////////// 
      Array(int s) : size(s)                                                                          // Конструктор
      {
         data = new int[size];
         
         for(int i = 0; i < size; i++) 
         {
             data[i] = 0;
         }
      }
      
    
      ////////////////////////////////////////////
      Array(const Array& other) : size(other.size)                              // Конструктор глубокого копирования
      {
                  
           cout << "Глубокое копирование!" << endl;       
                  
           data = new int[size];
           
           for (int i = 0; i < size; i++) 
           {
              data[i] = other.data[i];                                          // копируем значения, а не указатели
           }
      }
    
      ///////  
     ~Array()                                                                                          // Деструктор
      {
          delete[] data;
      }
    
      ////////////////////////////////////  
      Array& operator = (const Array& other)                                   // Оператор присваивания (для полноты)
      {
             if(this != &other) 
             {
                delete[] data;
                size = other.size;
                data = new int[size];
                for(int i = 0; i < size; i++) 
                {
                    data[i] = other.data[i];
                }
             }
      return *this;
      }
};


void monitor(Array a);

/////////////////////////////////////////////////////////////////
int main() 
{

    setlocale(LC_ALL, "rus"); 
    
    Array a1(12), a2(7), a3(10);	
    
    a2 = a1;
    
    monitor(a2);
	
return 0;
}


//////////////////////////////////////////////////////////////////
void monitor(Array a)
{
     
     for(int i = 0; i < a.size; i ++)
     {
             
         cout << a.data[i] << ", ";        
     }   cout << endl;
}