Retezec krok 6 - přidání dalších operátorů a zkouška programu

 

Otevřete soubor RETEZ.H a pod deklaraci friend funcke operator+ přidejte tyto řádky:

const Retezec& operator+=(char* text);
friend Retezec operator+(const Retezec& ret, char* text);
friend Retezec operator+(char* text, const Retezec& ret);

Právě jsme deklarovali novou členskou funkci operator+, která jako parametr bere ukazatel na char. Pokud to ještě nevíte, vězte, že v C++ můžete deklarovat funkcí se stejným jménem kolik chcete, tak dlouho, pokud se funkce liší alespoň jedním parametrem (což v C nešlo). Překladač vždy vybere správnou funkci podle parametrů, které jsou v jejím volání použity.
S novou funkcí teď můžeme přičíst k objektu třídy Retezec textovou konstantu nebo obyčejný řetězec (t
j. pole znaků):
Retezec ret("retezec");
char text = "textova konstanta";
ret += text; nebo i ret += "textova konstanta";

Další dvě funkce umožňují totéž pro operátor +. Potrěbujeme dvě verze, jednu pro případ "ahoj" + ret a druhou pro
ret + "ahoj".

Otevřete soubor RETEZ.CPP a přidejte na konec tento kód:

//členská funkce
const Retezec& Retezec::operator+=(char* text)
{
strcat(m_text,text);
m_delka = strlen(m_text);
return (*this);
}
//přátelské (friend) funkce
Retezec operator+(const Retezec& ret, char* text)
{
Retezec pomRet(ret); //vytvoříme objekt inicializovaný obsahem ret
pomRet += text; //přičteme text
return pomRet;
}

Retezec operator+(char* text, const Retezec& ret)
{
Retezec pomRet(text);
pomRet += ret;
return pomRet;
}

A teď vyzkoušejme jak to funguje .- upravte program testík v souboru TESTIK.CPP třeba tak, že přidáte toto:

//testování operátorů
Retezec r1("Jak ");
Retezec r2("se");
Retezec prazdny;
char *pc = " mas";

r1 += r2; //testujeme operátory +=
r1 += pc;
printf("Sectene retezce operatory +=: %s\n", r1.GetText());

r1 = "Ako ";
if (r2.GetAt(1) == 'e') //druhý prvek v r2 by měl být e
r2.SetAt(1,'a'); //změníme "se" na "sa"

prazdny = r1 + r2 + pc + "?";
printf("Sectene retezce operatory +: %s\n", prazdny.GetText());

mujretez = pc + r2 + "?\n";
printf("Sečtene retezce trochu jinak: %s", mujretez.GetText());

Tím je třída Retezec ukončena. K opravdu serióznímu využití jí ještě chybí mnoho vlastností. Jestli se vám chce, zkuste třeba doplnit funkce pro hledání v řetězci. Jinak využijte raději hotovou třídu CString z knihovny MFC.
Pokud si chcete stáhnou zdrojový text tohoto příkladu, klepněte sem
na Retezec.zip.

[Obsah]