C++: библиотека программиста



Download 1,95 Mb.
Pdf ko'rish
bet28/144
Sana24.02.2022
Hajmi1,95 Mb.
#223123
TuriРеферат
1   ...   24   25   26   27   28   29   30   31   ...   144
Bog'liq
C -Eldjer-Djeff-for-Real-Programmers-RUS-www.itlibitum.ru


разделенных занятыми и расположенных между сигнатурой конструктора и его телом. 
class Foo { 
public: 
Foo(char*); 
}; 
class Bar : public Foo { 
public: 
Bar(char*); 
}; 
class BarBar { 
private: 
Foo 
f; 
int 
x; 
public: 
BarBar(); 
}; 
Bar::Bar(char* s) : Foo(s) {...} 
BarBar::BarBar : f(“Hello”), x(17) {...} 
В конструкторе 
Bar
список инициализации членов используется для инициализации базового класса 
Foo
. Компилятор выбирает используемый конструктор на основании сигнатуры, определяемой по 
фактическим аргументам. При отсутствии списка инициализации членов сконструировать 
Bar
было бы 
невозможно, поскольку компилятор не мог бы определить, какое значение должно передаваться 
конструктору базового класса 
Foo
. В конструкторе 
BarBar
список инициализации членов 
использовался для инициализации (то есть вызова конструкторов) переменных 
f
и 
х
. В следующем 
варианте конструктор работает не столь эффективно (если только компилятор не отличается 
сверхъестественным интеллектом): 
BarBar::BarBar() : f(“Hello”) 

x = 17; 



 
35 
Во втором варианте переменная х сначала инициализируется значением 0 (стандартное требование 
C++) с использованием по умолчанию конструктора 
int
без аргументов, а затем в теле конструктора 
ей присваивается значение 17. В первом варианте имеется всего одна инициализация и потому 
экономится один-два машинных такта. В данном примере это несущественно, поскольку переменная
х
— целая, но если бы она относилась к более сложному классу с конструктором без аргументов и 
перегруженным оператором присваивания, то разница была бы вполне ощутима. 
Списки инициализации членов нужны там, где у базового класса или переменной нет конструктора без 
аргументов (точнее, есть один и более конструктор с аргументами, но нет ни одного определенного 
пользователем конструктора без аргументов). Списки инициализации членов не обязательны в тех 
ситуациях, когда все базовые классы и переменные класса либо не имеют конструкторов, либо имеют 
пользовательский конструктор без аргументов. 
Порядок вызова конструкторов 
Если класс не содержит собственных конструкторов, он инициализируется так, словно компилятор 
создал конструктор без аргументов за вас. Этот конструктор вызывает конструкторы без аргументов 
базовых классов и переменных класса. Четко определенный порядок вызова конструкторов не зависит 
от того, используются конструкторы стандартные или перегруженные, с аргументами или без: 
1. Сначала вызываются конструкторы базовых классов в порядке их перечисления в списке 
наследования (еще один список, в котором после символа 
:
перечисляются базовые классы, 
Download 1,95 Mb.

Do'stlaringiz bilan baham:
1   ...   24   25   26   27   28   29   30   31   ...   144




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