Архитектура Аудит Военная наука Иностранные языки Медицина Металлургия Метрология
Образование Политология Производство Психология Стандартизация Технологии


Глава 20. Статические члены 213




static Student *pFirst;

*pNext;

char

 

Student* Student::pFirst 0;

 

//findName — возвращает студента

//      с указанным именем

//      либо ноль, если такой

//      студент не был

Student*                    *pName)

f

//просмотрим связанный список...

for (Student *pS = pFirst; pS; pS = pS->pNext)

{

//если указанное имя найдено... if

{

возвращаем адрес этого объекта return pS;

}

}

//в противном случае возвращаем         не найден) return

}

int     argcs, char*

{

Student Student Student Student *pS = return 0;

}

Функция                 () имеет доступ к pFirst , поскольку этот указатель доступен для

всех объектов. Так как findName является членом класса student , он имеет доступ к членам name объектов, однако при вызове необходимо уточнить, член какого именно объекта требуется. Статическая функция не связана с каким-либо определенным объек- том, и делу не поможет даже использование объекта при вызове статического члена.

int argcs, char*

{

Student Student Student Student *pS = return 0;

}

Объект      не передается функции findName О; компилятор использует только

класс этого объекта, для того чтобы знать, функцию findName () какого именно клас- са следует вызвать.

Статические функции-члены удобны, когда вам надо связать некое действие с классом, не связывая его с отдельным  объектом.                                                                                                Например, функция-член

:  ()            : поле т () ) ассоциируется с определенной уткой, тогда как более "трагичная" функция (> (Утка {): : Вымирание () ) связана со всем утиным племенем (читай: классом).

 

 

214                   Часть "Классическое" программирование


Что такое this

Я уже упоминал несколько раз о том, что такое this , тем не менее давайте еще раз разберемся в этом                                                                         thi s — это указатель на текущий объект внутри функции-члена. Он используется, когда не указано другое имя объекта. В обычной функции-члене thi s — скрытый первый аргумент, передаваемый функции.

class SC

{

public:

void                  a) ;

//то же, что и SC::nFn(SC                  int a) stati c  void a) ;

//то же, что и SC::sFn(int a)

 

voi d               s )

f

s.n Fn(lO) ;   //Преобразуетс я в  SC::nFn(ss ,   10) ; s.sFn(lO) ;            // Преобразуетс я в SC::sFn(10) ;

}

Таким образом, функция nFn () интерпретируется так же, как если бы мы объяви- ли ее void SC::nFn(SC *this , in t а) . При вызове nFn неявным первым аргументом ей передается адрес s (вы не можете записать вызов таким образом, так как передача адреса объекта — дело компилятора).

Обращения к другим, не статическим членам из функции SC: :sFn автоматически используют аргумент thi s как указатель на текущий объект. Однако при вызове статической функции SC: : sFn () адрес объекта ей не передается и указателя this , который можно использовать при обращении к нестатическим членам, не сущест- вует. Поэтому мы и говорим, что статическая функция-член не связана с каким- либо текущим объектом.

 

с классами - BUDGET2 . СРР

В этом разделе обсуждается новая версия программы BUDGET, с которой вы уже встречались во второй части книги. Однако, в отличие от предыдущей "функциональной" версии, эта программа будет объектно-ориентированным решени- ем, основанным на классах.

В программе будет решаться задача по представлению счетов в том виде, какой они имеют в банке. Эта простая программа будет поддерживать возможности вклада (это хорошо) и снятия денег со счета (это еще лучше). (Первоначальная версия бюд- жета, приведенная в конце предыдущей части, работала только с одним типом бан- ковского счета.) Эта версия поддерживает два типа счетов, каждый из которых будет иметь собственные, несколько отличные от другого счета правила.

Чековый счет:

удерживать 20 центов за каждый обработанный чек, если баланс падает ниже 500 долларов;

не удерживать 20 центов, если баланс больше 500 долларов.


Поделиться:



Последнее изменение этой страницы: 2019-04-19; Просмотров: 208; Нарушение авторского права страницы


lektsia.com 2007 - 2024 год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав! (0.012 с.)
Главная | Случайная страница | Обратная связь