LoveRead.info » Книги » Разная литература » Интернет-журнал "Домашняя лаборатория", 2007 №6 - Вязовский

Интернет-журнал "Домашняя лаборатория", 2007 №6 - Вязовский

Книгу Интернет-журнал "Домашняя лаборатория", 2007 №6 - Вязовский читаем онлайн бесплатно полную версию! Чтобы начать читать не надо регистрации. Напомним, что читать онлайн вы можете не только на компьютере, но и на андроид (Android), iPhone и iPad. Приятного чтения!

138 0 18:00, 07-12-2022
Интернет-журнал "Домашняя лаборатория", 2007 №6 - Вязовский
07 декабрь 2022

Книга Интернет-журнал "Домашняя лаборатория", 2007 №6 - Вязовский читать онлайн бесплатно без регистрации

Большой и увлекательный, научно-прикладной и образовательный, но некоммерческий интернет-журнал, созданный группой энтузиастов. Интернет-журнал содержит материалы, найденные в Интернет или написанные для Интернет. Основная тематика статей — то, что можно сделать самому, от садовых поделок до сверхпроводников, но есть и просто полезные материалы.

    1 ... 192 193 194 195 196 197 198 199 200 ... 361
    Перейти на страницу:

    // Книга

    typedef struct {

         char szAuthor[MAX_LENGTH]; // автор

         char szTitle[MAX_LENGTH]; // название

         int nYear; // год издания

    } Book;

    // Журнал

    typedef struct {

         char szTitle[MAX LENGTH]; // название

         int nYear; // год выпуска

         int nNumber// номер;

    } Journal;

    // Массив изданий

    typedef struct {

          int nPubldx; // индекс издания (1 — книга, 2 — журнал)

          void* pPub; // указатель на издание

    } Pub;

    Pub aPub[MAX ID];

    int nNewID = 0; // индекс нового издания

    // Прототипы глобальных функций

    void DisplayBook(Book &book); // вывод описания книги

    void DisplayJournal(Journal Sjournal); // вывод описания журнала

    void NewBook(); // ввод данных о новой книге

    void NewJournal; // ввод данных о новом журнале

    // Главная функция

    void main() {

         Book *pBook;

         Journal *pJournal;

         int nMenu, flag = 1;

         while(nNewID < MAX_ID && flag)

         {

    // Вывод пунктов меню

              cout << "Новое издание. Введите: " << endl;

              cout << "1 для книги,n 2 для журналаn 3 — выход" << endl;

    // Выбор пункта меню

             сin >> nMenu;

             switch (nMenu)

             { case 1: NewBook(); break;

             case 2: NewJournal(); break;

             default: flag = 0; break;

             }

         }

    // Вывод описаний изданий

         for (int id = 0; id < nNewID; id++)

         {

             switch (aPub[id].nPubldx)

             { case 1: pBook = (Book*) aPub[id].pPub;

                      DisplayBook(*pBook);

                      delete pBook;

                      break;

                case 2: pJournal = (Journal*) aPub[id].pPub;

                       DisplayJournal(*pJournal);

                       delete pJournal;

                       break;

               }

          }

    }

    // Реализация глобальных функций

    void DisplayBook(Book &book) {

         cout << "BOOK: " << endl;

         cout << "Author: " << book.szAuthor << endl;

         cout << "Title: " << book.szTitle << endl;

         cout << "Year: " << book.nYear << endl;

    }

    void DisplayJournal(Journal Sjournal) {

         cout «"JOURNAL: " << endl;

         cout <<"Title: " << journal.szTitle << endl;

         cout << "Year: " << journal.nYear << endl;

         cout << "Number: " << journal.nNumber << endl;

    }

    void NewBook() {

         char szBuffer[MAX LENGTH];

         int nY;

         Book* pBook = new Book;

         cout << "Author: ";

         cin >> szBuffer;

         strcpy(pBook —> szAuthor, szBuffer);

         cout << "Title: ";

         cin >> szBuffer;

         strcpy(pBook — > szTitle, szBuffer);

         cout << "Year: "; cin >> nY;

         pBook —> nYear = nY;

         aPub[nNewID].nPubldx = 1;

         aPub[nNewID++].pPub = pBook;

    }

         void NewJournal() {

         char szBuffer[MAX_LENGTH];

         int nY, nN;

          Journal* pJournal = new Journal;

          cout << "Title: ";

          cin >> szBuffer;

          strcpy(pJournal —> szTitle, szBuffer);

          cout << "Year: "; cin >> nY;

          pJournal —> nYear = nY;

          cout << "Number: "; cin >> nN;

          pJournal —> nNumber = nN;

          aPub[nNewID].nPubldx = 2;

          aPub[nNewID++].pPub = pJournal;

    }

    Данный код содержит ряд недостатков, которые (хотя бы отчасти) можно объяснить стремлением придерживаться процедурного подхода

    • Наличие нескольких глобальных функций и связанных с ними глобальных данных

    Основная особенность процедурного подхода состоит раздельном хранении функций и данных. Программист должен заботиться о том, чтобы при вызове некоторой функции передать ей нужные данные. При наличии нескольких десятков типов изданий понадобилось бы определить несколько десятков глобальных функций, что весьма затруднило бы работу программиста.

    • Хранение в массиве aPub не только указателя на издание (void* pPub), но и информации о типе издания (int nPubldx)

    Информация о типе необходима для выполнения явного преобразования типа

    pBook = (Book*) aPub[id].pPub,

    pJournal = (Journal*) aPub[id].pPub,

    которое необходимо использовать и при выводе описаний изданий и при освобождении динамически выделенной памяти.

    Объектно-ориентированное программирование

    Теперь рассмотрим объектную реализацию предыдущей программы. Проект включает в три класса: базовый класс CPubiication и производные от него классы CBоок и CJournal, главной функции в файле publications.срр реализуется основная бизнес-логика.

    // Заголовочный файл CPublication.h для класса CPublication

    #ifndef _CPUBLICATION_

    #define _CPUBLICATION_

    #define MAX LENGTH 100 // максимальное число символов в имени автора и названии публикации

    // Базовый класс

    class CPublication

    {

    public:

         CPublication (); // конструктор

         virtual ~CPublication(); // деструктор

         virtual void Display (); // вывод описания публикации

    protected:

         char m_szTitle[MAX_LENGTH]; //название публикации

         int m_nYear; // год издания

    };

    #endif

    Следующий файл содержит реализацию класса CPublication

    // Файл CPublication.срр — реализация класса CPublication

    #include "CPublication.h"

    #include <iostream.h>

    // Конструктор

    CPublication::CPublication()

    {

    // Ввод года издания и названия

         cout << "Year: ";

         cin >> m_nYear;

         cout << "Title;";

         cin >> m_szTitle;

    }

    // Деструктор

    CPublication::~CPublication ()

    {

    }

    // Вывод описания публикации

    void CPublication::Display()

    {

         cout << "PUBLICATION: " << endl;

         cout << "Title: "<< m_szTitle << endl;

         cout << "Year: "<< m_nYear «endl;

    }

    Файлы CBook.h и CBook.cpp задают класс CBook.

    // СВоок.h

    #ifndef _СВООК_

    #define _СВООК_

    #include "CPublication.h"

    class CBook: public CPublication // класс CBook — производный от CPublication

    {

    public:

         CBook(); //

    1 ... 192 193 194 195 196 197 198 199 200 ... 361
    Перейти на страницу:
    1. Жалоба
    Отзывы - 0

    Прочитали книгу? Предлагаем вам поделится своим отзывом от прочитанного(прослушанного)! Ваш отзыв будет полезен читателям, которые еще только собираются познакомиться с произведением.


    Уважаемые читатели, слушатели и просто посетители нашей библиотеки! Просим Вас придерживаться определенных правил при комментировании литературных произведений.

    • 1. Просьба отказаться от дискриминационных высказываний. Мы защищаем право наших читателей свободно выражать свою точку зрения. Вместе с тем мы не терпим агрессии. На сайте запрещено оставлять комментарий, который содержит унизительные высказывания или призывы к насилию по отношению к отдельным лицам или группам людей на основании их расы, этнического происхождения, вероисповедания, недееспособности, пола, возраста, статуса ветерана, касты или сексуальной ориентации.
    • 2. Просьба отказаться от оскорблений, угроз и запугиваний.
    • 3. Просьба отказаться от нецензурной лексики.
    • 4. Просьба вести себя максимально корректно как по отношению к авторам, так и по отношению к другим читателям и их комментариям.

    Надеемся на Ваше понимание и благоразумие. С уважением, администратор LoveRead.info.


    Установить VPN и читай слушай бесплатно

    Новые отзывы

    1. Валентина Валентина04 июль 13:25 Большое спасибо за интересную тему.  Сюжет заманчиввй,интересный. Жду продолжения ... Лекарь Фамильяров. Том 7 - Александр Лиманский
    2. Наталья По Наталья По01 июль 10:12 Ужасный перевод:(... Аркадия - Эрин Дум
    3. Вика Вика29 июнь 21:56 Какая хрень с первых строк.  У ребенка в 14 месяце не может быть черепно мозговой травмы при падании с дивана ... Вернуть семью любой ценой - Чарли Ви
    Все комметарии
    Новинки бесплатной онлайн библиотеки