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



Download 1,95 Mb.
Pdf ko'rish
bet133/144
Sana24.02.2022
Hajmi1,95 Mb.
#223123
TuriРеферат
1   ...   129   130   131   132   133   134   135   136   ...   144
Bog'liq
C -Eldjer-Djeff-for-Real-Programmers-RUS-www.itlibitum.ru

16 


 242 
class String { 
private: 
char* 
str; 
public: 
operator char*() { return str; } 
}; 
strcpy(aString, bString); 
// Использует оператор char* 
Для вызова 
strcpy(char*, char*)
используется оператор преобразования. Во время выполнения 
strcpy
обе строки непосредственно доступны из кода функции 
strcpy
, которые вами не 
контролируются. И это еще относительно неплохо, поскольку 
strcpy
можно считать атомарной 
операцией. Хуже, если вы передадите ссылку на функтор, скажем, функции базы данных как объекто-
ориентированную функцию обратного вызова (callback). Вы можете заниматься своими делами, пока 
не зазвенит звонок, но до тех пор не смейте уничтожать функтор! 
Индексированные коллекции 
Весьма специфический случай. Предположим, коллекция объектов индексируется очень большим 
целым числом. 
template  
class Array { 
public: 
Type* 
operator[] 
(LargeInt); 
}; 
Конечно, можно заявить, что все объекты коллекции доступны, если доступна сама коллекция, но 
такое решение не всегда удовлетворительно. Довольно часто требуется узнать, можно ли к объекту 
коллекции обратиться по индексу; то есть имеет ли какой-нибудь объект, кроме самой коллекции, 
индекс объекта 
X
? Если нет — значит, адрес 
X
имеется только у коллекции, и от него желательно 
избавиться. Мы не будем углубляться в эту тему и лишь мельком обратим внимание на проблему. 
Чаще всего она возникает при кэшировании объектов на диске и в распределенных объектых системах. 
Внутри периметра 
После того как будут определены все непосредственно доступные объекты, возникает следующая 
проблема: идентифицировать объекты, к которым возможны косвенные обращения внутри периметра. 
Теоретически каждый объект может обратиться к любому другому объекту. Тем не менее, объекты 
ссылаются друг на друга ограниченным числом способов. 
Переменные классов 
Один объект может быть внедрен в другой как переменная класса, или же переменная класса может 
представлять собой указатель или ссылку на другой объект. 
Аргументы функций классов 
Один объект может получить доступ к другому через аргументы своих функций. На самом деле это 
лишь частный случай рассмотренных выше стековых переменных. 
void Foo::f(Bar* b) 

b->member_of_Bar(); 

Базовые классы 
Базовый класс в С++ интерпретируется так, словно он является внедренным объектом. Как было 
показано в предыдущей главе, это особенно справедливо для множественного наследования и 
виртуальных базовых классов. По адресу одного объекта вы можете сослаться на несколько разных 



Download 1,95 Mb.

Do'stlaringiz bilan baham:
1   ...   129   130   131   132   133   134   135   136   ...   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