Инструменты пользователя

Инструменты сайта


reshenie_zadachi_10

Задача 10. Класс динамического массива.

Задача 10: Создайте класс динамического массива, в котором реализована проверка выхода за границы массива. Перегрузите операторы: [ ], =, +, -,++ (добавление элемента в конец массива), – (удаление элемента из конца массива).

/*
 * File:   classdynamicarray.cpp
 * Author: darkfire
 *
 * Created on December 11, 2010, 7:32 PM
 */

#include <stdlib.h>
#include <iostream>

/* Создайте класс динамического массива, в котором реализована проверка выхода
 * за границы массива.
 * Перегрузите операторы: [ ], =, +, -,
 * ++ (добавление элемента в конец массива),
 * -- (удаление элемента из конца массива).
 */
using namespace std;

class A{
	int size;
	int *a;
public:
	A(int size);//Конструктор. Создание, инициализация массива.
	A(const A &aA);//Конструктор копирования
	~A(){//деструктор
            delete [] a;
	}
	int Get () const {// метод выводит размер динамического массива
            return size;
	}
	int &operator[](int j){ //Перегруженный оператор []
     		return a [j];
	}
	A operator--(); //Перегруженный оператор -- префиксной формы. Размер массива уменьшается на единицу
 	A operator++(); //Перегруженный оператор ++
	A operator+(const A &);
	A operator=(const A &);

};

	A::A(int size){//Конструктор. Создание, инициализация массива.
	this->size=size;
	a = new int [size];
	for (int i = 0; i < size; i++)
            a [i] = i + 1;
	}
	A::A(const A &aA){//Конструктор копирования
            size = aA.size;
            a = new int [size];
            for(int i = 0; i<size; i++)
                a[i] = aA.a[i];
	}
	A A::operator-- (){ //Перегруженный оператор -- префиксной формы
            //размер массива уменьшается на единицу
            size-=1;
            int *b=new int [size];
            for (int i=0;i<size;i++){
			b[i]=a[i];
            }
            delete [] a;
            a=b;
            return *this; //возвращаем объект генерирующий вызов
	}
	A A::operator++(){ //Перегруженный оператор ++
            //размер массива увеличивается на единицу
            size+=1;
            int *b=new int [size];
            for (int i=0;i<size-1;i++){
			b[i]=a[i];
            }
            b[size-1]=size;//заполним новый элемент массива
            delete [] a;
            a=b;
            return *this; //возвращаем объект генерирующий вызов
	}
	A A::operator+(const A &aA){
		size = aA.Get()+this->size;
		A temp(size);
		return temp;
	}
	A A::operator=(const A &aA){
            size = aA.size;
			//cout<<"aA.size: "<<aA.size<<"\n";
            a = new int [size];
            for(int i = 0; i<size; i++)
                a[i] = aA.a[i];
		return *this; //возвращаем объект генерирующий вызов
	}

int main() {
    int i;
	A object(12);
    cout<<"\nShow:\n";
	for(i=0;i<object.Get();i++){
		cout<<object[i]<<" ";
	}
	cout<<"\n\n";
        --object;
        --object;
        --object;
	--object;//удалить один элемент массива
	cout<<object.Get()<<"\n";
	for(i=0;i<object.Get();i++){
		cout<<object[i]<<" ";
	}
	cout<<"\n\n";
        ++object;
        ++object;//добавить один элемент массива
	cout<<object.Get()<<"\n";
	for(i=0;i<object.Get();i++){
		cout<<object[i]<<" ";
	}
	cout<<"\n\n";
	A C(0);
	A B(5);
	cout<<"object.Get = "<<object.Get()<<" B.Get = "<<B.Get()<<"\n";
	C=object+B;

	for(i=0;i<C.Get();i++){
		cout<<C[i]<<" ";
	}
	cout<<"\n\n";

    return (EXIT_SUCCESS);
};
reshenie_zadachi_10.txt · Последние изменения: 2011/01/09 14:50 (внешнее изменение)

Яндекс.Метрика