11th
Ноя

Код, демонстрирующий работу трех видов конструкторов, перегрузку присваивания, и удаление динамически выделенной памяти

Posted by Chas under Пост-обзор

#include <iostream>
#include <conio.h>

using namespace std;

class mas
{
        int size;
        int *p;
public:
        mas(){};
        mas & operator = (mas & a);
        void Destroy();
        mas(const mas & a);

//конструктор инициализации
        mas(int s)
        {
                p = new int [s];
                size = s;
        }
//количество элементов в массиве (источнике)
        int GetSize()
        {
                return size;
        }

        void PutMas(int i);
        int GetMas (int i);
//деструктор
        ~mas()
        {
                Destroy();
        }
};

//перегруженный конструктор копирования
mas::mas(const mas &a)
{
        p = new int [a.size];
        for (int i = 0; i < a.size; i++)
                *(p+i) = *(a.p+i);
        size = a.size;
}
//перегрузка оператора присваивания
//копирование всех элементов из одного массива в другой
mas & mas::operator =(mas &a)
{
        p = new int [a.size];
        for (int i = 0; i < a.size; i++)
                *(p+i) = *(a.p+i);
        size = a.size;
        return *this;
}
//метод освобождения динамически выделенной памяти
void mas::Destroy()
{
        if (size > 0)
        {
                delete [] p;
                size = 0;
        }
}
//заполнение массива
void mas::PutMas(int i)
{
                *(p+i) = i;
}
//возвращение элемента массива
int mas::GetMas(int i)
{
        return *(p+i);
}
void main ()
{
        setlocale (0,"");
        mas a(10);//вызов конструктора инициализации
        mas c;

        for (int i = 0; i<10; i++)
                a.PutMas(i);
        //конструктор копирования
    mas b = a;
        //перегруженный знак присваивания
        c = b;

        cout<<"c = ";
        for (int i = 0; i<10; i++)
        {
        cout<<c.GetMas(i)<<" ";}
        cout<<"\na = "<<a.GetSize()<<"\n";
        cout<<"b = "<<b.GetSize()<<"\n";
        cout<<"c = "<<c.GetSize()<<"\n";

        //вызов метода освобождения выделенной памяти
        a.Destroy();
        //деструктор, содержащий метод Destroy()
        b.~mas();
        c.~mas();
        //вывод количества объектов массивов после освобождения памяти
        cout<<"\na = "<<a.GetSize()<<"\n";
        cout<<"b = "<<b.GetSize()<<"\n";
        cout<<"c = "<<c.GetSize()<<"\n";
        getch();
}

тема на форуме

Похожие статьи

Теги: | |