Главная страница Случайная страница Разделы сайта АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторикаСоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника |
💸 Как сделать бизнес проще, а карман толще?
Тот, кто работает в сфере услуг, знает — без ведения записи клиентов никуда. Мало того, что нужно видеть свое раписание, но и напоминать клиентам о визитах тоже.
Проблема в том, что средняя цена по рынку за такой сервис — 800 руб/мес или почти 15 000 руб за год. И это минимальный функционал.
Нашли самый бюджетный и оптимальный вариант: сервис VisitTime.⚡️ Для новых пользователей первый месяц бесплатно. А далее 290 руб/мес, это в 3 раза дешевле аналогов. За эту цену доступен весь функционал: напоминание о визитах, чаевые, предоплаты, общение с клиентами, переносы записей и так далее. ✅ Уйма гибких настроек, которые помогут вам зарабатывать больше и забыть про чувство «что-то мне нужно было сделать». Сомневаетесь? нажмите на текст, запустите чат-бота и убедитесь во всем сами! Листинг 20.6. Использование исключений с шаблонами
1: #include < iostream.h> 2: 3: const int DefaultSize = 10; 4: class xBoundary { }; 5: 6: template < class T> 7: class Array 8: { 9: public: 10: // конструкторы 11: Array(int itsSize = DefaultSize); 12: Array(const Array & rhs); 13: ~Array() { delete [] pType; } 14: 15: // операторы 16: Array& operator=(const Array< T> &); 17: T& operator[](int offSet); 18: const T& operator[](int offSet) const; 19: 20: // методы доступа 21: int GetitsSize() const { return itsSize; } 22: 23: // функция-друг 24: friend ostream& operator< < (ostream&, const Array< T> &); 25: 26: // определение классов исключений 27: 28: class xSize { }; 29: 30: private: 31: int *pType; 32: int itsSize; 33: }; 34: 35: template < class T> 36: Array< T>:: Array(int size): 37: itsSize(size) 38: { 39: if (size < 10 || size > 30000) 40: throw xSize(); 41: рТуре = new T[size]; 42: for (int i = 0; i< size; i++) 43: pType[i] = 0; 44: } 45: 46: template < class T> 47: Array< T> & Array< T>:: operator=(const Array< T> & rhs) 48: { 49: if (this == & rhs) 50: return *this; 51: delete [] рТуре; 52: itsSize = rhs.GetitsSize(); 53: рТуре = new T[itsSize]; 54: for (int i = 0; i< itsSize; i++) 55: pType[i] = rhs[i]; 56: } 57: template < class T> 58: Array< T>:: Array(const Array< T> & rhs) 59: { 60: itsSize = rhs.GetitsSize(); 61: рТуре = new T[itsSize]; 62: for (int i = 0; i< itsSize; i++) 63: pType[i] = rhs[i]; 64: } 65: 66: template < class T> 67: T& Array< T>:: operator[](int offSet) 68: { 69: int size = GetitsSize(); 70: if (offSet > = 0 & & offSet < GetitsSize()) 71: return pType[offSet]; 72: throw xBoundary(): 73: return pType[0]; 74: } 75: 76: template < class T> 77: const T& Array< T>:: operator[](int offSet) const 78: { 79: int mysize = GetitsSize(); 80: if (offSet > = 0 & & offSet < GetitsSize()) 81: return pType[offSet]; 82: throw xBoundary(); 83: } 84: 85: template < class T> 86: ostream& operator< < (ostream& output, const Array< T> & theArray) 87: { 88: for (int i = 0; i< theArray, GetitsSize(); i++) 89: output < < " [" < < i < < " ] " < < theArray[i] < < endl; 90: return output; 91: } 92: 93: 94: int main() 95: { 96: 97: try 98: { 99: Array< int> intArray(9); 100: for (int j = 0; j< 100; j++) 101: { 102: intArray[j] = j; 103: cout < < " intArray[" < < j < < " ] okay..." < < endl; 104: } 105: } 106: catch (xBoundary) 107: { 108: cout < < " Unable to process your input! \n"; 109: } 110: catch (Array< int>:: xSize) 111: { 112: cout < < " Bad Size! \n"; 113: } 114: 115: cout < < " Done.\n"; 116: return 0; 117: }
Результат: You asked for an array of zero objects! Done
Анализ: Первое исключение, xBoundary, объявлено вне определения шаблона в строке 4; второе исключение, xSize, — внутри определения шаблона в строке 28. Исключение xBoundary не связано с классом шаблона, но его можно использовать так же, как и любой другой класс. Исключение xSize связано с шаблоном и должно вызываться для экземпляра класса Array. Обратите внимание на разницу в синтаксисе двух операторов catch. Строка 106 содержит выражение catch (xBoundary), а строка 110 — выражение catch (Array< int>:: xSize). Второй вариант связан с обращением к исключению экземпляра целочисленного массива.
|