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



Download 1,38 Mb.
bet160/437
Sana22.02.2022
Hajmi1,38 Mb.
#89455
TuriРеферат
1   ...   156   157   158   159   160   161   162   163   ...   437
Bog'liq
word1

#include




  1. using namespace std;




  1. class MyString




  1. {




  1. private:




  1. char* Buffer;

-7 .



  1. public:




  1. // Конструктор




  1. MyString(const char* Initiallnput)

1 1 : {





  1. if(Initiallnput != NULL)

-3:{


  1. Buffer = new char [strlen(Initiallnput) + 1];




  1. strcpy(Buffer, Initiallnput);

  2. }

  3. else



Buffer = NULL;
222 ЗАНЯТИЕ 9. Классы и объекты



  1. }




  1. // Деструктор: освобождает буфер, зарезервированный в




    1. конструкторе




  1. -MyString()

22: {



  1. cout « "Invoking destructor, clearing up" « endl;




  1. if (Buffer != NULL)




  1. delete [] Buffer;




  1. }



27:



  1. int GetLengthO




  1. {




  1. return strlen(Buffer);




  1. }



32:



  1. const char* GetStringO




  1. {




  1. return Buffer;




  1. }




  1. }; // конец класса MyString








  1. int main()




  1. {




  1. MyString SayHello("Hello from String Class");




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




  1. cout « " characters long" « endl;



44:



  1. cout « "Buffer contains: ";




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




  1. }



Результат


String buffer in MyString is 23 characters long Buffer contains: Hello from String Class Invoking destructor, clearing up


Анализ

Этот класс в основном инкапсулирует строку в стиле С в переменной


M y S trin g : : B u f f e r и освобождает вас от задач резервирования и освобождения памяти, осущ ествляемых одинаково при каждой необходимости использовать строку. Особенно интересен код конструктора M y S trin g () в строках 10-19 и деструктора - M y S trin g () в строках 21-26. Конструктор требует передачи исходной строки, поскольку у него есть обя­ зательный входной параметр, а затем копирует ее в строку в стиле С B u f f e r после резер­ вирования памяти для нее в строке 14, где используется оператор s t r l e n для определения длины исходной строки. Для копирования в эту недавно зарезервированную область памя­ ти в строке 15 используется оператор s tr c p y . На случай, если пользователь класса в ка­ честве аргумента для параметра I n i t i a l l n p u t предоставит значение NULL, переменная M y S trin g : : B uf f е г также инициализируется со значением NULL (чтобы указатель не со­ держал случайное значение, которое может оказаться опасным при попытке использовать его для доступа к области памяти). Код деструктора гарантирует автоматическое осво­ бождение памяти, зарезервированной в конструкторе, и возвращ ение ее операционной


Конструктор копий 223

;истеме. Он проверяет, не содержит ли переменная M y S trin g : : B u f f e r значение NULL,





  1. если это не так, то выполняет для нее оператор d e l e t e [ ], дополняя оператор new в кон-гтрукторе. Обратите внимание, что нигде в функции m ain () не применяются операторы -ew или d e l e t e . Этот класс не только абстрагировал реализацию, но и гарантировал при ~ом техническую правильность освобождения зарезервированной памяти. Деструктор -M y S trin g () вызывается автоматически при возвращении к функции m ain (), и это де­ монстрирует вывод, поскольку в деструкторе выполняется оператор c o u t.

Классы, облегчающие работу со строками, являются одним из многих примеров ис­ пользования деструктора. На занятии 26, “Понятие интеллектуальных указателей”, вы •знаете, что деструкторы играют критически важную роль в работе с указателями более ложным способом.



-РИМЕЧАНИЕ

Деструкторы не могут быть перегружены. У класса может быть только один де­




структор. Если вы забудете реализовать деструктор, компилятор создаст и вы­




зовет фиктивный деструктор, т.е. пустой деструктор, который не осуществляет




никакого освобождения зарезервированной динамической памяти.


Download 1,38 Mb.

Do'stlaringiz bilan baham:
1   ...   156   157   158   159   160   161   162   163   ...   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