Программирование >>  Дополнительные возможности наследования 

1 ... 207 208 209 [ 210 ] 211 212 213 ... 265


Примечание

Некоторые очень старые компиляторы не поддерживают обработку исключений. Однако обработка исключений является частью стандарта 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.



1 ... 207 208 209 [ 210 ] 211 212 213 ... 265

© 2006 - 2025 pmbk.ru. Генерация страницы: 0.001
При копировании материалов приветствуются ссылки.
Яндекс.Метрика