|
Главная | Правила | Регистрация | Дневники | Справка | Пользователи | Календарь | Поиск | Сообщения за день | Все разделы прочитаны |
![]() |
|
Опции темы | Опции просмотра |
![]() |
#1 (permalink) |
Новичок
Регистрация: 16.11.2011
Сообщений: 7
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
|
![]() я откомментировала что и как понимаю, а так же свои вопросы. Код:
#include "stdafx.h" #include <iostream> #include "conio.h" #include <exception> using namespace std; template < class Object > // шаброн; class object - параметр шаблона? class vector // клас вектор. { public: explicit vector(int initSize = 0): theSize(initSize),// explicit следует писать для всех конструкторов с одним параметром( а для чего?). т.е. мы объявили конструктор vector; theSize(initSize) - функция кол-ва элементов, а theCapacity(initSize) - вместимость theCapacity(initSize) // или theSize и theCapacity тож конструкторы??? {objects = new Object[theCapacity];}// создаем объект с вместимостью theCapacity? vector(const vector &rhs):(NULL) // что значит двоеточие после ()? и почему const vector и зачем &rhs {operator = (rhs);}// ? ~vector()// деструктор {delete [] objects;} bool empty( ) const // это функция ? { return size( ) == 0; } Object & operator [] (int index) // а это что? { #ifndef NO_CHECK // директива проверки выхода из области вектора? if( index < 0 || index >= size()) throw ArrayIndexOutOfBoundException();// trow - устанавливает тип выбрасываемых исключений? #endif return objects[index]; } const vector & operator = ( const vector &rhs);//перегрузка =? void resize (int newSize); // ф-я изменения размера вектора(меняет на newSize) void reserve(int newCapacity); // изменяет вместимость вектора void push_back(const Object &x);// вставка в конец int size()const{return theSize;}// размер вектора? почему сonst? int capacity()const{ return theCapacity;}// тот же вопрос. при чем тут const const Object & back( ) const;//что это void pop_back( );// удаление с конца private: int theSize; int theCapacity; Object * objects;// что это? }; template <class Object> const vector<Object>&// зачем & ? это же ,bn равный нулю? vector<Object>::operator =(const vector<Object>&rhs) { if(this != & rhs)// ? { delete [] objects; // что мы удаляем? theSize = rhs.size();// новый размер theCapacity = rhs.capacity();//новая вместимость object = new Object[capacity()];// новый вектор for( int k = 0; k < size();k++)// заполняем вектор? objects[k]=rhs.objects[k]; } return *this;// что мы возвращаем? } template <class Object> void vector <Object>::push_back(const Object& x)// вставляем элемент в конец { if(theSize == theCapacity)// если размер равен вместимости reserve(2*theCapacity+1);// увеличиваем вместимость (в два раза +1?) objects[ theSize++] = x;// записываем на след-е место наш элемент? } template <class Object> void vector <Object>::reserve(int newCapacity)// изменение вместимости { Object *oldArray = objects;// что мы делаем? int numToCopy = newCapacity<theSize?newCapacity:theSize;// вообще не понятна эта строка; numToCopy - что в этой переменной. objects = new Object[newCapacity];// в старый объект присваиваем новый с новой вместимостью? for(int k = 0; k < numToCopy;k++) objects[k]=oldArray[k];// переписываем значения старого вектора в новый theSize = numToCopy;//изменяется размер и theCapacity = newCapacity;// вместимость delete[] oldArray;// удаляем старый вектор } template <class Object> void vector<Object>::pop_back( )// удаление с конца { if( empty( ) )// если вектор пуст печатаем сообщение throw ( "Cannot call pop_back on empty vector" ); theSize--;// если нет, уменьшаем размер на 1 } template <class Object> const Object & vector<Object>::back( ) const// что это? { if( empty( ) ) throw ( "Cannot call back on empty vector" ); return objects[ theSize-1 ]; } void main() { vector <int> v[10]; // вектор v[10] int i = 0; for(i = 0;i<10;i++) v->push_back(i); // заполняем вектор от 0 до 9 вставляя значения в конец вектора i = 0; int k = v->size();// ? while(i < k) { cout << v->back();// что значит конструкция -> v->pop_back(); cout << endl; i++; } getch(); } } |
![]() |
![]() |
![]() |
|
Helpmaster
Member
Регистрация: 08.03.2016
Сообщений: 0
|
На форуме уже не раз встречалось что то подобное, почитайте C++, работа с контейнером. Помогите понять программу Помогите, пожалуйста, не могу понять в чем именно проблема Помогите решить задачу) Помогите понять, что случилось |
![]() |
#2 (permalink) |
Banned
Регистрация: 01.09.2009
Сообщений: 4,396
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 2544
|
![]()
Перед нами очередной пример отвратно оформленной программы, в которой перемешаны декларативная и имплементативная части. Класс писал очевидный индус. Или преподаватель-садист.
Код:
explicit vector(int initSize = 0): ДВОЕТОЧИЕ - отделяет прототип от списка начальной инициализации, вот он Код:
theSize(initSize), theCapacity(initSize) Код:
bool empty( ) const // это функция ? { return size( ) == 0; } Код:
Object & operator [] (int index) // а это что? { #ifndef NO_CHECK // директива проверки выхода из области вектора? if( index < 0 || index >= size()) throw ArrayIndexOutOfBoundException();// trow - устанавливает тип выбрасываемых исключений? #endif return objects[index]; } Последний раз редактировалось Long Cat; 16.11.2011 в 02:34 |
![]() |
![]() |
![]() |
#5 (permalink) | |
Новичок
Регистрация: 16.11.2011
Сообщений: 7
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
|
![]() Цитата:
если мы обратились к массиву, как к mas[i] и вышли за его пределы, то мы идем по ветке throw ArrayIndexOutOfBoundException(); - я не могу понять, что это за функция. |
|
![]() |
![]() |
Ads | |
Member
Регистрация: 31.10.2006
Сообщений: 40200
Записей в дневнике: 0
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 55070
|
![]() |
#6 (permalink) |
Banned
Регистрация: 01.09.2009
Сообщений: 4,396
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 2544
|
![]()
Мы выбрасываем исключение ArrayIndexOutOfBoundException(); Так как в программе мы его нигде не ловим, при выходе за границу массива мы получим окошко типа C++ Runtime Error или похожее.
|
![]() |
![]() |
![]() |
#10 (permalink) |
Новичок
Регистрация: 16.11.2011
Сообщений: 7
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
|
![]()
пойдем дальше?
|
![]() |
![]() |
Ads | |
Member
Регистрация: 31.10.2006
Сообщений: 40200
Записей в дневнике: 0
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 55070
|
![]() |
Опции темы | |
Опции просмотра | |
|
|