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



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


Глава 10. Объектно-ориентированное программирование
{
double x , y , z ;
public :
double get_x ( ) ;
void set_x ( double x ) ;
. . . .
double s p a t i a l _ v e c t o r : : get_x ( ) { return x ; }
. . . .
}
Этот способ является неудобным, т. к. при большом количестве переменных
требует множества тривиальных описаний. Его следует применять только для
тех свойств класса, внешний доступ к которым действительно необходим.
Однако есть особая ситуация, когда требуется за один раз присвоить значе-
ния переменным-членам класса (всем или большинству): это момент создания
объекта, т. е. переменной-экземпляра класса.
C++
позволяет создать специальный метод, который будет автоматически вы-
зываться для инициализации переменных-членов объекта при его создании. Та-
кой метод называется конструктором. Программист, написавший класс, может
по своему усмотрению включить в конструктор код для присваивания элементам
начальных значений, динамического выделения памяти и т. д. Если программист
не определил конструктор класса, компилятор самостоятельно сгенерирует кон-
структор по умолчанию (пустой и без входных параметров).
Конструктор может вызываться явно или неявно. Компилятор сам вызывает
конструктор в том месте программы, где создаётся объект класса.
У описания конструкторов в C++ есть следующие особенности:
• имя конструктора в C++ совпадает с именем класса;
• конструктор не возвращает никакое значение, но при описании конструк-
тора не используется и ключевое слово void.
Поскольку конструктор удобно использовать для динамического выделения па-
мяти, должен быть также и способ освобождать эту память при уничтожении
объекта (напомним, что локальные объекты удаляются тогда, когда они выходят
из области видимости, а глобальные объекты удаляются при завершении про-
граммы). Действительно, функцией, обратной конструктору, является деструк-
тор
. Эта функция вызывается при удалении объекта.
В C++ деструкторы имеют имена, состоящие из имени класса с префиксом-
тильдой: «˜имя_класса». Как и конструктор, деструктор не возвращает никакое
значение, но в отличие от конструктора он не может быть вызван явно. Причины
такого ограничения очевидны: код, предположительно освобождающий динами-
ческую память, будет обязательно вызван при выходе из области видимости. Его
явный вызов привёл бы к тому, что память уже освободилась заранее, а при уни-
чтожении объекта программа попыталась бы сделать это снова и сгенерировала
бы ошибку.
Конструктор не может быть описан в закрытой части класса. В общем слу-
чае то же ограничение накладывают и на деструктор. В следующем примере
мы создаём объект, вызываем его метод, а затем разрушаем при завершении
программы:
Программирование на языке С++ в среде Qt Creator


10.2. Классы и объекты в C++
275
#include 
#include 
using namespace s t d ;
c l a s s s p a t i a l _ v e c t o r
{
double x , y , z ;
public :
s p a t i a l _ v e c t o r ( ) ;
~ s p a t i a l _ v e c t o r ( ) { c o u t << "Работа деструктора\ n " ; }
double abs ( ) { return s q r t ( x∗x + y∗y + z ∗ z ) ; }
} ;
s p a t i a l _ v e c t o r : : s p a t i a l _ v e c t o r ( )
{
//конструктор класса v e c t o r
x=y=z =0;
c o u t << "Работа конструктора\ n " ;
}
main ( )
{
s p a t i a l _ v e c t o r a ; //создаётся объект a с нулевыми значениями
c o u t << a . abs ( ) << e n d l ;
}
Будучи выполнена, программа выводит следующие сообщения:
Работа конструктора
0
Работа деструктора
Обратите внимание на то, что тела функции abs() и деструктора были опи-
саны непосредственно при объявлении, внутри описания класса. Такой подход
обычно применяют для очень простых и коротких методов с тривиальным со-
держимым. В соответствии с традицией, унаследованной от языка С, описания
классов в больших программах на C++ обычно выносятся в заголовочные файлы,
в отличие от описания методов. Однако помещение описания простых методов
внутрь описания класса имеет дополнительный практический смысл. Компиля-
тор пытается сделать код таких методов встроенным (англ. inline). Это означа-
ет, что при обращении к методу вызов соответствующей функции будет заменён
непосредственно на её код. Благодаря такому трюку массовое обращение к свой-
ствам класса через его методы (геттеры или сеттеры) не обязательно снижает
производительность в сравнении с тем, если бы свойства находились в открытой
секции.
10.2.3
Передача параметров в конструкторы
В рассмотренном примере мы использовали конструктор по умолчанию, т. е.
без параметров. Однако, как любая другая функция, конструкторы могут иметь
параметры. Значения параметров можно передать конструктору при создании
объекта, в качестве аргументов:
#include 
#include 
using namespace s t d ;
c l a s s s p a t i a l _ v e c t o r
{
double x , y , z ;
© 2015 Алексеев Е. Р., Злобин Г. Г., Костюк Д. А., Чеснокова О. В., Чмыхало А. С.


276
Download 5,27 Mb.

Do'stlaringiz bilan baham:
1   ...   115   116   117   118   119   120   121   122   ...   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