Архитектура Аудит Военная наука Иностранные языки Медицина Металлургия Метрология Образование Политология Производство Психология Стандартизация Технологии |
Глава 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; Нарушение авторского права страницы