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

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


reshenie_zadachi_10

Различия

Здесь показаны различия между двумя версиями данной страницы.

Ссылка на это сравнение

reshenie_zadachi_10 [2011/01/09 09:50] (текущий)
Строка 1: Строка 1:
 +====== Задача 10. Класс динамического массива. ======
 +**Задача 10:** Создайте класс динамического массива,​ в котором реализована проверка выхода за границы массива. Перегрузите операторы:​ [ ], =, +, -,++ (добавление элемента в конец массива),​ – (удаление элемента из конца массива).
 +<​file>​
 +/*
 + * 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);​
 +};
 +</​file>​
  
reshenie_zadachi_10.txt · Последние изменения: 2011/01/09 09:50 (внешнее изменение)