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 (tj. 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]