Удосконалена програма роботи з типом String

Використовуючи вказівник this можна переробити функцію operator=() в програмі 22.17 і змусити її повертати резултат за посиланням. Таким чином можна здійснювати множинні присвоювання для класу String, наприклад:

а1=а2=а3

В той же час, ми уникнемо і створення хибних об’єктів у вигляді копій для створення результату, як це було, коли повернення здійснювалося за значенням.

Далі приведений лістінг програми 22.21

#include<iostream.h>

#include<conio.h>

#include<stdio.h>

#include<bios.h>

#include<string.h>

/////////////////

class strCount

{private:

int count;

char* str;

friend class String;

strCount(char* s)

{int length=strlen(s);

str=new char[length+1];

strcpy(str,s);

count=1;

}

~strCount()

{delete[] str;}

};

/////////////////

class String

{private:

strCount* psc;

public:

String()//конструктор без аргументів

{psc=new strCount(“NULL”);}

//-------

String(char* s)//конструктор з 1 аргументом

{psc=new strCount(s);}

//-----------

String(String& S) //конструктор копіювання

{psc=S.psc;

(psc->count)++;}

//----------

~String() //деструктор

{if(psc->count==1)

delete psc;

else

(psc->count)--;

}

//----------

void display()

{cout<<psc->str;

cout<<” (addr=”<<psc<<”)”; //виведення адреси

}

//-----------

String& operator=(String& S)

{cout<<”\nПрисвоювання”;

if(psc->count==1) //if last

delete psc;

else

(psc->count)--;

psc=S.psc;

(psc->count)++;

return *this;

}

};

//////////////

int main()

{clrscr();

String s3=”Будь-яка пробна фраза”;

cout<<”\ns3=”;s3.display();

String s1,s2;

s1=s2=s3;

cout<<”\ns1=”;s1.display();

cout<<”\ns2=”;s2.display();

cout<<endl;

bioskey(0);

return 0;

}

Програма 22.21

Тепер описувачем оператору присвоювання є

String& operator=(String& S)

і програма повертає вказівник на this.

Слід відмітити, що вказівник this не можна використовувати у статичних методах, оскільки вони не асоційовані з конкретним об’єктом.

 








Дата добавления: 2015-08-26; просмотров: 588;


Поиск по сайту:

При помощи поиска вы сможете найти нужную вам информацию.

Поделитесь с друзьями:

Если вам перенёс пользу информационный материал, или помог в учебе – поделитесь этим сайтом с друзьями и знакомыми.
helpiks.org - Хелпикс.Орг - 2014-2024 год. Материал сайта представляется для ознакомительного и учебного использования. | Поддержка
Генерация страницы за: 0.006 сек.