Студопедия — Реализация функций-членов класса
Студопедия Главная Случайная страница Обратная связь

Разделы: Автомобили Астрономия Биология География Дом и сад Другие языки Другое Информатика История Культура Литература Логика Математика Медицина Металлургия Механика Образование Охрана труда Педагогика Политика Право Психология Религия Риторика Социология Спорт Строительство Технология Туризм Физика Философия Финансы Химия Черчение Экология Экономика Электроника

Реализация функций-членов класса






 

 

Необходимо определять вторую часть спецификации класса, т.е. предоставлять код для тех функций-членов, которые описаны с помощью прототипов в объявлении класса. Определения функций-членов очень похожи на определения обычных функций. Каждое из них имеет заголовок и тело. Определения функций-членов могут иметь тип возврата и аргументы. Но, кроме того, с ними связаны две специфических характеристики. 1. При определении функции-члена для идентификации класса, которому принадлежит функция, используется операция разрешения контекста (::). 2. Методы класса имеют доступ к private-компонентам класса.

Рассмотрим все это подробнее. В заголовке функции-члена для идентификации класса, которому она принадлежит, применяется операция разрешения контекста (::). Например, заголовок для функции-члена update () выглядит следующим образом:

Эта нотация означает, что вы определяете функцию update (), которая является членом класса Stock. Но это означает не только то, что функция update () является функцией-членом, но также и то, что такое же имя можно использовать для функций-членов другого класса. Например, функция update() для класса Button будет иметь следующий заголовок:

 

 

Таким образом, операция разрешения контекста идентифицирует класс, к которому данный метод относится. Говорят, что идентификатор update () имеет область видимости класса. Другие функции-члены класса Stock могут при необходимости использовать метод update () без операции разрешения контекста. Это связано с тем, что они принадлежат одному классу, и, следовательно, имеют общую область видимости. Использование update () за пределами объявления класса и определений методов, однако, требует соблюдения специальных мер.

Единственный способ однозначного разрешения имен методов — использовать полное имя, включающее имя класса. Stock::update() называется уточненным именем функции. Простое имя update(), с другой стороны, является сокращением (неуточненным именем) полного имени и может применяться только в контексте класса.

Следующей специальной характеристикой методов является то, что метод может иметь доступ к закрытым членам класса. Например, метод show() может использовать код вроде следующего:

 

 

Здесь company, shares и т.д. являются закрытыми данными-членами класса Stock. Если вы попытаетесь воспользоваться для доступа к этим данным-членам функцией, которая не является членом, то компилятор воспрепятствует этому (исключением являются дружественные функции).

Памятуя об этих двух обстоятельствах, методы класса можно реализовать, как показано в примере 1.2. Эти определения методов могут быть помещены в отдельный файл либо в тот же файл, где находится объявление класса. В данном примере они помещены в отдельный файл реализации, поэтому в нем потребуется включить заголовочный файл stock00.h, чтобы компилятор имел доступ к определению класса. Для демонстрации возможности работы с пространствами имен в одних методах используется квалификатор std::, а в других — объявления using.

Пример 1.2 (stocks00.cpp).

 

Функция acquire() управляет первоначальной покупкой пакета акций некоторой компании, в то время как buy() и sell() — дополнительной покупкой и продажей акций из существующего пакета. Методы buy() и sell() гарантируют, что количество купленных или проданных акций не будет отрицательным. Кроме того, если пользователь пытается продать больше акций, чем у него есть, функция sell() отменит транзакцию. Объявление данных закрытыми и ограничения доступа к открытым функциям предоставляет контроль над использованием данных. В данном случае это позволяет предпринять защитные меры против недопустимых транзакций.

Четыре из определенных функций-членов устанавливают или сбрасывают значение члена totalval. Вместо того чтобы повторять в коде вычисление этого значения четыре раза, каждая из открытых функций-членов вызывает функцию set_tot(). Поскольку эта функция представляет собой просто реализацию внутреннего кода, а не является частью открытого интерфейса, в классе она объявлена как закрытая функция-член. То есть set_tot() представляет собой функцию-член, которая используется разработчиком класса, но не теми, кто пишет код, использующий класс. Если вычисления, выполняемые функцией, оказываются сложными, это поможет также уменьшить общий объем исходного кода. Однако здесь главное в том, что за счет использования вызова этой функции вместо повторения кода вычислений обеспечивается гарантия того, что всегда будет применяться абсолютно идентичный алгоритм. Кроме того, если его понадобится изменить, это нужно будет сделать только в одном месте.

 







Дата добавления: 2015-09-19; просмотров: 472. Нарушение авторских прав; Мы поможем в написании вашей работы!



Расчетные и графические задания Равновесный объем - это объем, определяемый равенством спроса и предложения...

Кардиналистский и ординалистский подходы Кардиналистский (количественный подход) к анализу полезности основан на представлении о возможности измерения различных благ в условных единицах полезности...

Обзор компонентов Multisim Компоненты – это основа любой схемы, это все элементы, из которых она состоит. Multisim оперирует с двумя категориями...

Композиция из абстрактных геометрических фигур Данная композиция состоит из линий, штриховки, абстрактных геометрических форм...

Интуитивное мышление Мышление — это пси­хический процесс, обеспечивающий познание сущности предме­тов и явлений и самого субъекта...

Объект, субъект, предмет, цели и задачи управления персоналом Социальная система организации делится на две основные подсистемы: управляющую и управляемую...

Законы Генри, Дальтона, Сеченова. Применение этих законов при лечении кессонной болезни, лечении в барокамере и исследовании электролитного состава крови Закон Генри: Количество газа, растворенного при данной температуре в определенном объеме жидкости, при равновесии прямо пропорциональны давлению газа...

Билиодигестивные анастомозы Показания для наложения билиодигестивных анастомозов: 1. нарушения проходимости терминального отдела холедоха при доброкачественной патологии (стенозы и стриктуры холедоха) 2. опухоли большого дуоденального сосочка...

Сосудистый шов (ручной Карреля, механический шов). Операции при ранениях крупных сосудов 1912 г., Каррель – впервые предложил методику сосудистого шва. Сосудистый шов применяется для восстановления магистрального кровотока при лечении...

Трамадол (Маброн, Плазадол, Трамал, Трамалин) Групповая принадлежность · Наркотический анальгетик со смешанным механизмом действия, агонист опиоидных рецепторов...

Studopedia.info - Студопедия - 2014-2024 год . (0.008 сек.) русская версия | украинская версия