Alt linux Программирование на языке С++ в среде Qt Creator Е. Р. Алексеев, Г. Г. Злобин, Д. А. Костюк, О. В. Чеснокова, А. С. Чмыхало Москва alt linux 2015



Download 5,27 Mb.
Pdf ko'rish
bet121/193
Sana24.02.2022
Hajmi5,27 Mb.
#227496
1   ...   117   118   119   120   121   122   123   124   ...   193
Bog'liq
Book-qtC


Глава 10. Объектно-ориентированное программирование
10.2.6
Статические свойства и методы класса
В C++ предусмотрен дополнительный способ совместного использования эле-
мента данных несколькими объектами — статические члены класса.
Одно из типичных применений этого механизма — быстрый и эффективный
обмен информацией между однотипными объектами за счёт общей переменной.
Другой причиной применения может оказаться желание уменьшить расход па-
мяти в случае, если какое-то свойство класса может менять своё значение только
одновременно для всех объектов, и таких объектов в программе много.
Чтобы объявить статический элемент класса, перед ним необходимо указать
ключевое слово static. Для примера добавим в класс point статическое свойство
count
— счётчик, указывающий, сколько экземпляров данного класса существует
в памяти в настоящий момент. Очевидно, что управлять содержимым счётчика
будут конструктор и деструктор класса.
#include
using namespace s t d ;
c l a s s p o i n t
{
i n t x , y ;
// . . .
s t a t i c i n t count ;
public :
p o i n t ( ) { c o u t << "Создаётся точка с номером " << ++cou n t << e n d l ; }
~ p o i n t ( ) { c o u t << "Разрушается точка с номером " << count−− << e n d l ; }
} ;
i n t p o i n t : : count ;
main ( ) {
p o i n t a , b , c ;
}
Помимо соответствующего описания в классе, статическая переменная-член
класса должна быть дополнительно объявлена в программе в качестве глобаль-
ной переменной с указанием её принадлежности классу (см. в примере строку
перед описанием функции main). В сущности, статические свойства и являются
глобальными переменными, с ограниченной областью видимости. В результате
выполнения программа сначала создаст, а потом разрушит три объекта класса
point
, выведя об этом соответствующие сообщения:
Создаётся точка с номером 1
Создаётся точка с номером 2
Создаётся точка с номером 3
Разрушается точка с номером 3
Разрушается точка с номером 2
Разрушается точка с номером 1
Метод класса также можно объявить статическим. Такой метод будет вести
себя одинаково для всех объектов, т. е. не будет различать, для какого именно
объекта он вызван. По этой причине статическим методам не передаётся скры-
тый указатель this. Однако взамен статические методы получают преимуще-
ство: их можно вызвать, не создавая объект класса. Например, статическими
могут быть содержащиеся в классе сервисные функции, если они не используют
никаких данных объекта, т. е. сам контекст вызова им по сути не нужен.
Программирование на языке С++ в среде Qt Creator


10.2. Классы и объекты в C++
279
На этот раз примером будет класс alarm, предназначенный для рабо-
ты с будильником и среди прочего содержащий в себе служебный метод
current_time()
, выводящий на экран текущее время. Поскольку этот метод ис-
пользует служебную функцию операционной системы и не нуждается в свой-
ствах объекта, мы можем сделать его статическим. Остальные методы класса
для простоты опустим.
#include
#include
using namespace s t d ;
c l a s s alarm
{
time_t alarm_t ;
public :
s t a t i c void c u r r e n t _ t i m e ( ) ;
// . . . .
} ;
void alarm : : c u r r e n t _ t i m e ( )
{
time_t t = time (NULL) ; //получаем текущее время в нотации Unix, в виде числа секунд,
//прошедших с 1 января 1970 г.
struct tm tm = ∗ l o c a l t i m e (& t ) ; //переводим в местное текущее время
c o u t << tm . tm_hour << ’ : ’ << tm . tm_min << ’ : ’ << tm . tm_sec << e n d l ;
}
main ( )
{
alarm : : c u r r e n t _ t i m e ( ) ;
}
Как видно из примера, для доступа к статическому методу класса без указа-
ния объекта достаточно всего лишь написать перед именем метода имя класса и
поставить оператор разрешения области видимости.
10.2.7
Перегрузка операторов
Как уже упоминалось, перегрузка, т. е. возможность создавать функции (на-
пример, методы класса) с одинаковыми именами и разными наборами парамет-
ров, вызываемые в разных ситуациях для решения однотипных задач — это одно
из ключевых проявлений полиморфизма в C++. Однако кроме перегрузки функ-
ций C++ позволяет проделывать то же самое с большинством стандартных опе-
раторов.
На самом деле, можно считать, что перегрузка операторов для стандартных
типов данных в неявном виде присутствовала ещё в языке С. Например, опе-
ратор деления может выполнять разные действия в зависимости от того, какой
тип имеют его аргументы: для целочисленных аргументов будет выполнено деле-
ние нацело, а для вещественных — деление чисел с плавающей точкой. С точки
зрения процессора деление чисел с плавающей точкой кардинально отличается
от деления нацело: задействована другая машинная команда, операнды должны
быть загружены в совсем другие регистры (ячейки памяти процессора), после
чего выполняется совсем другая микропрограмма. На более высоком уровне аб-
стракции операции целочисленного и вещественного деления могут казаться оди-
© 2015 Алексеев Е. Р., Злобин Г. Г., Костюк Д. А., Чеснокова О. В., Чмыхало А. С.


280
Download 5,27 Mb.

Do'stlaringiz bilan baham:
1   ...   117   118   119   120   121   122   123   124   ...   193




Ma'lumotlar bazasi mualliflik huquqi bilan himoyalangan ©hozir.org 2024
ma'muriyatiga murojaat qiling

kiriting | ro'yxatdan o'tish
    Bosh sahifa
юртда тантана
Боғда битган
Бугун юртда
Эшитганлар жилманглар
Эшитмадим деманглар
битган бодомлар
Yangiariq tumani
qitish marakazi
Raqamli texnologiyalar
ilishida muhokamadan
tasdiqqa tavsiya
tavsiya etilgan
iqtisodiyot kafedrasi
steiermarkischen landesregierung
asarlaringizni yuboring
o'zingizning asarlaringizni
Iltimos faqat
faqat o'zingizning
steierm rkischen
landesregierung fachabteilung
rkischen landesregierung
hamshira loyihasi
loyihasi mavsum
faolyatining oqibatlari
asosiy adabiyotlar
fakulteti ahborot
ahborot havfsizligi
havfsizligi kafedrasi
fanidan bo’yicha
fakulteti iqtisodiyot
boshqaruv fakulteti
chiqarishda boshqaruv
ishlab chiqarishda
iqtisodiyot fakultet
multiservis tarmoqlari
fanidan asosiy
Uzbek fanidan
mavzulari potok
asosidagi multiservis
'aliyyil a'ziym
billahil 'aliyyil
illaa billahil
quvvata illaa
falah' deganida
Kompyuter savodxonligi
bo’yicha mustaqil
'alal falah'
Hayya 'alal
'alas soloh
Hayya 'alas
mavsum boyicha


yuklab olish