Стефан Дэвис - С++ для чайников .

Тут можно читать онлайн Стефан Дэвис - С++ для чайников . - бесплатно полную версию книги (целиком) без сокращений. Жанр: sci_tech, издательство Издательский дом Вильямс. Компьютерное издательство Диалектика, год 2007. Здесь Вы можете читать полную версию (весь текст) онлайн без регистрации и SMS на сайте лучшей интернет библиотеки ЛибКинг или прочесть краткое содержание (суть), предисловие и аннотацию. Так же сможете купить и скачать торрент в электронном формате fb2, найти и слушать аудиокнигу на русском языке или узнать сколько частей в серии и всего страниц в публикации. Читателям доступно смотреть обложку, картинки, описание и отзывы (комментарии) о произведении.
  • Название:
    С++ для чайников .
  • Автор:
  • Жанр:
  • Издательство:
    Издательский дом Вильямс. Компьютерное издательство Диалектика
  • Год:
    2007
  • Город:
    Москва
  • ISBN:
    0-7645-6852-3, 978-5-8459-0723-3
  • Рейтинг:
    4/5. Голосов: 11
  • Избранное:
    Добавить в избранное
  • Отзывы:
  • Ваша оценка:
    • 80
    • 1
    • 2
    • 3
    • 4
    • 5

Стефан Дэвис - С++ для чайников . краткое содержание

С++ для чайников . - описание и краткое содержание, автор Стефан Дэвис, читайте бесплатно онлайн на сайте электронной библиотеки LibKing.Ru
empty-line
1
empty-line
4

С++ для чайников . - читать онлайн бесплатно полную версию (весь текст целиком)

С++ для чайников . - читать книгу онлайн бесплатно, автор Стефан Дэвис
Тёмная тема
Сбросить

Интервал:

Закладка:

Сделать

И наконец, в статических членах можно хранить указатель на первый элемент связанного списка. Таким образом, статические члены могут содержать любую информацию "общего использования", которая будет доступна для всех объектов и во всех функциях ( не стоит забывать, однако, что чрезмерное использование статических переменных усложняет поиск ошибок в программе ).

___________________

15Вообще говоря, это зависит от используемого компилятора. Так, тот же Dev-C++ вызовет данную функцию, в чём легко убедиться, скомпилировав и выполнив приведённый пример ( дополнив его, естественно, функцией main( ) , в которой вызывается fn( ) ). — Прим. ред.

16Ещё одно замечание: в этом случае вы должны позаботиться о том, чтобы счётчик увеличивался во всех конструкторах, включая конструктор копирования. — Прим. ред.

_________________

227 стр. Глава 19. Статические члены

►Оъявление статических функций-членов...228

Функции-члены также могут быть объявлены статическими. Подобно статическим данным-членам, они связаны с классом, а не с каким-либо отдельным объектом класса. Это означает, что обращение к статическим функциям-членам, как и к статическим данным-членам, не требует наличия объекта. Если объект и присутствует, то используется только его тип.

Таким образом оба вызова статической функциичленаnumber в приведённой - фото 255

«Таким образом, оба вызова статической функции-членаnumber( ) в приведённой ниже программе корректны.»

[ Диск ]

//

/* CallStaticMember — два способа вызова */

/* статической функции-члена */

//

#include

#include

#include

#include

using namespace std ;

class Student

{

public :

Student( char* pN = "no name" )

{

pName = new char[ strlen( pN ) + 1 ] ;

if ( pName )

{

strcpy( pName , pN ) ;

}

noOfStudents++ ;

}

~Student ( ) { noOfStudents-- ; }

static int number( ) { return noOfStudents ; }

/* ...Всё прочее — как и раньше... */

protected :

char* pName ;

static int noOfStudents ;

} ;

int Student::noOfStudents = 0 ;

int main( int argcs , char* pArgs[ ] )

{

/* печать кириллицы, если Вы не установите программки gccrus.exe и g++rus.exe */

setlocale ( LC_ALL , ".1251" ) ;

Student s1( "Chester" ) ;

Student s2 ( "Scooter" ) ;

cout << "Количество студентов — "

<< s1.number( ) << endl ;

cout << " Количество студентов — "

<< Student::number( ) << endl ;

/* Пауза для того, чтобы посмотреть на результат работы программы */

system( "PAUSE" ) ;

return 0 ;

}

Количество студентов 2 Количество студентов 2 Press any key to - фото 256

Количество студентов — 2

Количество студентов — 2

Press any key to continue...

_________________

228 стр. Часть 3. Введение в классы

Обратите внимание на то, как статическая функция-член обращается к статическим данным-членам. Поскольку статическая функция-член не связана с каким-либо объектом, она не может неявно обращаться к нестатическому члену. Таким образом, приведённый ниже пример неправилен.

class Student

{

public :

/* Приведённый ниже код неверен */

static char *sName( )

{

return pName ; /* Какое именно имя? */

}

/* ...всё остальное то же, что и ранее... */

protected :

char * pName ;

static int noOfStudents ;

} ;

Это не означает, что статические функции-члены не имеют доступа к нестатическим данным-членам. Рассмотрим следующий пример, в котором функция findName( ) используется для поиска объекта в связанном списке ( о том, как работают связанные списки, рассказывается в главе 14, "Указатели на объекты"). Здесь приводится только относящаяся к нашему рассмотрению часть кода; всё остальное вы можете дописать самостоятельно, в качестве небольшого домашнего задания.

class Student

{

public :

Student ( char *pName )

{

/* Создаёт объект и добавляет его в список */

}

static Student* findName( char *pName )

{

/* Ищет объект в списке, на который указывает указатель pHead */

}

protected :

static Student *pHead ;

Student *pNext ;

char* pName ;

} ;

Student* Student::pHead = 0

Функция findName( ) имеет доступ к pHead , поскольку этот указатель доступен для всех объектов. Так как findName является членом класса Student , он имеет доступ к членам pNext объектов. Этот доступ позволяет функции проходить по списку в поисках требуемого объекта. Вот как используется такая функция.

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. Введение в классы

Часть 4. НАСЛЕДОВАНИЕ...231

ОГЛАВЛЕНИЕ

СОДЕРЖАНИЕ

Глава 20. НАСЛЕДОВАНИЕ КЛАССОВ...233

Глава 21. ЗНАКОМСТВО С ВИРТУАЛЬНЫМИ ФУНКЦИЯМИ-ЧЛЕНАМИ: НАСТОЯЩИЕ ЛИ ОНИ...240

Глава 22. РАЗЛОЖЕНИЕ КЛАССОВ...249

В этой части Из дискуссии по вопросам объектноориентированной философии в - фото 257

В этой части...

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

Читать дальше
Тёмная тема
Сбросить

Интервал:

Закладка:

Сделать


Стефан Дэвис читать все книги автора по порядку

Стефан Дэвис - все книги автора в одном месте читать по порядку полные версии на сайте онлайн библиотеки LibKing.




С++ для чайников . отзывы


Отзывы читателей о книге С++ для чайников ., автор: Стефан Дэвис. Читайте комментарии и мнения людей о произведении.


Понравилась книга? Поделитесь впечатлениями - оставьте Ваш отзыв или расскажите друзьям

Напишите свой комментарий
x