C_Builder_6_cwiczenia_zaawansowane_czcbu6.pdf

(184 KB) Pobierz
IDZ DO
PRZYK£ADOWY ROZDZIA£
SPIS TRE CI
KATALOG KSI¥¯EK
KATALOG ONLINE
ZAMÓW DRUKOWANY KATALOG
C++Builder 6.
Æwiczenia zaawansowane
Autor: Andrzej Daniluk
ISBN: 83-7361-089-8
Format: B5, stron: 138
TWÓJ KOSZYK
DODAJ DO KOSZYKA
Je li opanowa³e ju¿ podstawy C++ Buildera i zacz¹³e wykorzystywaæ to rodowisko
we w³asnych projektach, przyszed³ zapewne czas na dokonanie nastêpnego kroku:
poznanie zaawansowanych technik programistycznych.
Ksi¹¿ka „C++Builder 6. Æwiczenia zaawansowane” to ponad 30 kompletnych
przyk³adowych projektów. Jak wszystkie ksi¹¿ki z tej serii jest ona skierowana do
praktyków: nie znajdziesz wiêc w niej rozwa¿añ teoretycznych, za to w krótkim czasie,
krok po kroku, opanujesz C++ Buildera na profesjonalnym poziomie. Tak¿e u¿ytkownicy
innych rodowisk programistycznych wykorzystuj¹cych jêzyk C++ skorzystaj¹ na jej
lekturze.
Opisano miêdzy innymi:
• Wskazania, adresy i odwo³ania
• Prze³adowywanie operatorów
• Funkcje wirtualne, klasy pochodne, polimorficzne i abstrakcyjne
• Wykorzystanie w¹tków i procesów
• Operacje na plikach
• Modyfikowanie typów zmiennych w czasie wykonywania programu
• Generowanie liczb pseudolosowych
• Wykorzystanie koprocesora matematycznego
• Tworzenie nowych komponentów C++ Buildera i modyfikowanie istniej¹cych
CENNIK I INFORMACJE
ZAMÓW INFORMACJE
O NOWO CIACH
ZAMÓW CENNIK
CZYTELNIA
FRAGMENTY KSI¥¯EK ONLINE
Wydawnictwo Helion
ul. Chopina 6
44-100 Gliwice
tel. (32)230-98-63
e-mail: helion@helion.pl
Spis treści
Wstęp...........................................................................................................................................................5
Rozdział 1.
Wskazania i adresy................................................................................................................................7
Organizacja pamięci w komputerze.................................................................................... 7
Operatory wskaźnikowe.................................................................................................... 9
Wskaźniki i tablice ........................................................................................................... 9
Wskaźniki ze słowem kluczowym const ........................................................................... 13
Wielokrotne operacje pośrednie....................................................................................... 14
Wskaźniki do funkcji...................................................................................................... 15
Wskaźniki i pamięć alokowana dynamicznie .................................................................... 20
Stos......................................................................................................................... 21
Sterta....................................................................................................................... 22
Dereferencja wskaźnika .................................................................................................. 27
Operatory (.*) oraz (->*) ................................................................................................ 29
Podsumowanie............................................................................................................... 30
Rozdział 2. Odwołania................................................................................................................................................31
Czym są odwołania?....................................................................................................... 31
Parametry odwołaniowe.................................................................................................. 33
Zwracanie odwołań przez funkcje.................................................................................... 35
Odwołania do struktur .................................................................................................... 36
Podsumowanie............................................................................................................... 38
Rozdział 3. Przeładowywanie operatorów......................................................................................................39
Przeładowywanie jednoargumentowych operatorów + + oraz – – ....................................... 40
Przeładowywanie operatorów (!) oraz (!=) ....................................................................... 43
Przeładowywanie operatora &......................................................................................... 46
Przeładowywanie operatora indeksowania tablic []............................................................ 47
Podsumowanie............................................................................................................... 50
Rozdział 4. Tablice jako urządzenia wejścia-wyjścia................................................................................51
Podsumowanie............................................................................................................... 54
Rozdział 5. Funkcje wirtualne. Klasy pochodne, polimorficzne i abstrakcyjne............................55
Odwołania i wskaźniki do klas pochodnych...................................................................... 55
Funkcje wirtualne w C++................................................................................................ 58
Funkcje wirtualne w C++Builderze.................................................................................. 61
Klasy abstrakcyjne w stylu biblioteki VCL ....................................................................... 64
Podsumowanie............................................................................................................... 66
4
C++Builder 6. Ćwiczenia zaawansowane
Rozdział 6. Typy danych Windows.......................................................................................................................67
Rozdział 7.
Wątki.........................................................................................................................................................69
Wątki i procesy .............................................................................................................. 69
Funkcja _beginthread() ................................................................................................... 70
Funkcja _beginthreadNT() .............................................................................................. 72
Funkcja BeginThread() ................................................................................................... 77
Zmienne lokalne wątku................................................................................................... 80
Klasa TThread ............................................................................................................... 81
Metody.................................................................................................................... 81
Właściwości............................................................................................................. 82
Podsumowanie............................................................................................................... 84
Rozdział 8. Operacje na plikach ..........................................................................................................................85
Moduł SysUtils .............................................................................................................. 85
Windows API ................................................................................................................ 91
Klasa TMemoryStream................................................................................................... 98
Podsumowanie............................................................................................................. 101
Rozdział 9. Zmienne o typie modyfikowalnym w czasie wykonywania programu ....................103
Struktura TVarData ...................................................................................................... 103
Klasa TCustomVariantType .......................................................................................... 105
Moduł Variants ............................................................................................................ 107
Tablice wariantowe ...................................................................................................... 109
Podsumowanie............................................................................................................. 113
Rozdział 10. Liczby pseudolosowe.......................................................................................................................115
Losowanie z powtórzeniami .......................................................................................... 116
Losowanie bez powtórzeń............................................................................................. 119
Podsumowanie............................................................................................................. 124
Rozdział 11. Funkcje FPU..........................................................................................................................................125
Podsumowanie............................................................................................................. 128
Rozdział 12. Komponentowy model C++Buildera .......................................................................................129
Tworzymy nowy komponent......................................................................................... 129
Modyfikacja istniejącego komponentu z biblioteki VCL/CLX.......................................... 135
Podsumowanie............................................................................................................. 138
3.
Przeładowywanie
operatorów
Rozdział
Język C++ udostępnia programistom niezwykle wydajne narzędzie w postaci mo liwo-
ści przeładowywania (określania nowych działań) wybranych operatorów.
Przeładowywanie (przedefiniowywanie) operatorów umo liwia rozszerzenie obszaru
zastosowań wybranego operatora na elementy niezdefiniowanej wcześniej unikalnej klasy.
Projektując algorytm nowego działania wybranego operatora, nale y skorzystać ze spe-
cjalnej funkcji o zastrze onej nazwie
QRGTCVQT
:
QRGTCVQT U[ODQN QRGTCVQTC RCTCOGVT[ QRELQPCNPKG
]
KPUVTWMELG
_
Zapis ten oznacza, i , na przykład, najprostsza funkcja opisująca nowy algorytm odejmowa-
nia (nowy sposób działania unarnego operatora odejmowania ) będzie mogła przybrać
następującą postać:
QRGTCVQT RCTCOGVT[ ] KPUVTWMELG _
Reguły C++ umo liwiają przeładowywanie praktycznie wszystkich operatorów, za wy-
jątkiem czterech, dla których nie jest mo liwe zdefiniowanie nowych działań:
operatora kropki umo liwiającego uzyskiwanie bezpośredniego dostępu
do pół struktur i klas,

operatora wskazującego wybrany element klasy,
operatora rozró niania zakresu,
!
operatora warunkowego.
40
C++Builder 6. Ćwiczenia zaawansowane
Przeładowywanie jednoargumentowych
operatorów ++ oraz ––
Jako przykład praktycznego wykorzystania przeładowanego operatora postinkrementacji
posłu y nam sytuacja zliczania elementów ciągu znaków wprowadzonych z klawiatury.
W celu przeładowania jednoargumentowego operatora
w pierwszej kolejności musimy
zaprojektować odpowiednią funkcję operatorową. Ka da funkcja operatorowa powinna
mieć mo liwość wykonywania odpowiednich operacji na właściwych egzemplarzach
klasy (lub obiektu), inaczej mówiąc, powinna w stosunku do odpowiedniej klasy posiadać
status funkcji zaprzyjaźnionej lub być normalną metodą w klasie. Zaprojektujemy prostą
klasę o nazwie
EQWPVGT
(licznik):
ENCUU EQWPVGT
]
RWDNKE
KPV PWODGT
EQWPVGT ]VJKU PWODGT _
EQWPVGT QRGTCVQT ]VJKU PWODGT TGVWTP

