Cyfroteka.pl

klikaj i czytaj online

Cyfro
Czytomierz
00342 008373 10461726 na godz. na dobę w sumie
C++Builder. Kompendium programisty - książka
C++Builder. Kompendium programisty - książka
Autor: Liczba stron: 496
Wydawca: Helion Język publikacji: polski
ISBN: 83-7361-028-6 Data wydania:
Lektor:
Kategoria: ebooki >> komputery i informatyka >> programowanie >> c++ builder - programowanie
Porównaj ceny (książka, ebook, audiobook).
Język C++ od czasu jego zdefiniowania przez Bjarne Stroustrupa był kilkakrotnie uaktualniany w latach 80. i 90. XX wieku. Chociaż C++Builder nie jest dokładnym odzwierciedleniem standardu ANSI języka C++, to obecna jego wersja przygotowana przez firmę Borland jest stabilna i zgodna z oczekiwaniami programistów. Borland C++Builder stanowi połączenie nowoczesnego języka programowania, jakim jest C++, biblioteki komponentów wizualnych VCL/CLX oraz zintegrowanego środowiska programisty IDE.

'C++Builder. Kompendium programisty' omawia podstawy programowania w C++ ze szczególnym uwzględnieniem możliwości oferowanych przez kompilator Borland C++Builder. Poznasz więc nie tylko sam język, ale nauczysz się pisać w nim wydajne i przenośne aplikacje, działające zarówno w środowisku linuksowym, jak i w Windows.

Omówione zagadnienia obejmują:

Znajdź podobne książki Ostatnio czytane w tej kategorii

Darmowy fragment publikacji:

