[ Pobierz całość w formacie PDF ]

ratorów C++, zamiast rzutowania w starym stylu znanym z C. Mówiąc szczerze, ja z tej
rady korzystam rzadko i zwykle używam rzutowania C, które wydaje mi się bardziej
naturalne i mniej mnie  kłuje w oczy 10.
Na koniec jeszcze jedna uwaga dotycząca konwersji liczb. Za w pełni bezpieczne na-
leży uznać wszystkie konwersje z typów mniej dokładnych i o mniejszym zakresie na
typu o większej dokładności i większym zakresie. Można więc bez obaw rzutować int
na long czy float na double. Rzutowania odwrotne mogą prowadzić do zmiany war-
tości zmiennych jeżeli oryginalna wartość przekracza zakres nowego typu. W miarę
bezpieczne jest także rzutowanie typów całkowitych na rzeczywiste oraz konwersje
na łańcuchy.
Aańcuchy
Podsumujmy dotychczasową wiedzę o łańcuchach. Do ich przechowywania używali-
śmy typu AnsiString. Wiemy, jak łatwo je łączyć operatorem +, wiemy, że można
w nich używać znaków niedostępnych na klawiaturze, np. \n (znak końca linii).
Wiemy też, jak za pomocą funkcji StrToInt, StrToFloat oraz IntToStr i FloatToStr
konwertować łańcuchy na liczby całkowite i rzeczywiste i z powrotem. Warto jednak
zwrócić uwagę na fakt, że AnsiString nie jest typem prostym, a klasą. Dzięki temu
wyposażony jest w metody, które pozwalają na manipulowanie łańcuchami. Przyj-
rzyjmy się im w działaniu  to najlepiej pokaże nam, jak można ich używać. Listing 3.40
zawiera szereg poleceń zmieniających początkowy łańcuch typu AnsiString. Wszyst-
kie poza ostatnim korzystają z metod klasy AnsiString. Zauważmy, że dostęp do nich
uzyskujemy za pomocą operatora . (kropka), a nie ->. Jest tak, ponieważ w tym przy-
padku zmienna s nie jest wskaznikiem do AnsiString, a reprezentuje obiekt utworzony
na stosie.
10
Elegancja rzutowania w starym stylu jest zresztą najpoważniejszym zarzutem wobec tego sposobu
rzutowania. Według Dewhursta każde umieszczone w kodzie rzutowanie powinno kłuć w oczy, bo jest
niebezpieczne (zob. Stephen C. Dewhurst C++. Kruczki i fortele w programowaniu, Helion 2004).
Ja nie jestem aż tak zasadniczy, szczególnie że rzutowanie może być czasem koniecznością, np. przy
dzieleniu liczb całkowitych.
86 Część I f& Zintegrowane środowisko programistyczne i język programowania C++
Listing 3.40. Zabawa łańcuchami to zajęcie nie tylko dla duchów w średniowiecznych zamkach
void __fastcall TForm1::Button2Click(TObject *Sender)
{
AnsiString s=" Helion ";
ShowMessage("$"+s+"$");
s=s.Trim(); //usuwanie spacji
ShowMessage("$"+s+"$");
ShowMessage(s.UpperCase()); //wielkie literE
ShowMessage(s.LowerCase()); //małe litrE
s=s.SubString(0,3)+"lo!"; //podłańcuch i łączenie łańcuch w
ShowMessage(s);
s.Insert(", hello",6); //wstawianie
ShowMessage(s);
ShowMessage("PierwszE znak \"o\" znajduje się na pozEcji "+IntToStr(s.Pos("o")));
ShowMessage("Aańcuch \""+s+ "\" ma długott "+IntToStr(s.Length())+" znak w");
s.Delete(2,7); //usuwanie fragmentu
ShowMessage(s);
TReplaceFlags rf; rf
s=StringSeplace(s,"lo!","ion",rf); //zastępowanie fragmentu
ShowMessage(s);
}
Zwróćmy uwagę, że w dwóch liniach pojawiają się cudzysłowy poprzedzone znakiem
backslash: \". Podobnie jak w przypadku znaku \n, mamy tu do czynienia ze znakiem,
który w inny sposób nie mógłby być zapisany w kodzie zródłowym. Użycie samego
cudzysłowu oznaczałoby przecież zakończenie łańcucha, podczas gdy nam chodzi je-
dynie o ujęcie fragmentu tekstu w cudzysłów.
Ze względu na użycia znaku backslash do kodowania znaków, sam znak backslash
musi być również kodowany w ten sam sposób. Aby umieścić ten znak w łańcuchu,
musimy użyć podwójnego znaku backslash. Ma to szczególne znaczenie, gdy łańcuch
ma zawierać ścieżkę do pliku. Dla przykładu, instrukcje z listingu 3.41 doprowadzą
do prezentacji w oknie dialogowym poprawnie zbudowanej ścieżki do katalogu.
Listing 3.41. Kwestia znaków backslash
void __fastcall TForm1::Button3Click(TObject *Sender)
{
AnsiString s="c:\\Program Files\\Borland\\BDS\\4.0\\bin";
ShowMessage(s);
}
W rozdziale 11. znajdą się informacje o funkcjach pozwalających w wygodny sposób
wyodrębniać z łańcuchów zawierających ścieżki do plików ich nazwy, katalog czy
symbol dysku.
Rozdział 3. f& Typy zmiennych i instrukcje sterujące 87
Dyrektywy preprocesora
Cykl właściwej kompilacji kodu C++ poprzedzony jest tak zwanym cyklem preproce-
sora. W nim wyszukiwane są między innymi umieszczone w kodzie dyrektywy pre- [ Pobierz całość w formacie PDF ]

  • zanotowane.pl
  • doc.pisz.pl
  • pdf.pisz.pl
  • razem.keep.pl