Главная страница Случайная страница Разделы сайта АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторикаСоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника |
💸 Как сделать бизнес проще, а карман толще?
Тот, кто работает в сфере услуг, знает — без ведения записи клиентов никуда. Мало того, что нужно видеть свое раписание, но и напоминать клиентам о визитах тоже.
Проблема в том, что средняя цена по рынку за такой сервис — 800 руб/мес или почти 15 000 руб за год. И это минимальный функционал.
Нашли самый бюджетный и оптимальный вариант: сервис VisitTime.⚡️ Для новых пользователей первый месяц бесплатно. А далее 290 руб/мес, это в 3 раза дешевле аналогов. За эту цену доступен весь функционал: напоминание о визитах, чаевые, предоплаты, общение с клиентами, переносы записей и так далее. ✅ Уйма гибких настроек, которые помогут вам зарабатывать больше и забыть про чувство «что-то мне нужно было сделать». Сомневаетесь? нажмите на текст, запустите чат-бота и убедитесь во всем сами! Листинг 13.4. Создание объектов при множественном наследовании
1: // Листинг 13.4. 2: // Создание обьектов при множественном наследовании 3: #include < iostream.h> 4: typedef int HANDS; 5: enum COLOR { Red, Green, Blue, Yellow, White, Black, Brown }; 6: 7: class Horse 8: { 9: public: 10: Horse(COLOR color, HANDS height); 11: virtual ~Horse() { cout < < " Horse destructor...\n"; } 12: virtual void Whinny()const { cout < < " Whinny!... "; } 13: virtual HANDS GetHeight() const { return itsHeight; } 14: virtual COLOR GetColor() const { return itsColor; } 15: private: 16: HANDS itsHeight; 17: COLOR itsColor; 18: }; 19: 20: Horse:: Horse(COLOR color, HANDSheight): 21: itsColor(color), itsHeight(height) 22: { 23: cout < < " Horse constructor...\n"; 24: } 25: 26: class Bird 27: { 28: public: 29: Bird(COLOR color, bool migrates); 30: virtual ~Bird() { cout < < " Bird destructor...\n"; } 31: virtual void Chirp()const { cout < < " Chirp... "; } 32: virtual void Fly()const 33: { 34: cout < < " I can fly! I can fly! I can fly! "; 35: } 36: virtual COLOR GetColor()const { return itsColor; } 37: virtual bool GetMigration() const { return itsMigration; } 38: 39: private: 40: COLOR itsColor; 41: bool itsMigration; 42: }; 43: 44: Bird:: Bird(COLOR color, bool migrates): 45: itsColor(color), itsMigration(migrates) 46: { 47: cout < < " Bird constructor...\n"; 48: } 49: 50: class Pegasus: public Horse, public Bird 51: { 52: public: 53: void Chirp()const { Whinny(); } 54: Pegasus(COLOR, HANDS, bool, long); 55: ~Pegasus() { cout < < " Pegasus destructor...\n"; } 56: virtual long GetNumberBelievers() const 57: { 58: return itsNumberBelievers; 59: } 60: 61: private: 62: long itsNumberBelievers; 63: }; 64: 65: Pegasus:: Pegasus( 66: COLOR aColor, 67: HANDS height, 68: bool migrates, 69: long NumBelieve): 70: Horse(aColor, height), 71: Bird(aColor, migrates), 72: itsNumberBelievers(NumBelieve) 73: { 74: cout < < " Pegasus constructor...\n"; 75: } 76: 77: int main() 78: { 79: Pegasus *pPeg = new Pegasus(Red, 5, true, 10); 80: pPeg-> Fly(); 81: pPeg-> Whinny(); 82: cout < < " \nYour Pegasus is " < < pPeg-> GetHeight(); 83: cout < < " hands tall and "; 84: if (pPeg-> GetMigration()) 85: cout < < " it does migrate."; 86: else 87: cout < < " it does not migrate."; 88: cout < < " \nA total of " < < pPeg-> GetNumberBelievers(); 89: cout < < " people believe it exists.\n"; 90: delete pPeg; 91: return 0; 92: }
Результат: Horse constructor... Bird constructor... Pegasus constructor... I can fly! I can fly! I can fly! Whinny!... Your Pegasus is 5 hands tall and it does migrate. A total of 10 people believe it exists. Pegasus destructor... Bird destructor... Horse destructor...
Анализ: Класс Horse объявляется в строках 7—18. Конструктор этого класса принимает два параметра: один из них — это перечисление, объявленное в строке 5, а второй — новый тип, объявленный с помощью typedef в строке 4. Этот конструктор выполняется в строках 20—24. При этом инициализируется одна переменная-член и на экран выводится сообщение о работе конструктора класса Horse. В строках 26—42 объявляется класс Bird, конструктор которого выполняется в строках 45—49. Конструктор этого класса также принимает два параметра. Обратите внимание на интересный факт: конструкторы обоих классов принимают перечисления цветов, с помощью которых в программе можно установить цвет лошади или цвет перьев у птицы. В результате, когда вы попытаетесь установить цвет Пегаса, может возникнуть проблема в работе программы, которая обсуждается несколько ниже. Класс Pegasus объявляется в строках 50—63, а его конструктор — в строках 65—75. Инициализация объекта Pegasus выполняется тремя строками программы. Сначала конструктор класса Horse определяет цвет и рост. Затем конструктор класса Bird инициализируется цветом перьев и логической переменной. Наконец, происходит инициализация переменной-члена itsNumberBelievers, относящейся к классу Pegasus. После всех этих операций вызывается конструктор класса Pegasus. В функции main() создается указатель на класс Pegasus, который используется для получения доступа к функциям-членам базовых объектов.
|