|
Программирование >> Дополнительные возможности наследования
Примечание Некоторые очень старые компиляторы не поддерживают обработку исключений. Однако обработка исключений является частью стандарта ANSI C-f-f. Все современные версии компиляторов полностью поддерживают эту возможность. Если у вас устаревший компилятор, вы не сможете скомпилировать и выполнить листинги, приведенные на этом занятии. Однако все же стоит прочитать представленный мвтериал до конца, а затем вернуться к нему после обновления своего компилятора. Лисшииг 20.1. ВозникновЕнив вЕкдн1чнп1вдьноО ситуации 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 #include <iostreani.h> const int DefaultSize = 10; class Array { public: конструкторы Array(int itsSize = DefaultSize); Array(const Array &rhs); ArrayO ( delete [] pType; } операторы Array& operator=(const Array&); int& operator[](int offSet); const int& operator[](int offSet) const; методы доступа int GetitsSizeO const { return itsSize; } функция-друг friend ostreamS operator (ostream&, const ArrayS); class xBoundary { } ; определяем класс исключений private; int *pType; int itsSize; Array;;Array(int size); itsSize(size) pType = new int[size]; for (int i = 0; Ksize; 1++) pType[i] = 0; Array& Array;;operator=(const Array &rhs) { if (this == &rhs) 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 68 89 90 91 92 93 94 return *thls; delete [] pType; ItsSize = rhs.QetltsSize(); pType = new int[ltsSlze]; for (int i = 0; KitsSize; 1++) pType[i] = rhs[i]; return this; Array;;Array(const Array &rhs) { itsSize = rhs.GetitsSizeO; pType = new int[itsSize]; for (int i = 0; KitsSize; i++) pType[i] = rhs[i]; int& Array::operator[](int offSet) { int size = GetitsSizeO; if (OffSet >= 0 && offset < GetitsSizeO) return pType[offSet]; throw xBoundary(); return pType[0]; требование компилятора const int& Array;;operator[](int offSet) const { int mysize = GetitsSizeO; if (offset >= 0 && OffSet < GetitsSizeO) return pType[offSet]; throw xBoundaryO; return рТурв[0]; требование компилятора ostream& opsrator (ostream& output, const Array& theArray) { for (int i = 0; KtheArray,GetitsSizeO; i++) output [ 1 ] theArray[l] endl; return output; int malnO { Array lntArray(20); for (int j = 0; j< 100; ]++) { IntArrayLJ] = j; cout << intArrayC j << ] okay... << endl; catch (Array::xBoundary) { cout << Unable to process your input!\ n ; cout << Done.\ n ; return 0; intArray[0] intArray[1] intArray[2] intArray[3] intArray[4] intArray[5] intArray[6] intArray[7] intArray[8] intArray[9] intArray[10 lntArray[11 lntArray[12 intArray[13 intArray[14 intArray[15 intArray[16 intArray[17 intArray[18 intArray[19 Unable to p Done. okay okay okay okay okay okay okay okay okay okay ] okay ] okay ] okay ] okay ] okay ] okay ] okay ] okay ] okay ] okay recess your input! В листинге 20.1 представлен несколько усеченный класс Array, основанный на шаблоне, разработанном на занятии 19. В строке 24 объявляется новый класс xBoundary внутри объявления внешнего класса Array. В этом новом классе ни по каким внешним признакам нельзя узнать класс обработки исключительных ситуаций. Он чрезвычайно прост и не содержит никаких данных и методов. Тем не менее это вполне работоспособный класс. На самом деле было бы неправильно говорить, что он не содержит никаких методов, потому что компилятор автоматически назначает ему стандартный конструктор, деструктор, конструктор-копировшик и оператор присваивания (=), поэтому у него фактически есть четыре метода, но нет данных. Обратите внимание на то, что его объявление внутри класса Array служит только для объединения двух классов. Как описано в главе 15, класс Array не имеет никакого особого доступа к классу xBoundary, да и класс xBoundary не наделен преимущественным доступом к членам класса Array.
|
© 2006 - 2025 pmbk.ru. Генерация страницы: 0.001
При копировании материалов приветствуются ссылки. |