Главная страница Случайная страница Разделы сайта АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторикаСоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника |
💸 Как сделать бизнес проще, а карман толще?
Тот, кто работает в сфере услуг, знает — без ведения записи клиентов никуда. Мало того, что нужно видеть свое раписание, но и напоминать клиентам о визитах тоже.
Проблема в том, что средняя цена по рынку за такой сервис — 800 руб/мес или почти 15 000 руб за год. И это минимальный функционал.
Нашли самый бюджетный и оптимальный вариант: сервис VisitTime.⚡️ Для новых пользователей первый месяц бесплатно. А далее 290 руб/мес, это в 3 раза дешевле аналогов. За эту цену доступен весь функционал: напоминание о визитах, чаевые, предоплаты, общение с клиентами, переносы записей и так далее. ✅ Уйма гибких настроек, которые помогут вам зарабатывать больше и забыть про чувство «что-то мне нужно было сделать». Сомневаетесь? нажмите на текст, запустите чат-бота и убедитесь во всем сами! Листинг 13.7. Классы семейства Shape
1: // Листинг 13.7. Классы семейства Shape 2: 3: #include < iostream.h> 4: 5: 6: class Shape 7: { 8: public: 9: Shape(){ } 10: virtual ~Shape() { } 11: virtual long GetArea() { return -1; } 12: virtual long GetPerim() { return -1; } 13: virtual void Draw() { } 14: private: 15: }; 16: 17: class Circle: public Shape 18: { 19: public: 20: Circle(int radius): itsRadius(radius) { } 21: ~Circle() { } 22: long GetArea() { return 3 * itsRadius * itsRadius; } 23: long GetPerim() { return 6 * itsRadius; } 24: void Draw(); 25: private: 26: int itsRadius; 27: int itsCircumference; 28: }; 29: 30: void Circle:: Draw() 31: { 32: cout < < " Circle drawing routine here! \n"; 33: } 34: 35: 36: class Rectangle: public Shape 37: { 38: public: 39: Rectangle(int len, int width); 40: itsLength(len), itsWidth(width) { } 41: virtual ~Rectangle() { } 42: virtual long GetArea() { return itsLength * itsWidth; } 43: virtual long GetPerim() { return 2*itsLength + 2*itsWidth; } 44: virtual int GetLength() { return itsLength; } 45: virtual int GetWidth() { return itsWidth; } 46: virtual void Draw(); 47: private: 48: int itsWidth; 49: int itsLength; 50: }; 51: 52: void Rectangle:: Draw() 53: { 54: for (int i = 0; i< itsLength; i++) 55: { 56: for (int j = 0; j< itsWidth; j++) 57: cout < < " x "; 58: 59: cout < < " \n"; 60: } 61: } 62: 63: class Square: public Rectangle 64: { 65: public: 66: Square(int len); 67: Square(int len, int width); 68: ~Square() { } 69: long GetPerim() { return 4 * GetLength(); } 70: }; 71: 72: Square:: Square(int len): 73: Rectangle(len, len) 74: { } 75: 76: Square:: Square(int len, int width): 77: Rectangle(len, width) 78: 79: { 80: if (GetLength()! = GetWidth()) 81: cout < < " Error, not a sguare... a Rectangle?? \n"; 82: } 83: 84: int main() 85: { 86: int choice; 87: bool fQuit = false; 88: Shape * sp; 89: 90: while (! fQuit) 91: { 92: cout < < " (1)Circle (2)Rectangle (3)Square (0)Quit: "; 93: cin > > choice; 94: 95: switch (choice) 96: { 97: case 0: fQuit = true; 98: break; 99: case 1: sp = new Circle(5); 100: break; 101: case 2: sp = new Rectangle(4, 6); 102: break; 103: case 3: sp = new Square(5); 104: break; 105: default: cout < < " Please enter a number between 0 and 3" < < endl; 106: continue; 107: break; 108: } 109: if(! fQuit) 110: sp-> Draw(); 111: delete sp; 112: cout < < " \n"; 113: } 114: return 0; 115: }
Результат: (1)Circle (2)Rectangle (3)Square (0)Quit: 2 x x x x x x X X X X X X X X X X X X X X X X X X (1)Circle (2)Rectangle (3)Square (0)Quit: 3 X X X X X X X X X x X X X X X X X X X X X X X X X (1)Circle (2)Rectangle (3)Square (0)Quit: 0
Анализ: В строках 6—15 объявляется класс Shape. Методы GetArea() и GetPerim() возвращают -1 как сообщение об ошибке, а метод Draw() не выполняет никаких действий. Давайте подумаем, можно ли в принципе нарисовать форму? Можно нарисовать окружность, прямоугольник или квадрат, но форма — это абстракция, которую невозможно изобразить. Класс Circle производится от класса Shape, и в нем замещаются три виртуальных метода. Обратите внимание, что в данном случае нет необходимости использовать ключевое слово virtual, поскольку виртуальность функций наследуется в производном классе. Тем не менее для напоминания о виртуальности используемых функций не лишним будет явно указать это. Класс Square производится от класса Rectangle и наследует от него все методы, причем метод GetPerim() замещается в новом классе. Все методы должны функционировать нормально в производных классах, но не в базовом классе Shape, поскольку невозможно создать экземпляр формы как таковой. Программа должна быть защищена от попытки пользователя создать объект этого класса. Класс Shape существует только для того, чтобы поддерживать интерфейс, общий для всех производных классов, поэтому об этом типе данных говорят как об абстрактном, или ADT (Abstract Data Туре). Абстрактный класс данных представляет общую концепцию, такую как форма, а не отдельные объекты, такие как окружность или квадрат. В C++ ADT по отношению к другим классам всегда выступает как базовый, для которого невозможно создать функциональный объект абстрактного класса.
|