int main( int argcs , char* pArgs[ ] )
{
Student s1( "Randy" ) ;
Student s2( "Jenny" ) ;
Student s3( "Kinsey" ) ;
Student *pS = s1.findName( "Jenny" ) ;
return 0 ;
}
_________________
229 стр. Глава 19. Статические члены
►Что такое this...230
Я уже упоминал несколько раз о том, что такое this, но тем не менее давайте ещё раз разберёмся в этом вопросе, this — это указатель на текущий объект внутри функции-члена. Он используется, когда не указано другое имя объекта. В обычной функции-члене this — скрытый первый аргумент, передаваемый функции.
class SC
{
public :
void nFn( int a ) ;
/* To же, что и SC::nFn( SC *this , int a ) */
static void sFn( int a ) ;
/* To же, что и SC::sFn( int a ) */
} ;
void fn( SC& s )
{
s.nFn( 10 ) ; /* Преобразуется в SC::nFn( &s , 10 ) ; */
s.sFn( 10 ) ; /* Преобразуется в SC::sFn( 10 ) ; */
}
Таким образом, функция nFn( ) интерпретируется так же, как если бы мы объявили её void SC::nFn( SC *this , int a ). При вызове nFn( ) неявным первым аргументом ей передаётся адрес s ( вы не можете записать вызов таким образом, поскольку передача адреса объекта — дело компилятора ).
Обращения к другим, нестатическим членам из функции SC::sFn автоматически используют аргумент this как указатель на текущий объект. Однако при вызове статической функции SC::sFn( ) адрес объекта ей не передаётся и указателя this, который можно использовать при обращении к нестатическим членам, не существует. Поэтому мы и говорим, что статическая функция-член не связана с каким-либо текущим объектом.
_________________
230 стр. Часть 3. Введение в классы
Глава 20. НАСЛЕДОВАНИЕ КЛАССОВ...233
Глава 21. ЗНАКОМСТВО С ВИРТУАЛЬНЫМИ ФУНКЦИЯМИ-ЧЛЕНАМИ: НАСТОЯЩИЕ ЛИ ОНИ...240
Глава 22. РАЗЛОЖЕНИЕ КЛАССОВ...249
В этой части...
Из дискуссии по вопросам объектно-ориентированной философии в части 3 становится ясно, что в реальном мире существует две вещи, которые нельзя выразить с помощью функционально-ориентированных программ.
Первое — это возможность работы с отдельными объектами. Я привёл пример использования микроволновой печи для приготовления закуски. Она предоставляет интерфейс ( на лицевой панели ), который я использую для управления, совершенно не вникая в подробности работы печи. Я буду вести себя точно так же, даже если буду знать всё о том, как именно она устроена ( хотя я этого не знаю ).
Второй аспект реального мира, закрытый для функциональных программ, — это классификация объектов: распознавание и использование их подобия. Если в рецепте приготовления того или иного блюда указана печь любого типа, то, работая с микроволновой печью, я буду уверен, что использую правильное устройство, поскольку микроволновая печь является одним из типов печей.
В предыдущей части вы познакомились с механизмом, используемым в С++ для осуществления первой возможности объектно-ориентированного программирования, — с классами. Для обеспечения второй возможности С++ использует концепцию, называемую наследованием, которая расширяет понятие и возможности классов. Именно о наследовании и пойдёт речь в этой части книги.
_________________
232 стр. Часть 4. Наследование