Читаем С++ для "чайников" . полностью

<p id="chapter22.3.4"><strong><emphasis>Разделение программы - класс GraduateStudent...262</emphasis></strong></p>

Следующий модуль, представляющийся квазинезависимым, — GraduateStudent. Он может быть помещён в файл Student.срр, однако ряд программ могут работать только со студентами, даже не подозревая о наличии аспирантов.

Класс GraduateStudent сделан мною максимально простым. Вот как выглядит заголовочный файл.

    /* GraduateStudent — специальный тип Student */

    #ifndef _GRADUATE_STUDENT_

    #define _GRADUATE_STUDENT_

    #include "student.h"

    namespace Schools

    {

        class GraduateStudent : public Student

        {

          public :

            /* Тривиальный конструктор */

            GraduateStudent( char* pszName , int nID )

                         : Student( pszName , nID ){ }

            /* Демонстрация виртуальной функции */

            virtual char* display( ) ;

        } ;

    }

    #endif

Обратите внимание, что файл GraduateStudent.h включает файл Student.h. Это связано с тем, что класс GraduateStudent зависит от определения класса Student. Файл с исходным кодом содержит реализацию метода display( ).

    /* GraduateStudent — специальный тип Student */

    #include

    #include

    #include

    #include

    #include "graduateStudent.h"

    namespace Schools

    {

        char* GraduateStudent::display( )

        {

            /* Описание студента */

            char* pFirst = Student::display( ) ;

            /* Добавляем этот текст */

            char* pSecond = "-G" ;

            /* Выделяем память для новой строки и создаём её */

            char* pName = new char[ strlen( pFirst ) +

                                  strlen( pSecond ) + 1 ] ;

            strcpy( pName , pFirst ) ;

            strcat( pName , pSecond ) ;

            /* Освобождаем память, которую вернул вызов Student::display( ) */

            delete pFirst ;

            return pName ;

        }

    }

_________________

262 стр. Часть 4. Наследование

Функция display( ) из класса GraduateStudent добавляет "-G" к строке, возвращаемой функцией display( ) из класса Student. Она начинает свою работу с того, что выделяет память из кучи для новой строки.

«Никогда не надо полагаться на то, что в исходном буфере имеется достаточно места для дополнительных символов, дописываемых в конец строки.»

[Атас!]

Программа копирует в новый буфер полученную от функции display( ) из класса Student строку, добавляет к ней "-G" и освобождает память, которую занимала исходная строка.

«Забыв освободить память, выделенную в куче, вы получите эффект, именуемый утечкой памяти. Программа с утечкой памяти поначалу работает вполне корректно, но со временем всё большее и большее количество памяти оказывается потерянным, что может привести к неработоспособности программы из-за отсутствия памяти. Обычно утечки памяти очень трудно обнаружить.»

[Атас!]

<p id="chapter22.3.5"><strong><emphasis>Реализация приложения...263</emphasis></strong></p>

Два класса — Student и GraduateStudent — разнесены по отдельным исходным файлам и размещены в пространстве имён Schools. Я написал простенькую программу, использующую оба описанных класса.

    //

    /* SeparatedMain — демонстрационное приложение, */

    /*                 разделённое на части */

    //

    #include

    #include

    #include

    #include

    #include "graduateStudent.h"

    #include "student.h"

    using namespace std ;

    /* using namespace Schools ; */

    using Schools::GraduateStudent ;

    int main( int nArgc , char* pszArgs[ ] )

    {

        Schools::Student s( "Sophie Moore" , 1234 ) ;

Перейти на страницу:

Все книги серии Для чайников

Похожие книги

1С: Бухгалтерия 8 с нуля
1С: Бухгалтерия 8 с нуля

Книга содержит полное описание приемов и методов работы с программой 1С:Бухгалтерия 8. Рассматривается автоматизация всех основных участков бухгалтерии: учет наличных и безналичных денежных средств, основных средств и НМА, прихода и расхода товарно-материальных ценностей, зарплаты, производства. Описано, как вводить исходные данные, заполнять справочники и каталоги, работать с первичными документами, проводить их по учету, формировать разнообразные отчеты, выводить данные на печать, настраивать программу и использовать ее сервисные функции. Каждый урок содержит подробное описание рассматриваемой темы с детальным разбором и иллюстрированием всех этапов.Для широкого круга пользователей.

Алексей Анатольевич Гладкий

Программирование, программы, базы данных / Программное обеспечение / Бухучет и аудит / Финансы и бизнес / Книги по IT / Словари и Энциклопедии
1С: Управление торговлей 8.2
1С: Управление торговлей 8.2

Современные торговые предприятия предлагают своим клиентам широчайший ассортимент товаров, который исчисляется тысячами и десятками тысяч наименований. Причем многие позиции могут реализовываться на разных условиях: предоплата, отсрочка платежи, скидка, наценка, объем партии, и т.д. Клиенты зачастую делятся на категории – VIP-клиент, обычный клиент, постоянный клиент, мелкооптовый клиент, и т.д. Товарные позиции могут комплектоваться и разукомплектовываться, многие товары подлежат обязательной сертификации и гигиеническим исследованиям, некондиционные позиции необходимо списывать, на складах периодически должна проводиться инвентаризация, каждая компания должна иметь свою маркетинговую политику и т.д., вообщем – современное торговое предприятие представляет живой организм, находящийся в постоянном движении.Очевидно, что вся эта кипучая деятельность требует автоматизации. Для решения этой задачи существуют специальные программные средства, и в этой книге мы познакомим вам с самым популярным продуктом, предназначенным для автоматизации деятельности торгового предприятия – «1С Управление торговлей», которое реализовано на новейшей технологической платформе версии 1С 8.2.

Алексей Анатольевич Гладкий

Финансы / Программирование, программы, базы данных