IDZ DO IDZ DO PRZYK£ADOWY ROZDZIA£ PRZYK£ADOWY ROZDZIA£ SPIS TREĎCI SPIS TREĎCI KATALOG KSI¥¯EK KATALOG KSI¥¯EK KATALOG ONLINE KATALOG ONLINE ZAMÓW DRUKOWANY KATALOG ZAMÓW DRUKOWANY KATALOG TWÓJ KOSZYK TWÓJ KOSZYK DODAJ DO KOSZYKA DODAJ DO KOSZYKA CENNIK I INFORMACJE CENNIK I INFORMACJE ZAMÓW INFORMACJE ZAMÓW INFORMACJE O NOWOĎCIACH O NOWOĎCIACH ZAMÓW CENNIK ZAMÓW CENNIK CZYTELNIA CZYTELNIA FRAGMENTY KSI¥¯EK ONLINE FRAGMENTY KSI¥¯EK ONLINE Wydawnictwo Helion ul. Chopina 6 44-100 Gliwice tel. (32)230-98-63 e-mail: helion@helion.pl C++Builder. Kompendium programisty Autor: Andrzej Daniluk ISBN: 83-7361-028-6 Format: B5, stron: 496 Jêzyk C++ od czasu jego zdefiniowania przez Bjarne Stroustrupa by³ kilkakrotnie uaktualniany w latach 80. i 90. XX wieku. Chocia¿ C++Builder nie jest dok³adnym odzwierciedleniem standardu ANSI jêzyka C++, to obecna jego wersja przygotowana przez firmê Borland jest stabilna i zgodna z oczekiwaniami programistów. Borland C++Builder stanowi po³¹czenie nowoczesnego jêzyka programowania, jakim jest C++, biblioteki komponentów wizualnych VCL/CLX oraz zintegrowanego ġrodowiska programisty IDE. „C++Builder. Kompendium programisty” omawia podstawy programowania w C++ ze szczególnym uwzglêdnieniem mo¿liwoġci oferowanych przez kompilator Borland C++Builder. Poznasz wiêc nie tylko sam jêzyk, ale nauczysz siê pisaæ w nim wydajne i przenoġne aplikacje, dzia³aj¹ce zarówno w ġrodowisku linuksowym, jak i w Windows. Omówione zagadnienia obejmuj¹: • Opis zintegrowanego ġrodowiska programisty C++Buildera • Podstawy jêzyka C++ • Wczesne oraz póĥne wi¹zanie — wstêp do programowania zorientowanego obiektowo • Mo¿liwoġci C++Buildera w zakresie pos³ugiwania siê tablicami ró¿nego typu • Zaawansowane operatory rzutowania typów • Informacje czasu wykonania • Obs³ugê wyj¹tków • Obs³ugê plików • £añcuchy ANSI • Zmienne o typie modyfikowalnym w czasie wykonywania programu • Funkcje FPU i systemowe • Elementy wielow¹tkowoġci — wykorzystanie C++ oraz C++Buildera w nowoczesnych, wielow¹tkowych systemach operacyjnych • Liczby pseudolosowe i konwersje wielkoġci liczbowych • Wprowadzenie do grafiki • Komponentowy model C++Buildera i biblioteki DLL • Biblioteka CLX -- projektowanie aplikacji przenoġnych pomiêdzy systemami operacyjnymi Windows i Linux Spis treści Wstęp...................................................A...................................................A.................... .........................................9 O Autorze ...................................................A...................................................A................ ..................................12 Rozdział 1. Środowisko programisty IDE Borland C++Builder ...................................................A...................13 Struktura głównego menu ...................................................ó..............................................15 Menu File ...................................................ó...................................................ó..............16 Menu Edit...................................................ó...................................................ó..............18 Menu Search ...................................................ó...................................................ó.........21 Pasek narzędzi — Speed Bar ...................................................ó.........................................34 Inspektor obiektów — Object Inspector ...................................................ó..................35 Widok drzewa obiektów — Object Tree View...................................................ó........36 Ogólna postać programu pisanego w C++ ...................................................ó.....................37 Funkcja main() ...................................................ó...................................................ó......38 Dyrektywa #include i prekompilacja ...................................................ó.......................39 Konsolidacja ...................................................ó...................................................ó.........40 Konfiguracja opcji projektu ...................................................ó.....................................40 Uruchamiamy program ...................................................ó............................................42 Ogólna postać programu pisanego w C++Builderze ...................................................ó.....43 Formularz ...................................................ó...................................................ó..............44 Zdarzenia...................................................ó...................................................ó...............46 Konsola czy formularz? ...................................................ó.................................................48 Podsumowanie ...................................................ó...................................................ó............49 Podstawy języka C++...................................................A.............................................................................. 51 Dyrektywy preprocesora ...................................................ó................................................51 Dyrektywa #include ...................................................ó.................................................51 Dyrektywa #define...................................................ó...................................................ó52 Dyrektywa #undef...................................................ó...................................................ó.52 Dyrektywa #pragma hdrstop...................................................ó....................................52 Dyrektywa #pragma argsused...................................................ó..................................52 Dyrektywa #pragma inline...................................................ó.......................................52 Dyrektywa #pragma option...................................................ó......................................53 Rozdział 2. 4 C++Builder. Kompendium programisty Dyrektywa #pragma message ...................................................ó..................................53 Dyrektywa #pragma package(smart_init)...................................................ó................53 Dyrektywa #pragma resource „nazwa_pliku” ...................................................ó.........53 Dyrektywa #error ...................................................ó...................................................ó..54 Dyrektywy kompilacji warunkowej...................................................ó.........................54 Kategorie typów danych...................................................ó.................................................56 Podstawowe proste typy całkowite i rzeczywiste ...................................................ó..........56 Typ int ...................................................ó...................................................ó.................. .56 Typ double ...................................................ó...................................................ó............57 Modyfikatory typów...................................................ó...................................................ó....58 Typy danych Windows...................................................ó...................................................ó59 Typ Currency..........................................ó...................................................ó........................60 Typ void ...................................................ó...................................................ó................. .....61 Typy logiczne...................................................ó...................................................ó..............61 Typy znakowe ...................................................ó...................................................ó.............61 Typy łańcuchowe ...................................................ó...................................................ó........62 Modyfikatory dostępu const i volatile...................................................ó............................63 Specyfikatory klas pamięci ...................................................ó............................................63 Specyfikator extern ...................................................ó..................................................64 Specyfikator static...................................................ó...................................................ó.64 Specyfikator register ...................................................ó................................................64 Operatory...................................................ó...................................................ó.....................65 Typ wyliczeniowy ...................................................ó...................................................ó.......68 Słowo kluczowe typedef ...................................................ó................................................68 Typ zbiorowy ...................................................ó...................................................ó..............69 Deklarowanie tablic...................................................ó...................................................ó.....70 Instrukcje sterujące przebiegiem programu ...................................................ó...................71 Instrukcja warunkowa if…else ...................................................ó................................72 Instrukcja wyboru switch…case…break ...................................................ó.................73 Instrukcja for ...................................................ó...................................................ó.........74 Nieskończona pętla for ...................................................ó............................................75 Instrukcja iteracyjna do…while ...................................................ó...............................76 Instrukcja iteracyjna while ...................................................ó.......................................77 Instrukcja przerwania wykonywania pętli break ...................................................ó.....78 Funkcja przerwania programu exit()...................................................ó........................78 Funkcja przerwania programu abort() ...................................................ó.....................79 Instrukcja kontynuacji programu continue ...................................................ó..............79 Funkcje w C++ ...................................................ó...................................................ó............80 Rekurencja ...................................................ó...................................................ó............81 Funkcje przeładowywane...................................................ó.........................................83 Niejednoznaczność ...................................................ó..................................................85 Konwencje wywoływania funkcji...................................................ó............................86 Specyfikatory konsolidacji funkcji ...................................................ó..........................87 Wskazania i adresy...................................................ó...................................................ó......88 Operatory wskaźnikowe...................................................ó...........................................90 Wskaźniki i tablice...................................................ó...................................................ó90 Wielokrotne operacje pośrednie ...................................................ó..............................92 Operatory new i delete ...................................................ó.............................................94 Dereferencja wskaźnika ...................................................ó...........................................95 Wskaźniki ze słowem kluczowym const ...................................................ó.................96 Wskaźniki do funkcji ...................................................ó...............................................97 Odwołania ...................................................ó...................................................ó.................101 Parametry odwołaniowe...................................................ó.........................................104 Zwracanie odwołań przez funkcje ...................................................ó.........................105 Spis treści 5 Struktury...................................................ó...................................................ó................ ....106 Przekazywanie struktur funkcjom...................................................ó..........................108 Struktury zagnieżdżone...................................................ó..........................................109 Wskaźniki do struktur ...................................................ó............................................111 Samodzielne tworzenie plików nagłówkowych...................................................ó.....112 Unie ...................................................ó...................................................ó...........................114 Klasy w C++ ...................................................ó...................................................ó.............115 Konstruktor i destruktor ...................................................ó.........................................119 Inne spojrzenie na klasy. Własności ...................................................ó......................121 Funkcje ogólne...................................................ó...................................................ó....124 Przeładowywanie funkcji ogólnych ...................................................ó.......................125 Dziedziczenie ...................................................ó...................................................ó......127 Funkcje składowe klas ze specyfikatorami const i volatile.............................................131 Funkcje wewnętrzne ...................................................ó..............................................133 Realizacja przekazywania egzemplarzy klas funkcjom............................................135 Wskaźniki do egzemplarzy klas...................................................ó.............................136 Operatory .* oraz - *...................................................ó.............................................138 Wskaźnik this...................................................ó...................................................ó......139 Przeładowywanie operatorów ...................................................ó......................................140 Przeładowywanie jednoargumentowych operatorów ++ oraz – –............................141 Przeładowywanie operatorów ! oraz != ...................................................ó.................144 Przeładowywanie dwuargumentowego operatora arytmetycznego +.......................147 Przeładowywanie operatora ...................................................ó...............................149 Przeładowywanie operatora indeksowania tablic [ ] ................................................150 Klasy wejścia-wyjścia języka C++ ...................................................ó..............................153 Obsługa plików z wykorzystaniem klasy ios...................................................ó.........155 Tablicowe operacje wejścia-wyjścia...................................................ó......................157 Podsumowanie ...................................................ó...................................................ó..........160 Rozdział 3. Wczesne oraz późne wiązanie...................................................A.............................................................161 Odwołania i wskaźniki do klas pochodnych ...................................................ó................161 Funkcje wirtualne w C++...................................................ó.............................................163 Wirtualne klasy bazowe ...................................................ó...............................................167 Funkcje wirtualne w C++Builderze ...................................................ó.............................170 Klasy abstrakcyjne w stylu biblioteki VCL ...................................................ó.................173 Specyfikator __closure...................................................ó.................................................175 Obszary nazw ...................................................ó...................................................ó............178 Operator __classid...................................................ó...................................................ó.....179 Funkcja Register() ...................................................ó...................................................ó.....179 Podsumowanie ...................................................ó...................................................ó..........179 Rozdział 4. ................................................181 Tablice...................................................A...................................................A....... Tablice dynamicznie alokowane w pamięci...................................................ó.................181 Tablice dynamiczne...................................................ó...................................................ó...184 Tablice otwarte...................................................ó...................................................ó..........187 Tablice struktur ...................................................ó...................................................ó.........189 Tablice wskaźników do struktur ...................................................ó............................191 Odwołania do elementów tablicy wskaźników do struktur ......................................194 Podsumowanie ...................................................ó...................................................ó..........197 6 Rozdział 5. Rozdział 6. Rozdział 7. Rozdział 8. C++Builder. Kompendium programisty Zaawansowane operatory rzutowania typów...................................................A.............................199 Operator static_cast ...................................................ó...................................................ó...199 Operator dynamic_cast...................................................ó.................................................200 Operator const_cast ...................................................ó...................................................ó...203 Operator reinterpret_cast...................................................ó..............................................205 Podsumowanie ...................................................ó...................................................ó..........207 Informacja czasu wykonania...................................................A..............................................................209 Klasa TObject...................................................ó...................................................ó............210 Hierarchia własności komponentów VCL ...................................................ó...................213 Czas życia komponentów...................................................ó.............................................214 Moduł typeinfo.h...................................................ó...................................................ó.......215 Identyfikacja typów czasu wykonywania w oparciu o IDE ............................................217 Tablica metod wirtualnych...................................................ó...........................................218 Klasa TControl ...................................................ó...................................................ó..........219 Modyfikator __rtti ...................................................ó...................................................ó.....221 Podsumowanie ...................................................ó...................................................ó..........223 Obsługa wyjątków...................................................A................................................................................. 225 Standardowa obsługa wyjątków...................................................ó...................................225 Strukturalna obsługa wyjątków...................................................ó....................................228 Klasy wyjątków...................................................ó...................................................ó.........230 Zmienne globalne __throwExceptionName, __throwFileName i __throwLineNumber ...234 Zapisywanie nieobsłużonych wyjątków...................................................ó.......................236 Transformowanie wyjątków Windows ...................................................ó........................238 Podsumowanie ...................................................ó...................................................ó..........240 Obsługa plików ...................................................A...................................................A.................................... 241 Klasy TDirectoryListBox, TFileListBox i TDriveComboBox .......................................241 Klasy TActionList, TOpenDialog i TSaveDialog...................................................ó........243 Własność Options klas TOpenDialog i TSaveDialog ...................................................ó..249 Klasy TOpenPictureDialog i TSavePictureDialog...................................................ó.......250 Klasy TActionManager i TActionMainMenuBar ...................................................ó........253 Moduł sysutils ...................................................ó...................................................ó...........257 Operacje na plikach...................................................ó................................................258 Atrybuty pliku ...................................................ó...................................................ó.....268 Operacje na dyskach ...................................................ó..............................................272 Operacje na nazwach plików ...................................................ó.................................273 Windows API ...................................................ó...................................................ó............274 Klasa TMemoryStream ...................................................ó................................................280 Klasa TFileStream...................................................ó...................................................ó.....282 Przesyłanie plików przez sieć ...................................................ó......................................285 Drukowanie ...................................................ó...................................................ó...............289 Podsumowanie ...................................................ó...................................................ó..........291 Rozdział 9. Łańcuchy ANSI...................................................A...................................................A. Podsumowanie ...................................................ó...................................................ó..........301 .................................. 293 Rozdział 10. Zmienne o typie modyfikowalnym w czasie wykonywania programu .............................303 Struktura TVarData ...................................................ó...................................................ó...303 Klasa TCustomVariantType...................................................ó.........................................307 Moduł variants.....................................ó...................................................ó.........................309 Spis treści Rozdział 11. 7 Tablice wariantowe ...................................................ó...................................................ó...310 Wariantowe tablice otwarte...................................................ó..........................................316 Klient OLE ...................................................ó...................................................ó............... Podsumowanie ...................................................ó...................................................ó..........321 .318 Funkcje FPU i systemowe...................................................A.................................................................. 323 Funkcje FPU...................................................ó...................................................ó..............323 Struktura SYSTEM_INFO...................................................ó...........................................329 Klasa THeapStatus ...................................................ó...................................................ó....332 Identyfikator GUID ...................................................ó...................................................ó...335 Podsumowanie ...................................................ó...................................................ó..........337 Rozdział 12. Elementy wielowątkowości ...................................................A............................................................... 339 Wątki i procesy.......................................ó...................................................ó......................339 Funkcja _beginthread() ...................................................ó................................................340 Funkcja _beginthreadNT() ...................................................ó...........................................343 Funkcja _beginthreadex()...................................................ó.............................................348 Funkcja BeginThread() ...................................................ó................................................349 Zmienne lokalne wątku ...................................................ó................................................353 Klasa TThread ...................................................ó...................................................ó...........355 Rozdział 13. Metody ...................................................ó...................................................ó................355 Własności ...................................................ó...................................................ó............356 Zmienna IsMultiThread...................................................ó................................................361 Podsumowanie ...................................................ó...................................................ó..........361 Liczby pseudolosowe...................................................A............................................................................. 363 Funkcje randomize() i random() ...................................................ó..................................364 Losowanie z powtórzeniami...................................................ó.........................................368 Losowanie bez powtórzeń...................................................ó............................................371 Generatory częściowo uporządkowane ...................................................ó........................377 Podsumowanie ...................................................ó...................................................ó..........384 Rozdział 14. Konwersje wielkości liczbowych...................................................A.......................................................385 Własności ...................................................ó...................................................ó..................402 Metody ...................................................ó...................................................ó................... ...403 Podsumowanie ...................................................ó...................................................ó..........409 Rozdział 15. Wprowadzenie do grafiki ...................................................A....................................................................411 Barwne modele...................................................ó...................................................ó..........412 Płótno ...................................................ó...................................................ó................... .....415 Mapy bitowe...................................................ó...................................................ó..............419 JPEG...................................................ó...................................................ó..................... .....422 Obraz video ...................................................ó...................................................ó...............426 Drukowanie grafiki ...................................................ó...................................................ó...429 Podsumowanie ...................................................ó...................................................ó..........430 Rozdział 16. Komponentowy model C++Buildera...................................................A...............................................431 Tworzymy nowy komponent ...................................................ó.......................................431 Modyfikacja istniejącego komponentu z biblioteki VCL/CLX ......................................437 Komponenty graficzne ...................................................ó.................................................443 Podsumowanie ...................................................ó...................................................ó..........447 8 Rozdział 17. Rozdział 18. C++Builder. Kompendium programisty Biblioteki DLL ...................................................A.......................................................................................449 Budowanie DLL-i ...................................................ó...................................................ó.....449 Funkcja DllEntryPoint()...................................................ó...............................................453 Bazowe adresy ładowania ...................................................ó............................................455 Pakiety...................................................ó...................................................ó.................. Określanie adresów funkcji...................................................ó..........................................459 Podsumowanie ...................................................ó...................................................ó..........461 .....455 Biblioteka CLX..................................................A...................................................A.....................................463 Zmiany w bibliotece uruchomieniowej...................................................ó........................463 Pliki i katalogi ...................................................ó...................................................ó......... Znaki wielobajtowe ...................................................ó...................................................ó...465 Przykłady wykorzystania elementów biblioteki CLX ...................................................ó.466 Komponenty klas TTimer i TLCDNumber ...................................................ó...........467 Komponenty klas TActionList, TImageList, TMainMenu, TSaveDialogó, ..465 TOpenDialog, TStatusBar i TToolBar...................................................ó................469 Podsumowanie ...................................................ó...................................................ó..........470 Literatura...................................................A...................................................A............... ................................. 471 Skorowidz ...................................................A...................................................A............... ...............................473 Zaawansowane operatory rzutowania typów Oprócz tradycyjnych operatorów rzutowania typów zaczerpniętych z języka C, w C++ zdefi- niowano dodatkowo cztery operatory rzutowania typów o nazwach: UVCVKEAECUV, F[PCOKEA ECUV, EQPUVAECUV oraz TGKPVGTRTGVAECUV. Ogólne postaci omawianych operatorów wyglądają następująco: UVCVKEAECUV6[R  CTI F[PCOKEAECUV6[R  CTI EQPUVAECUV6[R  CTI TGKPVGTRTGVAECUV6[R  CTI Słowo 6[R oznacza docelowy typ rzutowania, zaś CTI (argument) — obiekt, któremu przypi- sujemy nowy typ danych. Operator static_cast Operator UVUVKEAECUV wykonuje tzw. rzutowanie niepolimorficzne, co między innymi oznacza możliwość wykonania każdej standardowej konwersji typódw bez konieczności sprawdzania jej poprawności. Jako prosty przykład wykonania niepolimorficznego rzutowania typów rozpatrzymy prostą funkcję typu KPV z argumentem typu XQKF , której jedynym celem będzie zamiana małej litery na dużą. Ponieważ dane typu XQKF nie mogą wskazywać na konkretne obiekty, należy wyko- rzystać odpowiedni operator rzutowania typów, tak jak pokazano to na listingu 5.1, gdzie przed- stawiono kod głównego modułu projektu Projekt_R5_01.bpr. 200 C++Builder. Kompendium programisty W omawianym przykładzie dzięki operatorowi UVCVKEAECUV uzyskamy wskaźnik NGV do typu KPV w funkcji ECRKVCN ze wskaźnika NGVVGT do zupełnie innego typu bazowego będącego jej argumentem. Listing 5.1. Rzutowanie wskaźnika i jego dereferencja KPENWFGXENJ RTCIOCJFTUVQR KPENWFG7PKVA4AJ RTCIOCRCEMCIG UOCTVAKPKV RTCIOCTGUQWTEG FHO 6(QTO (QTO KPVAAHCUVECNNECRKVCN XQKF NGVVGT ] T\WVQYCPKGYUMCļPKMCPCRTCYKFđQY[V[RFCP[EJ KPV NGVUVCVKEAECUVKPV NGVVGT  FGTGHGTGPELCYUMCļPKMC TGVWTPVQWRRGT NGV  _  AAHCUVECNN6(QTO6(QTO 6 QORQPGPV 1YPGT 6(QTO 1YPGT ] _  XQKFAAHCUVECNN6(QTO$WVVQP NKEM 61DLGEV 5GPFGT ]  CPXCU (QPV QNQTEN$NWG  CPXCU (QPV *GKIJV  CPXCU 6GZV1WV NKGPV*GKIJV NKGPV9KFVJ  EJCT ECRKVCN C  _  Powtórne wykorzystanie operatora dostępu pośredniego wraz z parametrem aktualnym funk- cji VQWRRGT oznacza w praktyce dereferencję wskaźnika NGV, gdyż parametrami funkcji VQ WRRGT nie mogą być dane wskazujące. Operator dynamic_cast Operator F[PCOKEAECUV wykonuje rzutowanie czasu wykonywania, co oznacza, iż poprawność tej operacji zawsze sprawdzania jest w trakcie dziadłania programu. W przypadku, gdy operacja rzutowania typów nie jest możliwa do zrealizowania, całość wyrażenia, w którym występuje omawiany operator, przyjmuje wartość zerową. Ponieważ operator F[PCOKEAECUV wykonuje rzutowanie czasu wykonywania, należy go używać głównie do przekształcania typów polimorficznych. Oznacza to, iż np. w przypadku, gdy pewna klasa polimorficzna 2QEJQFPC jest klasą potomną innej klasy polimorficznej $C\QYC, to, posłu- gując się operatorem F[PCOKEAECUV, zawsze można przekształcić wskaźnik 2 do typu 2QEJQFPC na wskaźnik $ do typu $C\QYC. Rozdział 5. G Zaawansowane operatory rzutowania typów 201 Jako przykład rozpatrzmy klasę abstrakcyjną 8GJKENG oraz dziedziczące po niej dwie klasy polimorficzne .QTT[ oraz 6KT. W klasie bazowej 8GJKENG zadeklarujemy czystą funkcją wirtu- alną UJQY , której kolejne implementacje zostaną umieszczone w polimorficznych klasach pochodnych, tak jak pokazano to na listingu 5.2. Listing 5.2. Kod modułu R5_02.h zawierającego definicje klas Veihicle, Lorry oraz Tir KHPFGH4A* FGHKPG4A* FGHKPG07/A8 *+ . 5  ENCUU8GJKENG ] RWDNKE AAHCUVECNN8GJKENG ] (QTO /GOQ .KPGU #FF  6YQT\GPKGGI\GORNCT\CMNCU[8GJKENG  _ E\[UVCHWPMELCYKTVWCNPCUJQY LGUV\CFGMNCTQYCPC YMNCUKGDC\QYGLCNGPKGRQUKCFCYPKGLUYQLGL KORNGOGPVCELK XKTVWCNXQKFAAHCUVECNNUJQY  _  ENCUU.QTT[RWDNKE8GJKENG ] RWDNKE AAHCUVECNN.QTT[ ] (QTO /GOQ .KPGU #FF  6YQT\GPKGGI\GORNCT\CMNCU[.QTT[  _ XKTVWCNXQKFAAHCUVECNNUJQY ] (QTO /GOQ .KPGU #FF   TWMQYCPKGFCP[EJGI\GORNCT\CMNCU[.QTT[  _ _  ENCUU6KTRWDNKE8GJKENG ] RWDNKE AAHCUVECNN6KT ] (QTO /GOQ .KPGU #FF  6YQT\GPKGGI\GORNCT\CMNCU[6KT  _ XKTVWCNXQKFAAHCUVECNNUJQY ] (QTO /GOQ .KPGU #FF   TWMQYCPKGFCP[EJGI\GORNCT\CMNCU[6KT  _ _  GPFKH  202 C++Builder. Kompendium programisty W funkcji obsługi zdarzenia $WVVQP NKEM w głównym module Unit_R5_02.cpp projektu Projekt_R5_02.bpr zadeklarujemy dwa egzemplarze klasy .QTT[ oraz jeden klasy 6KT. Następ- nie zainicjujemy odpowiednimi wartościami tablicę wskaźników 8 do klasy 8GJKENG ogólnie reprezentującej pojazdy. Pojazdy zwane ciężarówkami odszukamy, wykonując w pętli HQT operację polimorficznego rzutowania typu 8GJKENG reprezentowanego przez kolejne elementy tablicy wskaźników 8 na typ .QTT[, tak jak pokazano to na listingu 5.3. Listing 5.3. Kod źródłowy głównego modułu Unit_R5_02.cpp projektu Priojekt_R5_02.bpr KPENWFGXENJ RTCIOCJFTUVQR KPENWFG7PKVA4AJ KPENWFG4AJ RTCIOCRCEMCIG UOCTVAKPKV RTCIOCTGUQWTEG FHO 6(QTO (QTO  AAHCUVECNN6(QTO6(QTO 6 QORQPGPV 1YPGT 6(QTO 1YPGT ] _  XQKFAAHCUVECNN6(QTO$WVVQP NKEM 61DLGEV 5GPFGT ] FGMNCTCELCGI\GORNCT\[MNCU.QTT[K6KT .QTT[.. 6KT6 KPKELWLGVCDNKEúRQLC\FÎY 8GJKENG 8=07/A8 *+ . 5? 8=?. 8=?6 8=?. QFU\WMWLGEKúľCTÎYMK HQT KPVKK07/A8 *+ . 5K ] .QTT[ NNF[PCOKEAECUV.QTT[ 8=K?  KH NN NWDKH NN(#.5 ] /GOQ .KPGU #FF  KúľCTÎYMK  NN UJQY  _ GNUG /GOQ .KPGU #FF +PPGRQLC\F[  _ _  XQKFAAHCUVECNN6(QTO(QTO NQUG 61DLGEV 5GPFGT 6 NQUG#EVKQP#EVKQP[ ] #EVKQPEC(TGG _  Rozdział 5. G Zaawansowane operatory rzutowania typów 203 Śledząc powyższe zapisy, musimy zauważyć, iż użycie operatora F[PCOKEAECUV pozwoliło na od- szukanie wszystkich istniejących wskaźników do klasy reprezentującej ciężarówki. W przypadku, gdy wartość wyrażenia: .QTT[ NNF[PCOKEAECUV.QTT[ 8=K?  będzie równa zeru (przyjmie wartość fałszywą), oznaczać to będzie, iż operacja rzutowania nie jest możliwa do przeprowadzenia. Fakt ten nie powinien nas zbytnio dziwić chociażby z tego względu, że pojazdy zwane ciężarówkami nie zawsze są popularnymi „tirami”, zaś „tiry” z reguły bywają ciężarówkami, co widoczne jest w działaniu naszej aplikacji pokazanej na rysunku 5.1 oraz co zostało wyraźnie określone w hierarchii klas dprzedstawionych w listingu 5.2. Rysunek 5.1. Rezultat wykonania aplikacji projektu Projekt_R5_02.ibpr Operator const_cast Operator ten wykorzystywany jest głównie w celu przedefiniowywania danych ze specyfika- torami EQPUV oraz XQNCVKNG oraz w celu zmiany atrybutu EQPUV wybranej zmiennej. Stosując operator EQPUVAECUV, należy pamiętać, iż typ docelowy modyfikowanej zmiennej musi odpo- wiadać jej typowi bazowemu. Na listingu 5.4 zaprezentowano kod źródłowy głównego modułu projektu Projekt_R5_03.bpr, gdzie zdefiniowano klasę $C\QYC z funkcją składową HWPE określoną za pomocą atrybutu EQPUV oraz przeładowaną względem HWPE funkcję HWPE . Listing 5.4. Przykład praktycznego wykorzystania operatora const_casit KPENWFGXENJ RTCIOCJFTUVQR KPENWFG7PKVA4AJ RTCIOCRCEMCIG UOCTVAKPKV RTCIOCTGUQWTEG FHO 6(QTO (QTO ENCUU$C\QYC] RTKXCVG KPVPWODGT 204 C++Builder. Kompendium programisty RWDNKE AAHCUVECNN$C\QYC KPVL ]PWODGTL_ KPVAAHCUVECNNHWPE KPVK EQPUV] (QTO /GOQ .KPGU #FF (WPMELCPKGOQF[HKMWLGQDKGMVWY[YQđWLæE[GIQ  TGVWTPK _ AAHCUVECNNHWPE KPVK ] (QTO /GOQ .KPGU #FF (WPMELCOQF[HKMWLGFCPGRT[YCVPG  TGVWTPPWODGTK _ FQWDNGAAHCUVECNNHWPE FQWDNGK ] (QTO /GOQ .KPGU #FF (WPMELCY[YQđCPCFNCK  (QTO /GOQ .KPGU #FF K  TGVWTPK _ _  AAHCUVECNN6(QTO6(QTO 6 QORQPGPV 1YPGT 6(QTO 1YPGT ] _  XQKFAAHCUVECNN6(QTO$WVVQP NKEM 61DLGEV 5GPFGT ] $C\QYC $PGY$C\QYC $C\QYC $PGY$C\QYC URTCYF\GPKGOQľNKYQħEKQFYQđCPKCUKúFQ RQU\E\GIÎNP[EJHWPMELKUMđCFQY[EJQDKGMVÎY $K$MNCU[$C\QYC $ HWPE   $ HWPE   $ HWPE   $ HWPE   LCYPGRT\GFGHKPKQYCPKGURGE[HKMCVQTCEQPUV KPVNNEQPUVAECUVKPV $ HWPE   /GOQ .KPGU #FF NN  NNEQPUVAECUVKPV $ HWPE   /GOQ .KPGU #FF NN  FGNGVG$ FGNGVG$ _  XQKFAAHCUVECNN6(QTO(QTO NQUG 61DLGEV 5GPFGT 6 NQUG#EVKQP#EVKQP[ ] #EVKQPEC(TGG _  Rozdział 5. G Zaawansowane operatory rzutowania typów 205 Wynik działania programu bez przedefiniowania specyfikatora EQPUV operatorem EQPUVAECUV w trakcie wywołania funkcji HWPE oraz z przedefiniowaniem specyfikatora EQPUV w funkcji HWPE pokazany jest odpowiednio na rysunkach 5.2 i 5.3. Rysunek 5.2. Rezultat wykonania aplikacji projektu Projekt_R5_03.bpir bez przedefiniowania specyfikatora const w czasie wywołania funkcji func1() Rysunek 5.3. Rezultat wykonania aplikacji projektu Projekt_R5_03.bpir z jawnym przedefiniowaniem specyfikatora const podczas wywołania funkcji func1() Łatwo sprawdzić, iż poprzez prosty zabieg polegający na przedefiniowaniu operatorem EQPUVA ECUV atrybutu EQPUV funkcji HWPE możliwe stało się bezpośrednie uzyskanie wartości po- wrotnych tej funkcji każdorazowo wywołanych w programie głównym z różnymi parametrami aktualnymi. Operator reinterpret_cast Nazwa omawianego operatora rzutowania typów w dosłownym znaczeniu tego słowa odpowiada funkcji, jaką może on pełnić w programie. Operator TGKPVGTRTGVAECUV pozwala na przypisa- nie wybranej zmiennej zupełnie innego typu w porównaniu z jej typem aktualnym włącznie 206 C++Builder. Kompendium programisty z możliwością rzutowania niezgodnych typów wskaźników. Na listingu 5.5 zamieszczono przykład wykorzystania operatora TGKPVGTRTGVAECUV w celu zamiany wskaźnika EJCT na typ zmiennej całkowitej KPV. Listing 5.5. Kod modułu Unit_R5_04.cpp projektu Projekt_R5_04.bpr jakio przykład praktycznego wykorzystania operatora reinterpret_cast KPENWFGXENJ RTCIOCJFTUVQR KPENWFG7PKVA4AJ RTCIOCRCEMCIG UOCTVAKPKV RTCIOCTGUQWTEG FHO 6(QTO (QTO  AAHCUVECNN6(QTO6(QTO 6 QORQPGPV 1YPGT 6(QTO 1YPGT ] _  XQKFAAHCUVECNN6(QTO$WVVQP NKEM 61DLGEV 5GPFGT ] KPVK RQFCLGFđWIQħè\C\PCE\QPGIQVGMUVW YMQORQPGPEKG FKV KPV5K\G FKV 5GN.GPIVJ FQFCLG\PCM07.. 5K\G  VYQT\[F[PCOKE\P[DWHQTFCP[EJ EJCT $WHHGTPGYEJCT=5K\G? MQRKWLG\C\PCE\QP[VGMUVFQDWHQTCFCP[EJ  FKV )GV5GN6GZV$WH $WHHGT5K\G  WOKGU\E\CYGYđCUPQħEK6GZV\CYCTVQħèDWHQTCFCP[EJ  FKV 6GZV$WHHGT \COKCPC T\WVQYCPKG YUMCļPKMCPCV[RECđMQYKV[ KTGKPVGTRTGVAECUVKPV $WHHGT  /GOQ .KPGU #FF K  WUWYCDWHQT FGNGVG$WHHGT _  XQKFAAHCUVECNN6(QTO(QTO NQUG 61DLGEV 5GPFGT 6 NQUG#EVKQP#EVKQP[ ] #EVKQPEC(TGG _  Rozdział 5. G Zaawansowane operatory rzutowania typów 207 Łańcuch znaków, do którego chcemy uzyskać wskaźnik, wpisywany jest w komponencie edycyj- nym FKV. Rozmiar zaznaczonych w jego obszarze znaków ustalany jest za pomocą własności: AARTQRGTV[KPV5GN.GPIVJ]TGCF)GV5GN.GPIVJYTKVG5GV5GN.G[PIVJ PQFGHCWNV_ Następnie, zaznaczony tekst kopiowany jest za pomocą dfunkcji: XKTVWCNKPVAAHCUVECNN)GV5GN6GZV$WH EJCT $WHHGTKPV$WH5K[\G  do stworzonego uprzednio dynamicznego bufora danych $WHHGT, którego zawartość zostanie umieszczona we własności 6GZV komponentu FKV. W komponencie edycyjnym /GOQ zostanie wyświetlony efekt rzutowania na typ całkowity wskaźnika do łańcucha znaków umieszczonego w buforze. Podsumowanie Obecny rozdział poświecony był omówieniu czterech zdefiniowanych w C++ operatorów rzu- towania typów. Używanie niektórych z nich w większości prostych aplikacji może wydawać się czynnością mało przydatną, jednak w programach bardziej zaawansowanych, w których należy wykonywać specyficzne operacje rzutowania typów, umiejętność posługiwania się tymi ope- ratorami jest trudna do przecenienia. Kompletne kody źródłowe aplikacji będących ilustracją poruszanych w tym rozdziale zagadnień można znaleźć na dołączonej do książki płycie CD w katalogu R05\.
Pobierz darmowy fragment (pdf)

Gdzie kupić całą publikację:

C++Builder. Kompendium programisty
Autor:

Opinie na temat publikacji:


Inne popularne pozycje z tej kategorii:


Czytaj również:


Prowadzisz stronę lub blog? Wstaw link do fragmentu tej książki i współpracuj z Cyfroteką: