![]() Главная страница Случайная страница Разделы сайта АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторикаСоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника |
Привилегированные функции
При написании программ могут встретиться ситуации, когда желательно иметь доступ к личным данным класса, минуя функции-члены этого класса. В частности, бывают случаи, когда необходимо выполнить некоторые действия, используя личные данные разных классов, то есть иметь одновременный доступ к личным данным нескольких классов. Наиболее распространенной является ситуация, когда функции-члены одного класса должны иметь доступ к личным членам другого класса. Язык предоставляет для некоторых функций (как обычных, так и являющихся членами какого-либо класса X) возможность получения доступа к личным членам класса Y. Такая функция называется привилегированной в классе Y. Для объявления привилегированной функции используется служебное слово friend. Например: class Y {//... friend void func (); //... }; Достаточно распространенной является ситуация, когда все функции-члены одного класса X являются привилегированными в другом классе Y. На этот случай предусмотрена упрощенная форма записи: class Y { friend X; }; Объявление привилегированной функции должно находиться только в определении класса. Следует иметь в виду, что привилегированная функция хотя и объявлена внутри класса, но она не является членом этого класса. Поэтому не имеет значения, в какой части класса (личной или общей) объявлена привилегированная функция. Как правило, объявления привилегированных функций помещают после заголовка класса. Одна и та же функция может быть объявлена привилегированной сразу в нескольких классах. Разницу в способе использования функций-членов класса и привилегированных функций рассмотрим на следующем примере: class Cl ; { // f_func - не личный член класса, несмотря // на его объявление в личной части класса: friend void f_func (Cl*, int); int numb; //Личный член класса Cl public: Забиваем Сайты В ТОП КУВАЛДОЙ - Уникальные возможности от SeoHammer
Каждая ссылка анализируется по трем пакетам оценки: SEO, Трафик и SMM.
SeoHammer делает продвижение сайта прозрачным и простым занятием.
Ссылки, вечные ссылки, статьи, упоминания, пресс-релизы - используйте по максимуму потенциал SeoHammer для продвижения вашего сайта.
Что умеет делать SeoHammer
— Продвижение в один клик, интеллектуальный подбор запросов, покупка самых лучших ссылок с высокой степенью качества у лучших бирж ссылок. — Регулярная проверка качества ссылок по более чем 100 показателям и ежедневный пересчет показателей качества проекта. — Все известные форматы ссылок: арендные ссылки, вечные ссылки, публикации (упоминания, мнения, отзывы, статьи, пресс-релизы). — SeoHammer покажет, где рост или падение, а также запросы, на которые нужно обратить внимание. SeoHammer еще предоставляет технологию Буст, она ускоряет продвижение в десятки раз, а первые результаты появляются уже в течение первых 7 дней. Зарегистрироваться и Начать продвижение void m_func (int); }; //Обратите внимание на способ доступа к личному члену //класса numb из функции-члена класса m_func и из //привилегированной в этом классе функции f_func: void f_func (Cl* cptr, int i) { cptr -> numb = i; //Необходим явный указатель на //объект } void Cl:: m_func (int i) {.. " '" ' '; , numb = i; > void main (} { Cl obj; //Сравните способы вызова и аргументы функций: f_func(& obj, 10); obj.m_func (10); } Указание на то, что функция является привилегированной, не транзитивно: если функции класса X являются привилегированными в классе Y, а функции класса Y - в классе Z, то это не означает, что функции класса X при-вилегированы в Z. Использование спецификатора класса памяти static при объявлении членов класса (статические члены классов) Класс памяти определяет, какое время жизни имеет объект: локальное или глобальное и из каких частей программы на него можно ссылаться. Объект с глобальным временем жизни существует на протяжении выполнения всей программы. Память локальным переменным выделяется при входе в блок или во время вызова функций в программном стеке. При завершении функции или при выходе из блока память в стеке, отведенная локальным переменным, освобождается. Исключение составляют статические локальные переменные (объявленные со спецификатором памяти static), которые имеют постоянную память, но доступ к ним ограничен областью видимости этой локальной переменной. Спецификатор класса памяти static можно использовать в определении класса с данными-членами класса и с функциями-членами класса. Такие члены называются статическими.
|