C++ за 21 день седьмое издание


} 60: const char*GetStringO



Download 1,38 Mb.
bet165/437
Sana22.02.2022
Hajmi1,38 Mb.
#89455
TuriРеферат
1   ...   161   162   163   164   165   166   167   168   ...   437
Bog'liq
word1

}







60: const char*GetStringO



  1. {




  1. return Buffer;




  1. }




  1. };



65:



  1. void UseMyString(MyString Input)




  1. {




  1. cout « "String buffer in MyString is " « Input.GetLength();




  1. cout « " characters long" « endl;



70:



  1. cout « "Buffer contains: " « Input.GetString() « endl;




  1. return;




  1. }



74:



  1. int main()




  1. {




  1. MyString SayHello("Hello from StringClass");








  1. // Передача SayHello по значению (с копированием)




  1. UseMyString(SayHello);



81:



  1. return 0;




  1. }



Результат


Constructor: creating new MyString


Buffer points to: 0x0040DA68


Copy constructor: copying from MyString


Buffer points to: 0x0040DAF8


String buffer in MyString is 17 characters long


Buffer contains: Hello from String Class


Invoking destructor, clearing up


Invoking destructor, clearing up


Анализ

Большая часть кода подобна коду листинга 9.8, кроме нескольких строк c o u t, добав­ ленных в конструктор, и нового конструктора копий, расположенного в строках 27-45. Для начала сосредоточимся на функции m ain (), которая (как и прежде) создает объект S a y H e llo в строке 77. Создание объекта S a y H e llo приводит к отображению первой строки вывода, оператор c o u t которой расположен в строке 12 конструктора M y S trin g . Для удобства конструктор отображает также адрес области памяти, на которую указыва­ ет B u f f e r . Затем, в строке 80, функция m ain () передает объект S a y H e llo по значению функции U seM y S trin g (), что автоматически приводит к вызову конструктора копий, как свидетельствует вывод. Код в конструкторе копий очень похож на таковой в конструкторе. Основная идея та же — выяснить длину строки в стиле С, которая содержится в буфе­ ре оригинала (строка 34), зарезервировать достаточно памяти в собственном экземпляре


230 ЗАНЯТИЕ 9. Классы и объекты


ВНИМАНИЕ! Использование ключевого слова const в объявлении конструктора копий га­

рантирует, что он не изменит то, на что указывает исходный объект.


Кроме того, параметр должен передаваться в конструктор копий по ссылке.


Если бы он не передавался по ссылке, то конструктор сам вызвал бы копирова- 1


ние значения, приведя таким образом к поверхностному копированию данных !


оригинала, а именно этого мы и намеревались избежать. |



РЕКОМЕНДУЕТСЯ

Всегда создавайте конструктор копий и опера­ тор присвоения копии, когда ваш класс содер­ жит простой указатель (raw pointer) (например, char* и т.п.)


Всегда создавайте конструктор копий с кон­ стантным параметром ссылки на оригинал


Используйте как члены такие классы строк, как std::string, и классы интеллектуальных ука­ зателей вместо простых указателей, поскольку они реализуют конструкторы копий и экономят ваше время



Download 1,38 Mb.

Do'stlaringiz bilan baham:
1   ...   161   162   163   164   165   166   167   168   ...   437




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