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

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

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






 

 

Необходимо определять вторую часть спецификации класса, т.е. предоставлять код для тех функций-членов, которые описаны с помощью прототипов в объявлении класса. Определения функций-членов очень похожи на определения обычных функций. Каждое из них имеет заголовок и тело. Определения функций-членов могут иметь тип возврата и аргументы. Но, кроме того, с ними связаны две специфических характеристики. 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; просмотров: 473. Нарушение авторских прав; Мы поможем в написании вашей работы!



Аальтернативная стоимость. Кривая производственных возможностей В экономике Буридании есть 100 ед. труда с производительностью 4 м ткани или 2 кг мяса...

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

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

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

Ситуация 26. ПРОВЕРЕНО МИНЗДРАВОМ   Станислав Свердлов закончил российско-американский факультет менеджмента Томского государственного университета...

Различия в философии античности, средневековья и Возрождения ♦Венцом античной философии было: Единое Благо, Мировой Ум, Мировая Душа, Космос...

Характерные черты немецкой классической философии 1. Особое понимание роли философии в истории человечества, в развитии мировой культуры. Классические немецкие философы полагали, что философия призвана быть критической совестью культуры, «душой» культуры. 2. Исследовались не только человеческая...

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

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

Ганглиоблокаторы. Классификация. Механизм действия. Фармакодинамика. Применение.Побочные эфффекты Никотинчувствительные холинорецепторы (н-холинорецепторы) в основном локализованы на постсинаптических мембранах в синапсах скелетной мускулатуры...

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