Главная страница Случайная страница Разделы сайта АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторикаСоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника |
💸 Как сделать бизнес проще, а карман толще?
Тот, кто работает в сфере услуг, знает — без ведения записи клиентов никуда. Мало того, что нужно видеть свое раписание, но и напоминать клиентам о визитах тоже.
Проблема в том, что средняя цена по рынку за такой сервис — 800 руб/мес или почти 15 000 руб за год. И это минимальный функционал.
Нашли самый бюджетный и оптимальный вариант: сервис VisitTime.⚡️ Для новых пользователей первый месяц бесплатно. А далее 290 руб/мес, это в 3 раза дешевле аналогов. За эту цену доступен весь функционал: напоминание о визитах, чаевые, предоплаты, общение с клиентами, переносы записей и так далее. ✅ Уйма гибких настроек, которые помогут вам зарабатывать больше и забыть про чувство «что-то мне нужно было сделать». Сомневаетесь? нажмите на текст, запустите чат-бота и убедитесь во всем сами! Листинг 20.5. Передача аргументов как ссылок u использование виртуальных функций в классах исключений
1: #include < iostream.h> 2: 3: const int DefaultSize = 10; 4: 5: class Array 6: { 7: public: 8: // конструкторы 9: Array(int itsSize = DefaultSize); 10: Array(const Array & rhs); 11: ~Array() { delete [] pType; } 12: 13: // операторы 14: Array& operator=(const Array&); 15: int& operator[](int offSet); 16: const int& operator[](int offSet) const; 17: 18: // методы доступа 19: int GetitsSize() const { return itsSize; } 20: 21: // функция-друг 22: friend ostream& operator< < 23: (ostream&, const Array&); 24: 25: // определение классов исключений 26: class xBoundary { }; 27: class xSize 28: { 29: public: 30: xSize(int size): itsSize(size) { } 31: ~xSize(){ } 32: virtual int GetSize() { return itsSize; } 33: virtual void PrintError() 34: { 35: cout < < " Size error. Received: "; 36: cout < < itsSize < < endl; 37: } 38: protected: 39: int itsSize; 40: }; 41: 42: class xTooBig: public xSize 43: { 44: public: 45: xTooBig(int size): xSize(size){ } 46: virtual void PrintError() 47: { 48: cout < < " Too big. Received: "; 49: cout < < xSize:: itsSize < < endl; 50: } 51: }; 52: 53: class xTooSmall: public xSize 54: { 55: public: 56: xTooSmall(int size): xSize(size){ } 57: virtual void PrintError() 58: { 59: cout < < " Too small. Received: "; 60: cout < < xSize:: itsSize < < endl; 61: } 62: }; 63: 64: class xZero: public xTooSmall 65: { 66: public: 67: xZero(int size): xTooSmall(size){ } 68: virtual void PrintError() 69: { 70: cout < < " Zero!. Received: "; 71: cout < < xSize:: itsSize < < endl; 72: } 73: }; 74: 75: class xNegative: public xSize 76: { 77: public: 78: xNegative(int size): xSize(size){ } 79: virtual void PrintError() 80: { 81: cout < < " Negative! Received: "; 82: cout < < xSize:: itsSize < < endl; 83: } 84: }; 85: 86: private: 87: int *pType; 88: int itsSize; 89: }; 90: 91: Array:: Array(int size): 92: itsSize(size) 93: { 94: if (size == 0) 95: throw xZero(size); 96: if (size > 30000) 97: throw xTooBig(size); 98: if (size < 1) 99: throw xNegative(size); 100: if (size < 10) 101: throw xTooSmall(size); 102: 103: pType = new int[size]; 104: for (int i = 0: i< size; i++) 105: pType[i] = 0; 106: } 107: 108: int& Array:: operator[] (int offSet) 109: { 110: int size = GetitsSize(); 111: if (offSet > = 0 & & offSet < GetitsSize()) 112: return pType[offSet]; 113: throw xBoundary(); 114: return pType[0]; 115: } 116: 117: const int& Array:: operator[] (int offSet) const 118: { 119: int size = GetitsSize(); 120: if (offSet > = 0 & & offSet < GetitsSize()) 121: return pType[offSet]; 122: throw xBoundary(); 123: return pType[0]; 124: } 125: 126: int main() 127: { 128: 129: try 130: { 131: Array intArray(9); 132: for (int j = 0: j< 100; j++) 133: { 134: intArray[j] - j; 135: cout < < " intArray[" < < j < < " ] okay...\n"; 136: } 137: } 138: catch (Array:: xBoundary) 139: { 140: cout < < " Unable to process your input! \n"; 141: } 142: catch (Array;: xSize& theExoeption) 143: { 144: theException.PrintError(); 145: } 146: catch (...) 147: { 148: cout < < " Something went wrong! \n"; 149: } 150: cout < < " Done.\n"; 151: return 0; 152: }
Результат: Too small! Received: 9 Done.
Анализ: В листинге 20.5 показано объявление виртуального метода PrintError() в классе xSize, который выводит сообщения об ошибках и истинный размер класса. Этот метод замешается в каждом производном классе исключения. В строке 142 объявляется объект исключения, который является ссылкой. При вызове функции PrintError() со ссылкой на объект благодаря полиморфизму вызывается нужная версия функции PrintError(). В результате программный код становится яснее, проще для понимания, а следовательно, и для дальнейшей поддержки.
|