Джесс Либерти - Освой самостоятельно С++ за 21 день.

Тут можно читать онлайн Джесс Либерти - Освой самостоятельно С++ за 21 день. - бесплатно полную версию книги (целиком) без сокращений. Жанр: comp-programming. Здесь Вы можете читать полную версию (весь текст) онлайн без регистрации и SMS на сайте лучшей интернет библиотеки ЛибКинг или прочесть краткое содержание (суть), предисловие и аннотацию. Так же сможете купить и скачать торрент в электронном формате fb2, найти и слушать аудиокнигу на русском языке или узнать сколько частей в серии и всего страниц в публикации. Читателям доступно смотреть обложку, картинки, описание и отзывы (комментарии) о произведении.
  • Название:
    Освой самостоятельно С++ за 21 день.
  • Автор:
  • Жанр:
  • Издательство:
    неизвестно
  • Год:
    неизвестен
  • ISBN:
    нет данных
  • Рейтинг:
    4.11/5. Голосов: 91
  • Избранное:
    Добавить в избранное
  • Отзывы:
  • Ваша оценка:
    • 80
    • 1
    • 2
    • 3
    • 4
    • 5

Джесс Либерти - Освой самостоятельно С++ за 21 день. краткое содержание

Освой самостоятельно С++ за 21 день. - описание и краткое содержание, автор Джесс Либерти, читайте бесплатно онлайн на сайте электронной библиотеки LibKing.Ru

В книге широко представлены возможности новейшей версии программного продукта Microsoft Visual C++. Подробно описаны средства и подходы программирования современных профессиональных приложений. Материалы книги дополнены многочисленными демонстрационными программами, в процессе разработки которых максимально используются возможности программных инструментов Microsoft Visual Studio. Особое внимание уделено новинкам версии 6.0 и новейшим технологиям объектно-ориентированного программирования, включая использование библиотеки MFC и шаблонов классов, а также создание связанных списков. Отдельное занятие посвящено вопросам объектно-ориентированного анализа и проектирования приложений. Подробно рассмотрены все средства и подходы конструирования собственных пользовательских классов.

Книга рассчитана на широкий круг читателей, интересующихся современными проблемами программирования.

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

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

Интервал:

Закладка:

Сделать

Листинг 14.2. Доступ к статическим членам без использования объектов

1: // Листинг 14.2. Статические переменные-члены

2:

3: #include

4:

5: class Cat

6: {

7: public:

8: Cat(int age):itsAge(age) { HowManyCats++; }

9: virtual ~Cat() { HowManyCats--; }

10: virtual int GetAge() { return itsAge; }

11: virtual void SetAge(int age) {itsAge = age;}

12: static int HowManyCats;

13:

14: private:

15: int itsAge;

16:

17: };

18:

19: int Cat::HowManyCats = 0;

20:

21: voidTelepathicFunction();

22:

23: int main()

