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

        float addCourse( int hours , float grade )

        {

            /* Вызвать внешнюю функцию */

            weightedGPA = addCourse( semesterHours , gpa ) ;

            /* Вызвать ту же функцию для подсчёта оценки с  учётом нового курса */

            weightedGPA += addCourse( hours , grade ) ;

            gpa = weightedGPA / semesterHours ;

            /* Вернуть новую оценку */

            return gpa ;

        }

    } ;

В этом фрагменте я хотел, чтобы функция-член Student::addCourse( ) вызывала функцию — не член ::addCourse( ). Без оператора :: вызов функции addCourse( ) внутри класса Student приведёт к вызову функции Student::addCourse( ).

«Функция-член может использовать для обращения к другому члену класса сокращённое имя, подразумевающее использование имени текущего экземпляра класса.»

[Помни!]

В данном случае вызов функции без указания имени класса приводит к тому, что она вызывает саму себя. Добавление оператора :: в начале имени заставляет осуществить вызов глобальной версии этой функции ( что нам и нужно ):

    /* addCourse — перемножает количество часов и оценку */

    float addCourse( int hours , float grade )

    {

        return hours*grade ;

    }

_________________

161 стр. Глава 13. Работа с классами

    class Student

    {

    public :

        int semesterHours ;

        float gpa ;

        /* Добавить пройденный курс к записи */

        float addCourse( int hours , float grade )

        {

            /* Вызвать внешнюю функцию */

            weightedGPA = ::addCourse( semesterHours , gpa ) ;

            /* Вызвать ту же функцию для подсчёта оценки с учётом нового курса */

            weightedGPA += ::addCourse( hours , grade ) ;

            gpa = weightedGPA / semesterHours ;

            /* Вернуть новую оценку */

            return gpa ;

        }

    } ;

Это похоже на то, как если бы я звал Стефана в собственном доме. Все решили бы, что я зову самого себя: ведь в моём доме, естественно, подразумевается фамилия Дэвис. Если же я имею в виду какого-то другого Стефана, то должен сказать "Стефан Спупендайк" или "Стефан Мак-Суини" либо использовать какую-нибудь другую фамилию. Так же действует и оператор разрешения области видимости.

«Расширенное имя функции включает в себя её аргументы. Теперь же мы добавляем к полному имени ещё и имя класса, к которому принадлежит функция.»

 [Помни!]

<p id="chapter13.5"><strong>►Определение функции-члена...162</strong></p>

Функция-член может быть определена как внутри класса, так и отдельно от него. Когда функция определяется внутри класса, это выглядит так, как в приведённом далее файле Savings.h:

    /* Savings — определение класса с возможностью делать вклады */

    class Savings

    {

        public :

            /* Объявляем и определяем функции-члены */

            float deposit( float amount )

            {

                balance += amount ;

                return balance ;

            }

            unsigned int accountNumber ;

            float balance ;

    } ;

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

_________________

162 стр. Часть 3. Введение в классы

    /* SavingsClassInline — вызов фукции-члена, объявленной и определённой в классе Savings */

    #include

    #include

    #include

    using namespace std ;

    #include " Savings.h "

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

    {

        /* печать кириллицы, если Вы не установите программки gccrus.exe и g++rus.exe */

        setlocale (LC_ALL,".1251");

        Savings s ;

        s.accountNumber = 123456 ;

        s.balance = 0.0 ;

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

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

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

Разработка приложений в среде Linux. Второе издание
Разработка приложений в среде Linux. Второе издание

Книга известных профессионалов в области разработки коммерческих приложений в Linux представляет СЃРѕР±РѕР№ отличный справочник для широкого круга программистов в Linux, а также тех разработчиков на языке С, которые перешли в среду Linux из РґСЂСѓРіРёС… операционных систем. РџРѕРґСЂРѕР±но рассматриваются концепции, лежащие в основе процесса создания системных приложений, а также разнообразные доступные инструменты и библиотеки. Среди рассматриваемых в книге вопросов можно выделить анализ особенностей применения лицензий GNU, использование СЃРІРѕР±одно распространяемых компиляторов и библиотек, системное программирование для Linux, а также написание и отладка собственных переносимых библиотек. Р

Майкл К. Джонсон , Эрик В. Троан

Программирование, программы, базы данных
Adobe Flash. Создание аркад, головоломок и других игр с помощью ActionScript
Adobe Flash. Создание аркад, головоломок и других игр с помощью ActionScript

Данная книга посвящена программированию игр с помощью ActionScript. Здесь вы найдете подробные указания, необходимые для создания самых разных игр – аркад, головоломок, загадок и даже игровых автоматов. В тексте приведены исходные коды программ и детальные, доступно изложенные инструкции. Базовые принципы программирования ActionScript рассматриваются на примере игр, однако вы без труда сможете применить полученные знания и для разработки неигровых проектов, таких как Web-дизайн и реклама. Рекомендации Гэри Розенцвейга помогут вам не только придумывать занимательные игры и размещать их на Web-сайте, но и оптимизировать скорость их работы, а также защищать свои творения от несанкционированного копирования. Представленный в книге код несложно изменить для использования в других программах.Книга предназначена для широкого круга читателей – создателей анимационных роликов, художников-оформителей, программистов и разработчиков Web-сайтов. Издание может также выступать в качестве практического пособия по изучению ActionScript.

Гэри Розенцвейг

Программирование, программы, базы данных / Программирование / Книги по IT
Язык программирования Euphoria. Справочное руководство
Язык программирования Euphoria. Справочное руководство

Euphoria (юфо'ри, также рус. эйфори'я, ра'дость) — язык программирования, созданный Робертом Крейгом (Rapid Deployment Software) в Канаде, Торонто. Название Euphoria — это акроним для «End-User Programming with Hierarchical Objects for Robust Interpreted Applications».Euphoria — интерпретируемый императивный язык высокого уровня общего назначения. C помощью транслятора из исходного кода на Euphoria может быть сгенерирован исходный код на языке Си, который в свою очередь может быть скомпилирован в исполнияемый файл или динамическую библиотеку при помощи таких компиляторов, как GCC, OpenWatcom и др. Программа Euphoria также может быть «связана» с интерпретатором для получения самостоятельного исполняемого файла. Поддерживается несколько GUI-библиотек, включая Win32lib и оберток для wxWidgets, GTK+ и IUP. Euphoria имеет встроенную простую систему баз данных и обертки для работы с другими типам баз данных.[Материал из Википедии]

Коллектив авторов

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