str(){ }
sstr(char *vs)
{ len =strlen(vs); str-new char[len+1]; strcpy(str,vs); }
~sstr() {delete str;}
Sstr & operator +(sstr&); /*екіорынды операцияны жүзеге асыратын компонентті функцияның прототипі”+” */
Sstr & operator-(); /*бірорынды операцияны жүзеге асыратын компонентті функцияның прототипі”-” */
sstr & sstr::operator-()
{ char c;
for (int i=0; i<=len/2-1; i++) {c=str[i]; str[i]=str[len-1]; str[len-i-1]=c;}
return *this; }
sstr & sstr ::operator ++(sstr &A)
{ int l-A.len+len; char *s; s=bew char[l+1]; strcpy(s,str);
strcat(s,A.str); len=l; str=s; return *this; }
void main()
{ clrscr();
Sstr aa(“қолдану мысалы”);
sstr bb(“операцияларды қайта анықтау”);
sstr cc=aa+bb; //шақырудың операторлық формасы
cc.print();
sstr dd; dd=aa.operator+(bb); //шақырудың қалыпты формасы
dd.print();
-aa; -bb; // унарлы минустың қолданылуы-жолдарды қарату
aa.print(); getch(); }
Кейбір операцияларды олардың комутативтілігін қамтамасыз ету үшін қайта анықтау класс денесіндегі функция-операторлар-дың бірнеше варианттарын сипаттау керек.
С++ енгізу-шығару кітапханасының кластарымен жұмыс жасауда енгізу-шығару кластары “<<” (ағымға қосылу) және “>>” (ағымнан шығару) операцияларын мәліметтердің тек қана қалыпты типтеріне ғана қолданады. Сондықтан жолдар типін белгілі-бір қолданушы кластар үшін де, және тұтас кластар үшін де бұл класс объектілерін шығарған кезде “<<” және ”>>” операцияларын әрбір класс үшін қайта анықтаған жөн.
“Ағымға қосылу” және “ағымнан шығару” операцияларын қайта анықтауда операцияларды сипаттаудың келесі формасы қолданылады:
Operator & operator<<(ostream & out,<жаңа тип><аты>)
{<функция-оператор денесі>};
Istream & operator >>(istream & in,<жаңа тип>&<аты>)
{<функция-оператор денесі>}.
Бұл операцияларға private және proected сипатталған жолдарды кірістіру кезінде “<<” және “>>” операцияларын серіктестік ретінде сипаттаған дұрыс.
Жасырын түрде меншіктеп алу операциясы кез-келген классқа анықталған және көшірмелейтін конструкторда жасырын түрде қолданылатынға ұқсас объектілерді көшірмелеуді қамтамасыз етеді. Керек жағдайда бұл операцияны да қайта анықтауға болады. Кейбір жағдайларда қайта анықтау міндетті түрде керек, мысалы динамикалық жолдармен жұмыс жасау кезінде.
Достарыңызбен бөлісу: