русс | укр

Мови програмуванняВідео уроки php mysqlПаскальСіАсемблерJavaMatlabPhpHtmlJavaScriptCSSC#DelphiТурбо Пролог

Компьютерные сетиСистемное программное обеспечениеИнформационные технологииПрограммирование


Linux Unix Алгоритмічні мови Архітектура мікроконтролерів Введення в розробку розподілених інформаційних систем Дискретна математика Інформаційне обслуговування користувачів Інформація та моделювання в управлінні виробництвом Комп'ютерна графіка Лекції


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


Дата додавання: 2014-04-22; переглядів: 938.


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

а1=а2=а3

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

Далі приведений лістінг програми 13.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;

}

Програма 13.21

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

String& operator=(String& S)

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

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

 


<== попередня лекція | наступна лекція ==>
Використання this для повернення значення | Уникайте неправильних присвоювань


Онлайн система числення Калькулятор онлайн звичайний Науковий калькулятор онлайн