VJKU_

_ CFF
Poniewa celem naszym będzie zwiększanie w odpowiedni sposób (postinkrementowanie)
wartości pola
PWODGT
egzemplarza
CFF
klasy
EQWPVGT
, funkcja operatorowa przybierze
nieskomplikowaną postać:
EQWPVGT QRGTCVQT ]VJKU PWODGT TGVWTP

VJKU_

Zauwa my, i funkcja ta, będąc normalną metodą w klasie, nie posiada jawnych argu-
mentów i w momencie wywołania otrzymuje
niejawny
wskaźnik
VJKU
do własnego eg-
zemplarza klasy. Dzięki posiadaniu niejawnego wskaźnika
VJKU
funkcja ma mo liwość
postinkrementowania wartości pola
PWODGT
własnego egzemplarza klasy.
Dzięki instrukcji:
TGVWTP

VJKU

funkcja operatorowa jawnie zwraca wskaźnik do zmodyfikowanego egzemplarza
CFF
klasy
EQWPVGT
.
Ćwiczenie 3.1.
Ka da funkcja składowa klasy otrzymuje niejawnie argument w postaci wskaźnika do
obiektu, który ją wywołał, i do którego uzyskuje się dostęp, wykorzystując słowo kluczowe
(wskaźnik)
VJKU
. Funkcje składowe przeładowywanych operatorów jednoargumentowych
nie potrzebują adnych jawnie zadeklarowanych parametrów formalnych. Jedynym argu-
mentem, którego nale y u yć, jest wskaźnik
VJKU
, będący w rzeczywistości wskaźnikiem
do egzemplarza klasy, a nie jego kopią. Konsekwencją tego jest fakt, i wszystkie modyfi-
kacje wykonane za jego pośrednictwem przez funkcję operatora modyfikują zawartość
wywoływanego egzemplarza klasy. Przykład wykorzystania funkcji
QRGTCVQT
prze-
ładowanego operatora
w celu zliczania znaków wprowadzanych z klawiatury zamiesz-
czono na listingu 3.1. Koniec ciągu wprowadzanych znaków oznaczamy klawiszem
Esc.
Zgłoś jeśli naruszono regulamin