24: {

25: const int MaxCats = 5; int i;

26: Cat *CatHouse[MaxCats];

27: for (i = 0; i

28: {

29: CatHouse[i] = new Cat(i);

30: TelepathicFunction();

31: }

32:

33: for ( i = 0; i

34: {

35: delete CatHouse[i];

36: TelepathicFunction();

37: }

38: return 0;

39: }

40:

41: void TelepathicFunction()

42: {

43: cout << "There are ";

44: cout << Cat::HowManyCats << " cats alive!\n";

45: }

Результат:

There are 1 cats alive!

There are 2 cats alive!

There are 3 cats alive!

There are 4 cats alive!

There are 5 cats alive!

There are 4 cats alive!

There are 3 cats alive!

There are 2 cats alive!

There are 1 cats alive!

There are 0 cats alive!

Анализ:Листинг 14.2 аналогичен листингу 14.1, однако включает новую функцию TelepahicFunction().Она не создает объект СаГ и даже не использует тегов качестве параметра, однако может получить доступ к переменной-члену HowManyCats. Не лишним будет еще раз напомнить, что эта переменная-член относится не к какому-либо определенному объекту, а ко всему классу в целом. Поэтому если она объявлена как public, то может использоваться любой функцией программы.

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

Листинг 14.3. Доступ к статическим членам с помощью обычных функций-членов

1: //Листинг 14.3. Закрытые статические переменные-члены

2:

3: #include

4:

5: class Cat

6: {

7: public:

8: Cat(int age):itsAge(age){ HowManyCats++; }

9: virtual ~Cat() { HowManyCats--; }

10: virtual int GetAge() { return itsAge; }

11: virtual void SetAge(int age) { itsAge = age; }

12: virtual int GetHowMany() { return HowManyCats; }

13:

14:

15: private:

16: int itsAge;

17: static int HowManyCats;

18: };

19:

20: int Cat::HowManyCats = 0;

21:

22: int main()

23: {

24: const int MaxCats = 5; int i;

25: Cat *CatHouse[MaxCats];

26: for (i = 0; i

27: CatHouse[i] = new Cat(i);

28:

29: for (i = 0; i

30: {

31: cout << "There are ";

32: cout << CatHouse[i]->GetHowMany();

33: cout << " cats left!\n";

34: cout << "Deleting the one which is ";

35: cout << CatHouse[i]->GetAge()+2;

36: cout << " years old\n";

37: delete CatHouse[i];

38: CatHouse[i] = 0;

39: }

40: return 0;

41: }

Результат:

There are 5 cats left!

Deleting the one which is 2 years old

There are 4 cats left!

Deleting the one which is 3 years old

There are 3 cats left!

Deleting the one which is 4 years old

There are 2 cats left!

Deleting the one which is 5 years old

There are 1 cats left!

Deleting the one which is 6 years old

Анализ:В строке 17 статическая переменная-член HowManyCats объявлена как private. Поэтому теперь доступ к ней закрыт для функций, не являющихся членами класса, например для функции TelepathicFunction из предыдущего листинга.

Хотя переменная HowManyCats является статической, она все же находится в области видимости класса. Поэтому любая функция класса, например GetHoqMany(), может получить доступ к ней так же, как к любой обычной переменной-члену. Однако для вызова GetHowMany() функция должна иметь объект, через который осуществляется вызов.

Рекомендуется: Применяйте статические переменные-члены для совместного использования данных несколькими объектами класса. Ограничьте доступ к статическим переменным-членам, объявивих как private или protected.

Не рекомендуется: Не используйте статические перемен- ные-члены для хранения данных одного объекта. Эти переменные предназначены для обмена данными между объектами.

Статические функции-члены

Статические функции-члены подобны статическим переменным-членам: они не принадлежат одному объекту, а находятся в области видимости всего класса. Именно поэтому их можно вызывать даже в тех случаях, когда не было создано ни одного объекта класса, как показано в листинге 14.4.

Листинг 14.4. Статические функции-члены

1: // Листинг 14.4. Статические функции-члены

2:

3: #include

4:

5: class Cat

6: {

7: public:

8: Cat(int age):itsAge(age){ HowManyCats++; }

9: virtual ~Cat() { HowManyCats--; }

10: virtual int GetAge() { return itsAge; }

11: virtual void SetAge(int age) { itsAge = age; }

12: static int GetHowMany() { return HowManyCats; }

13: private:

14: int itsAge;

15: static int HowManyCats;

16: };

17:

18: int Cat::HowManyCats = 0;

19:

20: void TelepathicFunction();

21:

22: int main()

23: {

24: const int MaxCats = 5;

25: Cat *CatHouse[MaxCats]; int i;

26: for (i = 0; i

27: {

28: CatHouse[i] = new Cat(i);

29: TelepathicFunction();

30: }

31:

32: for ( i = 0; i

33: {

34: delete CatHouse[i];

35: TelepathicFunction();

36: }

37: return 0;

38: }

39:

40: void TelepathicFunction()

41: {

42: cout << "There are " << Cat::GetHowMany() << " cats alive!\n";

43: }

Результат:

There are 1 cats alive!

There are 2 cats alive!

There are 3 cats alive!

There are 4 cats alive!

There are 5 cats alive!

There are 4 cats alive!

There are 3 cats alive!

There are 2 cats alive!

There are 1 cats alive!

There are 0 cats alive!

Анализ:В строке 15 в объявлении класса Cat создается закрытая статическая переменная-член HowManyCats. В строке 12 объявляется открытая статическая функция-член GetHowMany().

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

Примечание:Статические функции-члены не содержат указателя this. Поэтому они не могут объявляться со спецификатором const. Кроме того, поскольку функции-члены получают доступ к переменным-членам с помощью указателя this, статические функции-члены не могут использовать обычные нестатические переменные-члены!

Статические функции-члены

Доступ к статическим функциям-членам можно получить, либо вызывая их из объектов класса как обычные функции-члены, либо вызывая их без объектов, явно указав в этом случае имя класса. Пример:

class Cat

{

public:

static int GetHowMany() { return HowManyCats; }

private:

static int HowManyCats;

}

int Cat::HowManyCats = 0;

int main()

{

int howMany;

Cat theCat; // определение обьекта

howMany = theCat.GetHowMany(); // доступ через объект

howMany = Cat::GetHowMany(); // доступ без объекта

}

Указатели на функции

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

Единственная важная деталь для определения указателя на функцию — знание типа объекта, на который ссылается указатель. Указатель типа int обязательно связан с целочисленной переменной. Аналогичным образом указатель на функцию может вызывать только функции с заданными сигнатурой и типом возврата.

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

Интервал:

Закладка:

Сделать


Джесс Либерти читать все книги автора по порядку

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




Освой самостоятельно С++ за 21 день. отзывы


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


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

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