Od Podstaw Visual C++ 2005

1205

Click here to load reader

Transcript of Od Podstaw Visual C++ 2005

dla pocztkujcych programistw . jzyka Visual C++ 2005 .....Jakpisa bezporednio w

Podrcznik

wydajne programy uruchamiane systemie Windows?

Jak byskawicznietworzy aplikacje na platform .NET? Jakie techniki by wygodnie zarzdza bazami danych?zastosowa,

..... .....

PROGRAMMER TO." Wilii

PROGRAMMER

dla pocztkujcych programistw jzyka Visual C++ 2005

Podrcznik

OD PODSTAW

Ivor Horton

~wrox

Helion http:/ /heUon.pl

Im

Tytu oryginau :

Beginning Visual CH 2005 PiwkoRog (wstp ,

Tumaczenie : ukasz

Marcin

rozdz. l - lO), (rozdz. II - 22 , dod . A, B)

ISBN : 978-83-246-0652-8 Copyright 2006 by Ivor Horton Ali Rights Reserved. This translation published under license. Translation copyright 2007 by Wydawnictwo Helion . Polish language edition published by Wydawnictwo Helion. Copyright 2007 Ali rights reserved. No part ofthis book may be reproduced or transmitted in any form or by any means, electronic or mechanical, including photocopying, recording or by any information storage retrieval system, without permission from the Publisher. Wszelkie prawa zastrzeone. Nieautoryzowane rozpowszechnianie caoci lub fragmentu niniejszej publikacji w jakiejkolwiek postaci jest zabronione. Wykonywanie kopii metod kserograficzn, fotograficzn, a take kopiowanie ksiki na noniku filmowym, magnetycznym lub innym powoduje naruszenie praw autorskich niniejszej publikacji . Wszystkie znaki ich wacicieli.

wystpujce

w

tekcie s zastrzeonymi

znakami firmowymi

bd

towarowymi

The Wrox Brand trade dres s is a trademark ofWiley Publishing, Inc. in the United States and/or other countries. Used by permission. Visual C++ is registered trademark of Microsoft Corporation in the United States and/or other countries. Ali other trademarks are the property of their respective owners. The Wrox Brand jest zastrzeonym znakiem towarowym Wiley Publishing, Inc . na terenie Stanw Zjednoczonych i innych krajw. Wykorzystano za zgod waciciela . Autor oraz Wydawnictwo HELION dooyli wszelkich stara, by zawarte w tej ksice informacje byy kompletne i rzetelne. Nie bior jednak adnej odpowiedzialnociani za ich wykorzystanie, ani za zwizane z tym ewentualne naruszenie praw patentowych lub autorskich. Autor oraz Wydawnictwo HELION nie ponosz rwnie adnej odpowiedzialnoci za ewentualne szkody wynike z wykorzystania informacji zawartych w ksice . Wydawnictwo HELION ul. Kociuszki lc , 44-100 GLIWICE tel. 032 231 22 19, 032 230 98 63 e-mail : he/ion@he/ion.p/ WWW : http://he/ion.p/(ksigarnia internetowa, kata Drogi Czytelniku! chcesz oceni t ksik, zajrzyj pod adres http://he/ion.p//user/opinie?vcpppo Moesz tam wpisa swoje uwagi, spostrzeenia , recJeeli

Printed in Poland .

Ks ik dedyku A/exandrowi Gi/bey owi. j Z n iecierpli wo ci oczekuj na jego komentarze, a/e pewnie bd musial j eszcze troch p oczeka.

PodzikowaniaZa woony wysiek i wsparcie chciabym podzikowa wydawnictwu John Wiley & Sons oraz zespoowi edytorskiemu i produkcyjnemu wydawnictwa Wrox . W szczeglnoci chcia bym tutaj wyrni redaktora naczelnego ds. rozwoju - Kevina Kenta, ktry wspiera mnie od samego pocztku do koca pisania tej ksiki. Chciabym rwnie podzikowa edytorowi technicznemu - Johnowi Muellerowi za dokadne przeczytanie mojego tekstu i poprawienie, mam nadziej, wikszoci popenionych przeze mnie bdw, wyprbowanie wszystkich fragmentw kodu oraz konstruktywne komentarze, ktre uczyniy t ksik o wiele lepsz. Na koniec chciabym podzikowa mojej onie , Eve, za jej cierpliwo , pogod ducha oraz wspieranie mnie podczas dugiego okresu przelewania moich myli na karty tej ksiki. Jak ju wielokrotnie wspominaem wczeniej - bez niej ksika ta nie mogaby powsta.

Spis trecioautorzeWstp Rozdzia

19 21

1. Programowanie przy uyciu Visual C++ 2005

27

27 28 29 30 31 32 32 33 35 35 37 3 8 39 39 40 54 55 58 61

rodow is ko programistyczne .NET

Common anguage Runtime (CLR) Pisanie programw w C++ Nauka programowania dla systemu Windows Nauka C++ Standardy C++ Aplikacje dziaajce w trybie konsoli Koncepcje programowania w systemie Windows Czym jest zintegrowane rodow isko programistyczne Skadn iki systemu Uywanie IDE Opcje paska narzdz i Dokowalne paski narzdzi Dokumentacja Projekty i rozwizania Ustawianie opcji w Visual C++ 2005 Tworzenie i uruchamianie programw dla Windowsa Tworzenie aplikacji Windows Forms Podsumowan ieRozdzia 2.Dane. zmienne i dZiaania

arytmetyczne

63

64 71 72 74 75 75 76 77 78 79 80 80 81 82 83

Struktura programu w C++ Funkcja mainO Instrukcje programu Biae znaki Bloki instrukcj i Programy konsolowe generowane automatyczn ie Definiowanie zmiennych Zasady nadawania nazw zmiennym Deklarowanie zmiennych Warto pocztkowa zmiennej Podstawowe typy danych Zmienne cakowite Znakowe typy danych Modyfikatory typu integer Typ logiczny

6

Visual C++ 2005. Od podstawTypy zmienno pozycyjneLiteray

Definiowanie synonimw typw danych Zmienne o okre lonych zbiorach wartoci Okrelanie typu st-aych wyliczeniowych Podstawowe operacj e wej c ia -wyj c ia Wprowadzanie danych z klawiatury Wysyanie danych do wiersza polece Formatowan ie wysyanych danych Kodowanie znakw specjalnych Wykonywanie oblicze w C++ Instrukcja przypisania Dziaania arytmetyczne Obliczanie reszty Modyfikowanie zmiennej Operatory inkrem entacji i dekrementacji Kolejno wykonywania oblicze Typy zmiennych i rzutowanie Zasady rzutowania operandw Rzutowanie w instrukcjach przypisania Rzutowanie jawne Rzutowanie w starym stylu Operatory bitowe Czas yci a i zas ig zmiennych Zmienne automatyczne Pozycjonowanie deklaracj i zmiennych Zmienne globalne Zmienne statyczne Przestrzenie nazw Deklarowanie przest rzeni nazw Wielokrotne deklar acje przestrzeni nazw Programowanie w C++jCLI Fundamentalne typy danych w C++jCLI Wysyan ie danych do wiersza polece w C++jCLI C++jCLI - formatowanie danych wyjciowych C++jCLI - wprowadzanie danych z klawiatury Bezpieczne rzutowanie Wyliczenia w C++jCLI Podsumowaniewiczenia Rozdzia 3.Decyzje i ptle

:

84 85 86 87 88 89 89 90 91 92 94 9 4 95 100 101 102 104 106 106 107 108 109 109 116 116 119 119 123 123 125 126 128 128 133 133 136 137 138 141 142

145

145 147 148 150 152 154 158 159 162

Porwnywanie wartoci Instrukcja warunkowa if Zagniedani inst rukcji warunkowych if e Rozszerzona instrukcja warunkowa if Zagniedanie instru kcji warunkowych lf-else Operatory logiczne i wyraen ia Operator warunkowy Instrukcja switch Przejc ie bezwarunkowe

Spis IreciPowtarzanie blokw instrukcji Czym jest ptla Rne sposoby uycia ptli for Ptla while Ptla do-whileZagniedanie ptli

7163 163 165 174 176 177 180 184 187 187

Programowanie w C++jCLI Ptla for each Podsumowan iewiczenia

Rozdzia 4. Tablice, acuchyObsuga

znakw i wskaniki

189

190 190 191 194 196 200 203 203 204 205 207 213 215 217 224 224 224 225 228 229 229 229 230 231 233 248 258 258 261 263

wielu wartoci danych tego samego typu Tablice Deklarowanie tablic Inicjalizacja tablic Tablice znakowe oraz obsuga acuchw Tablice wielowymiarowe Poredni dostp do danych Czym jest wskanik Deklarowanie wskanikw Uywanie wskanikw , Inicjalizowanie wskanikw Operator sizeof Stae wskaniki oraz wskaniki do staych Wskaniki i tablice Dynamiczne przydzielanie pamici Pam i wolna, czyli sterta : Operatory new i delete Dynamiczne przydzielanie pamic i tablicom Dynamiczne przydzielanie pamici tablicom wielowymiarowym Uywanie referencji Czym jest referencja Deklarowanie i inicjalizowanie referencji Programowanie w C++JCLI Uchwyty ledzce Tablice CLRacuchy

Referencje

ledzce

Wskaniki wewntrzne

Podsumowan iewiczenia

Rozdzia5. Wprowadzanie struktury do programuZrozumie

265

266 267 267 269 273 274 275

funkcje Do czego potrzebne s funkcje Struktura funkcji Uywanie funkcji Przekazywanie argumentw do funkcji Mechanizm przekazywania przez warto Wskaniki jako argumenty funkcji

8

Visual C++ 2005. Od podstawPrzekazywa nie tabl ic do funkcji Referencje jako argumenty funkcj i Zastosowanie modyfikatora const Argumenty funkcji malm) Akceptowanie zmiennej liczby argumentw funkcji Zwracanie wartoci przez funkcj Zwracanie wskanika Zwracanie referencji Zmienna statyczna w funkcji Wywoania funkcj i rekurencyjnej Stosowanie rekurencji Programowanie w C++/CLI Funkcje przyjmujce zmienn liczb argumentw Argumenty funkcji maint) Podsumowan iewiczenia

277 281 283 285 287 289 289 292 295 297 300 300 301 302 303 304

Rozdzia 6. Ostrukturze programu Wskaniki

cig

dalszJ

305

306 306 309 311 312 314 316 316 318 318 320 321 323 323 324 326 326 330 330 333 334 337 339 340 343 343 345 351 357 358

do funkcji Deklarowan ie wskanikw do funkcji Wskanik do funkcji jako argument Tablice wskanikw do funkcj i Inicjalizowan ie parametrw funkcjiWywoywanie wyjtkw

Wyjtki

Przechwytywanie wyjtkw MFC Obsuga bdw przydzielania pamici Przeadowywaniefunkcji Czym jest przeadowywaniefunkcji Kiedy stosowa przeadowywanie funkcji Szablony funkcji Stosowanie szablonu funkcji Przykad uywania funkcji Implementacja kalkulatora Usuwanie spacji z acucha Obliczanie wartoci wyraen ia Obliczanie wartoci skadn ika Analizowanie liczby Skadanie caego programu Rozszerzanie programu Wydobywanie podacucha Uruchamianie zmodyfikowanego programu Programowanie w C++/CLI Funkcje generyczne Kalkulator CLR PodsumowanieObsuga wyjtkw w

:

wiczenia

Spis treciRozdzia 7. Deliniowanie wasnych

9 359

360 360 360 361 361 365 366 367 369 372 373 373 374 376 378 379 380 380 382 385 387 387 390 391 394 395 398 399 .400 401 402 403 405 406 406 409

Iypw danych

Struktury w jzyku C++ Czym jest struktura Definiowanie struktury Inicjali zowanie struktury Uzyskiwanie dostpu do pl struktury Pomoc mechanizmu Intellisense w pracy ze strukturami Struktura RECT Uywanie wskanikw ze strukturam i Typy danych , obiekty, klasy i egzemplarze Zrozumie klasy Definiowanie klasy Deklarowanie obiektw klasy Uzyskiwanie dostpu do zmiennych skadowych klasy Funkcje skadowe klasy Umiejscowienie definicji funkcji skadowej Funkcje inline Konstruktory klas Czym jest konstruktor Konstruktor domylny Przypisywanie domylnych wartoc i parametrom umieszczonym w klasach Uywanie listy inicjalizacyjnej w konstruktorze Prywatne skadowe klasy Uzyskiwanie dostpu do prywatnych zmiennych skadowych klasy Przyjaciele klasy Domylny konstruktor kopiujcy Wskanik th is Stae obiekty klasy Stae funkcje skadowe klasy Definiowan ie funkcji skadowej poza klas Tablice obiektw klasy Skadowe statyczne klasy Statyczne zmienne skadowe klasy Statyczne funkcje skadowe klasy Wskaniki i referencje do obiektw klasy Wskan ik i do obiektw Referencje do obiektw Programowanie w C++/CLI Definiowanie typw klas wartoci Definiowanie typw referencyjnych Waciwoci klasy , Pola initonly Konstruktor statyczny Podsumowaniewiczenia

411

412 417 420 433 434 435 436

:

10

Visual C++ 2005. Od podslaw Rozdziala. Wicej na lemat klasDestruk tory klas Czym jest destruktor Destruktor domylny Destruktory i dynamiczne przydzielani e pam ici Implementacja konstruktora kopiujcego Dzielenie pamici pomidzy zmiennymi Definiowanie unii Unie anonimowe Unie w klasach i strukturach Przeadowywanie operatorw Implementacja przeadowanego operatora Implementacja penej obsugi operatora Przeadowywanie operatora przypisania Przeadowywanie operatora dodawania Przeadowywanie operatorw inkrement acj i i dekrementacji Szablony klas Definiowanie szablonu klasy Tworzenie obiektw klasy szablonu Szablony klas z wieloma parametrami Uywanie klas Interfejs klasy Definiowan ie problemu Implementacja klasy Definiowanie klasy CBox Zastosowanie klasy CBox Organizowanie kodu programu Nazewnictwo plikw programu Programowanie w C++jCLI Przeadowywanie operatorw w klasach wartoci Przeadowywani operatorw inkrement acj i i dekrementacji e Przeadowywanie operatorw w klasach referencyjnych Podsumowaniewiczenia

439

439 440 440 442 445 448 448 450 450 450 451 454 458 464 468 468 469 472 475 477 477 477 478 486 497 500 500 502 503 508 509 511 512

Rozdzial9. Dziedziczenie i funkcje wirlualnePodstawy programowan ia zorientowanego obiektowo (OOP) Dziedziczenie w klasach Czym jest klasa bazowa Tworzenie klas pochodnych Kontrola dostpu do dziedziczonych skadowych Dziaanie konstruktora w klasie pochodnej Deklarowan ie chronionych skadowych klasy Poziom dostpu do dziedziczonych skadowych klasy Konstruktor kopiujcy w klasie pochodnej Skadowe klasy jako przyjaciele Klasy zaprzyjanione Ograniczenia klas zaprzyjanionych Funkcje wirtualne Czym jest funkcja wirtualna Uywanie wskanikw do obiektw klas Uywanie referencji z funkcjami wirtualnymi

515

515 517 517 518 521 524 528 531 532 537 538 538 539 541 544 545

Spis treciFunkcje czysto wirtualne Klasy abstrakcyjne Porednie klasy bazowe Wirtualne destruktory Rzutowanie pomidzy typam i klasowym i Klasy zagniedone Programowanie w C++ /CLI Dziedziczenie w C++/CLI Klasy interfejsowe Definiowanie klas interfejsowych Klasy i asemblacje Definiowanie nowych funkcji Delegaty i zdarzenia Finalizatory i destruktory w klasach referencyjnych Klasy generyczne Podsumowanie wiczenia _ ,

11547 548 551 553 559 559 563 563 569 570 574 579 579 592 594 605 607

:

Rozdzial10. DebugowanieCo znaczy debugowanieBdyoprogramowania

611

611 613 614 615 617 619 620 625 625 626 627 633 633 635 638 641 641 642 643 644 650 650 659

Najczciej spotykane bdy Podstawowe operacje debugowania Ustawianie punktw wstrzymania Ustawianie punktw ledzenia Rozpoczynanie debugowania Zmien ianie wartoci zmiennej Dodawanie kodu debugujcego Asercje Dodawanie wasnego kodu debugowana Debugowanie programu Stos wywoa Szukanie bdu krok po kroku Testowanie rozszerzonej klasy Odnajdywanie nastpnego bdu Debugowanie pamici dynamicznej Funkcje sprawdzajce obszar wolnej pamici Sterowanie operacjami debugowanla obszaru wolnej Dane wyjciowe debuggera obszaru wolnej pamici Debugowanie programw w C++/CLI Uywanie klas Debug i Trace Podsumowanie

_

pam i ci

Rozdzial11. Zaoenia programowania dla systemu WindowsPodstawy programowania dla systemu Windows Elementy okna Programy dla Windowsa i system operacyjny Programy st erowane zdarzeniami Komunikaty Windowsa Windows API Typy danych w systemie Windows Notacj a w programach dla systemu Windows :

661

662 663 664 665 665 666 666 667

12

Visual C++ 2005. Od podslawStruktura programu dla systemu Windows Funkcja WinMalnt) Funkcje przetwarzania komunikatw Prosty program dla systemu Windows Organizacja programu dla systemu Windows Microsoft Foundation Classes Notacja MFC Jak jest ustrukturyzowany program MFC Korzystani e z formularzy systemu Windows Podsumowanie 668 669 681 686 686 689 689 690 693 695

Rozdzial12. PrOgramowanie dla systemu Windows zwykorzystaniem Microsoft Foundation C1assesArchitektura dokument-widok w MFC Czym jest dokument Interfejsy dokumentu Czym jest wido k lczenie dokumentu i jego widokw Aplikacja a MFC Tworzenie aplikacji MFC Tworzenie apl ikacji SDI Wynik dziaania MFC Application Wizard Tworzenie aplikacji MDI Podsumowanie wiczenia

699

700 700 700 70'1 702 702 705 707 710 721 724 724

Rozdzial13. Praca zmenu i paskami narzdziKomun ikacja z systemem Windows Zrozumie mapy komunikatw Kategorie komunikatw Obsuga komun ikatw w programie Rozwijanie programu Sketcher Elementy menu Tworzenie i edycja zasobw menu Dodawanie procedur obsugi dla komunikatw menu Wybieranie klasy obsugujcej komunikaty menu Tworzenie funkcj i komunikatu menu Tworzenie kodu dla funkcji komunikatw menu Dodawanie procedur obsugi komunikatw uaktualniajcych interfejs Dodawanie przyciskw paska narzdzi Edycja waciwoc i przycisku paska narzdzi Testowanie przyciskw narzdzi Dodawanie wskazwek Podsumowaniewiczenia

727

727 728 731 732 733 734 734 739 740 741 743 747 752 753 754 755 756 757

uytkownika

Rozdzial14. Rysowanie wokniePodstawy rysowania w oknie Obszar klienta okna Graphical Device Interface

759

759 760 761

SpiS treciMechanizm rysowania w Visual C++ Klasa widoku w aplikacji Klasa CDC Rysowanie grafiki w praktyce Programowanie myszy Komunikaty z myszy Procedury obsugi komunikatw myszy Rysowanie za pomoc myszy Testowanie szkicownika Uruchamianie przykadu Przechwytywanie komunikatw myszy Podsumowanie wiczeniaRozdzia 15. Tworzenie dokumentu ipoprawianie

13763 763 765 774 776 777 779 781 805 806 807 808 809

:

widoku

811

811 812 813 813 823 825 826 827 829 830 831 831 837 837 840 844 846 847 848 850 855 860 867 869 870

Czym s klasy kolekcji Typy kolekcji Klasy kolekcji z kontrol typw Kolekcje obiektw Kolekcje wska nikw z kontrol typw Korzystanie z szablonu klasy CList Rysowanie krzywej Definiowanie klasy CCurve Implementacja klasy CCurve Sprawdzanie klasy CCurve Tworzenie dokumentu Uywanie wzorca CTypedPtrList Poprawianie widoku Uaktualnianie wielokrotnych widokw Przewijanie widokw Korzystanie z trybu mapowania MM_LOENGLlSH Usuwanie i przesuwanie ksztatw Implementacja menu kontekstowego czenie menu z klas Wybieranie menu kontekstowego Podwietlanie elementw Obsuga komunikatw menu Rozwizywanie problemu nakadajcych si elementw Podsumowaniewiczenia Rozdzia 16. Praca z oknami

dialogowymi ikontrolkami

871

871 872 874 874 875 877 877 878 878

Poznaj okna dialogowe Poznaj kontrolki Wsplne kontrolki Tworzenie zasobu okna dialogowego Dodawanie kontrolek do okna dialogowego Programowanie okna dialogowego Dodawanie klasy dialogu Modalne i niemodalne okna dialogowe Wywietlanie okna dialogowego

14

Visual C++ 2005. Od podstawObs u ga

kont rolek okna dialogowego Inicjalizowanie kontrolek O b s u ga komunikatw przycisku opcj i Ko czenie operacj i okna dialogowego Dodawanie szerokoc i pira do dokument u Dodawanie szerok oci pira do elementw Tworzenie elementw w widoku Testowanie okna dialogowegoU ywani e p okrt a

Dodawanie element u menu Scale oraz przycisku paska Tworzenie po k rta Generowanie klasy okna dialogowego ScaleWyw i e tl an i e po k rta

n a rz d zi

Korzystanie ze w spc zynni ka skali Skalowalne tryby mapowania Ustawianie rozmiaru dokumentu Ust awianie t rybu mapowania Impleme ntowanie przewijania ze skalowaniem Praca z paskami stanu Dodawanie paska stanu do ramki U yw ani e pl list Usuwanie okna dialogowego Scale Tworzenie kontro lki pola list Korzystan ie z kont rolki pola tekstowego Tworzenie zasobu pola tekst owego Tworzenie klasy okna dialogowego Dodawanie element u menu Text Definiowanie elementu Text Impleme ntacja klasy CText Tworzenie element u Text Podsumowaniewiczeni a

882 88 2 884 885 885 88 6 88 7 88 8 889 88 9 88 9 89 2 89 5 89 6 896 897 898 900 90 2 90 2 906 90 7 907 910 911 9 12 9 14 9 15 9 16 9 17 9 19 920

Rozdzia 17. Przechowywanie i drukowanie dokumenlwPoznaj seri al i z acj Serializowanie dokumentu Serializacja w definicji klasy dokumentu Serializacj a w implement acji klasy dokumentu Zestaw fun kcj i klas opartych na CObject Jak d zi a a serializacj a Jak za im p l em entowa se r ia l izacj klasy Stosowanie seri alizacji Rejest rowanie zmian dokumentu Serializowanie dokumentu Serializowanie klas elementw Testowani e seriali zacji Przenoszenie tekst u Drukowanie dokument u Proces drukowania Implement acja wielostron icowych wydrukw Uzyskiwanie c a kowitego rozmiaru dokum entu Przechowywanie danych drukowania

921922 92 2 922 924 92 6 92 8 929 929 929 931 932 935 937 939 939 942 943 944

Spis treciPrzygotowania do wydruku Porzdkowanie po drukowaniu Przygotowywanie kont ekstu urzdzenia Drukowanie dokumentu Drukowanie dokum entu Podsumowaniewiczenia

15945 947 947 948 952 95 3 954

Rozdzial18. Tworzenie wasnych plikw DLLPoznaj DLL Jak dziaaj DLL Zawarto DLL Odmiany DLL Co umieci w DLL Pisanie DLL Pisanie i uywanie rozszerzajcej DLL Eksportowan ie zmiennych i funkcj i z DLL Importowanie symbol i do programu Implementowanie eksportowania symboli z DLL Podsumowani ewiczenia

955955 957 960 961 962 963 963 970 971 972 974 975

Rozdzia 19. lczenie si

ze rdami danych

977977 980 980 982 985 985 986 987 987 989 992 1002 1004 1004 1005 1006 1009 1013 1016 1022 1022 1023 1023 1024 1026 1028 1029 1031 1032 1032

Podstawy baz danych Nieco o jzyku SQL Pobieranie danych z uyciem jzyka SQL czenie tab el w jzyku SQL Sortowanie rekordw : Obsuga baz danych w MFC Klasy MFC obsugujce ODBC Tworzenie aplikacji bazodanowej Rejestrowanie bazy danych ODBC Generowan ie programu MFC ODBC Poznaj struktur programu Testowanie przykadu Sortowanie zestawu rekordw Zmienianie podpisu okna Uywanie drugiego obiektu zestawu rekordw Dodawanie klasy zestawu rekordw Dodawanie klasy widoku dla zestawu rekordw Dostosowywan ie zestawu rekordw Dostp do wielu widokw tablic Przegldanie zamwie na produkt Przegldanie informacji o kliencie Dodawanie zestawu rekordw dla informacji o kliencie Tworzenie zasobu okna dialogowego z informacjami o kliencie Tworzenie klasy widoku dla informacji o kliencie Dodawanie filtra Implementacja parametru filtra czenie okna dialogowego Order z oknem dialogowym Customer Testowanie przegldarki bazy danych Podsumowanie wiczenia

,

16

VislJal C++ 2005. Od podslawRozdzia20.lklualizacja rde danychOperacje aktual izacji Operacje aktualizacji CRecordSet Transakcje Prosty przykad uaktualnienia Dostosowywanie aplikacji Zarzdzanie procesem aktualizacji Implementacja trybu uaktualniania Dodawanie wierszy do tabeli Proces wpisywania zamwienia Tworzenie zasobw Tworzenie zest aww rekordw Tworzenie widokw zestawu rekordw Dodawanie kontrolek do zasobw dialogu Implementacja przeczania okien dialogowych Tworzenie identyf ikatora zamwienia Przechowywanie danych zamwienia Wybieranie produktw dla zamwienia Dodawanie nowego zamwienia Podsumowaniewiczenia

1033

1033 1034 1036 1038 1040 10 42 1044 1052 1053 1054 1055 1055 1060 1064 1068 1073 1075 1077 1082 1082

Rozdzia21.lplikacjewYkorzystujceWindows Forms

1083

1083 1084 1086 1087 1088 1089 1092 1094 1097 1099 1100 1102 1102 1108 1109 1115 1120 1128 1128 1131 1138 1139

Poznaj formularze systemu Windows Poznaj aplikacje Windows Forms Zmienianie waciwoci formularza Jak startuje aplikacja Dostosowywanie GUl aplikacji Dodawanie kontrolek do formularza Dodawanie zakadek Korzystanie z kontrolki GroupBox Uywanie kontrole k Button Korzystanie z kontrolki WebBrowser Sposb dziaania aplikacji Winning Application Dodawanie menu kontekstowego Tworzenie procedur obsugi zdarze , Obsuga zdarze dla menu l.lrnits Tworzenie okna dialogowego Uywanie okna dialogowego Dodawanie drugiego okna dialogowego Implementacja elementu menu Help/About Obsuga kliknicia przycisku Reagowanie na menu kontekstowe Podsumowaniewiczenia

Rozdzia 22. Dostp

do rde danych waplikacjach Windows Forms

1141

1142 1143 1143 1145

Praca ze rdam i danych Dostp do danych i ich wywietlanie Uywanie kontrolki DataGridView Uywanie kontrol ki DataGridView w trybie

niezwizanym

Spis IreciDostosowywan ie kontrolki DataGridView Dostosowywan ie komrek nagwkowych Dostosowywanie pozostaych komrek Dynamiczne ustawianie stylw komrki Uywanie trybu zwizanego Komponent BindingSource Korzystanie z kontro lki BindingNavigator W i zan ie z pojedynczymi kontrolkami Praca z wielom a tabelami Podsumowani ewiczenia

171151 1152 1153 1160 1165 1166 1171 1174 1178 1179 1180

Dodalek A Slowa kluczowe w Jzyku C++ Dodatek B Kody ASCii Skorowidz

1181 1183 1189

18

Visual C++ 2005. Od podstaw

oautorzeIvor Horton z wyk sztacenia jest matematykiem, a do informatyki zwabia go obietnica zarobkw przy niewielkim nakadzie pracy. Mimo e rzeczywisto okazaa si cakiem inna - duo pracy i raczej rednie zarobki - komputerami Ivor zajmuje si do dzi. Pracowa ju jako programista, projektant systemw, konsultant oraz kierownik wdraania projektw o duym stopniu zoonoci.duych

Horton ma wieloletnie dowiadczenie w tworzeniu i wdraaniu systemw komputerowych zastosowanie w projektowaniu inynierskim oraz w produkcji w rnych sekto rach gospodarki. Posiad a take due dowiadczenie w tworzeniu czasami przydatnych pro gramw w rnych jzykach programowania oraz nauczaniu, przede wszystkim naukow cw i inynierw, robienia tego samego. Ksiki na temat programowania pisze ju od ponad dziesiciu lat. Pord jego naj nowszych publikacji znajduj si pozycje dotyczce jzykw C, C++ oraz Java. Obecnie, kiedy Ivor nie pisze ksiek o programowaniu i nie zajmuje si doradzaniem , jego gwnymi zajciami s owienie ryb, podrowanie oraz szlifowanie francuskiego .majcych

20

Visual C++ 2005. Od podstaw

Wstp

Witaj drogi Czytelniku. Dziki temu egzemplarzowi moesz sta si efektywnym progra mist C++. Najnowszy system firmy Microsoft Visual Studio 2005 pozwala na tworzenie programw w dwch rnych, ale blisko spokrewnionych wersjach jzyka C++. Obsuguje on zarwno oryginaln, standardow wersj C++ ISO/ANSI, jak rwnie jego nowsz wersj znan pod nazw C++/CLI, ktra zostaa stworzona przez Microsoft i jest dzisiaj standardem ECMA. Obie te wersje uzupeniaj si i peni rne role. CH ISO/ANSI suy do tworzenia wysoko wydajnych programw, ktre mona uruchamia natywnie na komputerze. Natomiast CH/CLI zosta przygotowany specjalnie z myl o platformie .NET. Z ksiki tej nauczysz si programowa w obu wersjach C++. Przy pisaniu programu w ISO/ANSI CH znaczna cz kodu generowana jest automatycznie. Mimo tego uatwienia istnieje take konieczno samodzielnego wpisywania jego duych partii. Do tego celu trzeba dobrze rozumie ide programowania zorientowanego obiektowo, a take dysponowa znaczn wiedz na temat specyfiki programowania dla systemu Windows . Mimo e C++/CLI stworzony zosta dla platformy .NET , jest on take narzdziem wspoma gajcym tworzenie aplikacji za pomoc biblioteki Windows Forms, przy uyciu ktrej mona tworzy programy, piszc niewielkie iloci kodu, a czasami nawet bez takiej potrzeby. Oczywicie, gdy zachodzi potrzeba dodania kodu do aplikacji Windows Forms, nawet nie wielkiej jego iloci, trzeba posiada dogbn wiedz na temat jzyka CH/CLI.Jzyk

C++ ISO/ANSI jest nadal wybierany przez wielu profesjonalistw, ale szybko two rzenia programw, jak oferuje jzyk C++/CLI w poczeniu z bibliotek Windows Forms, powoduje, e ma on take due znaczenie. Z tego te powodu zdecydowaem si przedstawi w tej ksice oba rodzaje jzyka C++ .

Dla kogo iest ta ksikaCelem tej ksiki jest nauka pisania w jzyku C++ programw przeznaczonych dla systemu operacyjnego Microsoft Windows przy uyciu programu Visual C++ 2005 lub jednej z edycji rodowiska Visual Studio 2005. Ksika ta nie wymaga adnego wczeniejszego dowiad czenia w programowaniu w jakimkolwiek innym jzyku programowania. Ksika ta jest dla Ciebie, jeli: Posiadasz niewielkie dowiadczenie w programowaniu w innych jzykach, takich jak BASIC czy Pascal , i chcesz nauczy si C++ oraz rozwin praktyczne zdolnoci programowania dla systemu Microsoft Windows.

22

Visual C++ 2005. Od podstaw Masz pewne wdowiadczenie w

rodowisku ni rodowisku

programowaniu w C lub C++, ale w innym Windows, i chcesz poszerzy swoje umiejtnoci o programowanie Windows przy uyciu naj nowszych narzdzi i technologii.

Dopiero zaczynasz programowa i masz wystarczajco duo chci, aby zgbia tajniki programowania w jzyku C++. Aby nauka bya owocna, musisz przynajmniej zna podstawy dziaania komputera - jak wyglda organizacja pamici oraz w jaki sposb przechowywane s dane i instrukcje.

oCZym jest ta ksikaPisaem t ksik z myl nauczenia Czytelnika podstaw programowania w jzyku C++ przy uyciu obu technologii obsugiwanych przez Visual C++ 2005. Niniejszy egzemplarz stanowi szczegowy przewodnik po obu typach jzyka C++. Zatem opisane tutaj zostao tworzenie programw dla systemu Windows w natywnym jzyku C++ ISO/ANSI przy uyciu biblioteki Microsoft Foundation Classes (MFC) oraz w jzyku C++/CLI przy uyciu biblioteki Windows Forms. Ze wzgldu na wszechobecno technik bazodanowych w dzisiej szych czasach, ksika ta zawiera rwnie wprowadzenie do technik, za pomoc ktrych mona uzyska dostp do zasobw danych zarwno z poziomu programw utworzonych w technologii MFC, jak i Windows Forms. Programy MFC wymagaj pisania wikszych iloci kodu w porwnaniu z aplikacjami Windows Forms. Spowodowane jest to tym, e Win dows Forms pozwala na korzystanie z wysoko rozwinitych narzdzi Visual C++, umo liwiajcych utworzenie caoci graficznego interfejsu uytkownika (ang. Graphical User Interface - GUl) w trybie graficznym przy automatycznym wygenerowaniu kodu. Z tego te wzgldu wiksza cz tej ksiki powicona zostaa programowaniu w technologii MFC, a nie Windows Forms.

Organizacja ksikiRozdzia

1. stanowi wprowadzenie do podstawowych zagadnie, ktre naley mc tworzy zarwno natywne, jak i korzystajce z platformy .NET programy w jzyku C++. Dodatkowo wprowadzam take podstawy posugiwania si rodowiskiem programistycznym Visual C++ 2005. Podstawy te pozwol na wykorzystanie moliwoci Visual C++ 2005 do tworzenia rnego typu programw w jzyku C++, o ktrych bdzie mowa w dalszych rozdziaach ksiki.zrozumie, aby

2. - 10. powicone zostay nauce obu wersj i jzyka C++ oraz podstawowych zagadnie i technik znajdowania bdw. Kady z tych rozdziaw zosta napisany wedug tego samego wzoru. Pierwsza poowa powicona jest tematom zwizanym z C++ ISO/ANSI, a druga traktuje o C++/CLI.Rozdzia

Rozdziay

11. stanowi opis struktury aplikacji systemu Microsoft Windows i opisuje oraz pokazuje najwaniejsze komponenty, ktre posiada kady taki program. W rozdziale tym znajduj si wyjanienia prostych przykadowych programw

Wstp

23

korzystajcych z C++ ISO/ANSI oraz API Windows, jak rwnie przykad prostego programu utworzonego w technologii C++ /CLI przy uyciu biblioteki Windows Forms.

Rozdziay 12. - 17. szczegowo opisuj moliwoci , jakie daje MFC przy budowie GUl. Nauczysz si tworzy i uywa najczciej spotykane kontolki do budowy graficznego interfejsu uytkownika swojego programu, a take obsugiwa zdarzenia bdce rezultatem interakcji uytkownika z programem. W ten sposb utworzymy w peni dziaajc aplikacj. Dodatkowo na przykadzie tego programu nauczysz si drukowa i zapisywa na dysku dokumenty przy uyciu biblioteki MFC.

18. zawiera niezbdne informacje potrzebne do tworzenia wasnych bibliotek przy uyciu MFC. Dowiesz si, jakiego rodzaju biblioteki moesz tworzy, oraz utworzysz przykadowe biblioteki, ktre bd wsppracoway z programem napisanym w poprzednich szeciu rozdziaach.Rozdziay 19. i 20. powicone zostay uzyskiwaniu dostpu do zasobw danych z poziomu aplikacji MFC. Nauczysz si uzyskiwa dostp do bazy danych w trybie tylko do odczytu, a nastpnie poznasz podstawowe techniki programistyczne pozwalajce uaktualnia zawarto bazy danych przy uyciu biblioteki MFC. W przykadach wykorzystano baz danych Nortwind, ktr mona pobra z sieci . Opisane techniki mona rwnie zastosowa do wasnego rda danych .

Rozdzia

W rozdziale 21. za pomoc Windows Forms oraz C++/CLI piszemy przykadowy program, dziki ktremu nauczymy si tworzy kontrolki Windows Forms, dopasowywa je do wasnych potrzeb i ich uywa. Program ten jest rozbudowywany w trakcie rozdziau, pozwalajc Czytelnikowi na praktyczne zdobywanie dowiadczenia. Rozdzia 22. bazuje na wiedzy zdobytej w poprzednim rozdziale. Powicony zosta on kontrolkom sucym do uzyskiwania dostpu do rde danych oraz sposobom dopasowywania ich do wasnych potrzeb. Nauczysz si take tworzy programy z dostpem do bazy danych bez wpisywania kodu rdowego.

Wszystkie techniki programistyczne opisane w poszczeglnych rozdziaach zostay zilustro wane konkretnymi przykadami. Na kocu kadego rozdziau znajduje si podsumowanie najwaniejszych zagadnie w nim poruszonych. Wikszo rozdziaw zostaa dodatkowo uzupeniona o wiczenia pozwalajce zastosowa zdobyt wiedz w praktyce. Rozwizania do tych wicze mona pobra ze strony wydawcy.Cz ksiki powicona dziaajcych w

samemu jzykowi C++ bazuje na przykadowych programach trybie konsoli, z ktrymi komunikacja odbywa si z poziomu wiersza polece. Dz iki temu mona skupi s i na samych moliwociach oferowanych przez jzyk C++, bez wprowadzania niepotrzebnego zamtu zwizanego z zawiociami programowania GUl Windows. Programowanie dla systemu Windows jest moliwe dopiero wtedy, gdy zdobdzie si gruntown wiedz na temat jzyka programowania C++. Osoby sobie prostot mog rozpocz nauk od samego C++ ISO/ANSI. Kady z roz 2. - 10. najpierw opisuje okrelone moliwoci jzyka C++ ISO/ANSI, a nastpnie wprowadza nowe waciwoci dostpne w C++ /CLI dla tego samego kontekstu . Powodem takiej organizacji ksiki jest fakt , e C++/CLI zosta okrelony jako rozszerzenie C++dziaw cenice

24

Visual C++ 2005. Od podstawISO/ANSI. W zwizku z tym, aby zrozumie C++/CLI , naley wpierw nauczy si C++ ISO/ ANSI. Mona zatem skupi s i jedynie na tematach opisujcych s ta n dardow wersj jzyka C++ w rozdziaach od 2. do 20. i pomin czci dotyczce C++/CLI. Nastpnie mona przej do tworzenia programw dla systemu Windows w jzyku C++ ISO/ANS] bez koniecznoci pamitania o drugiej wersji tego jzyka . Do C++/CLI mona powrci, gdy poczujemy si pewnie w standardowej wersji. Mona oczywicie rozpocz nauk obu wersji jzyka od samego pocztku , stopniowo zwikszajc swoj wiedz na ich temat.

Czego bdZiesz

potrzebowa

do tei ksiki

Aby mc w peni korzysta z tej ksiki, potrzebujesz jednego z trzech programw: Visual Studio 2005 Standard Edition, Visual Studio 2005 Professional Edition lub Visual Studio 2005 Team System . Visual C++ Express 2005 nie przyda s i nam, poniewa nie zawiera biblioteki MFC. Aby mc zainstalowa oprogramowanie Visual Studio 2005, naley posiada system Windows XP z zainstalowanym zestawem poprawek Service Pack 2 lub Windows 2000 z zainstalowanym Service Pack 4. Wymagania sprztowe Visual Studio to co najmniej procesor z zegarem l GHz, 256 MB pamici RAM oraz nie mniej ni 1 GB wolnej prze strzeni na dysku systemowym oraz 2 GB na dysku, na ktrym zostanie zainstalowany pro gram. Do zainstalowania penej dokumentacj i MSDN dostpnej razem z oprogramowaniem potrzebne bdzie dodatkowe 1,8 GB na dysku instalacyjnym.Przykady z baz danych korzystaj z bazy Northwind Traders. Mona j znale, s zu k aj c frazy Northwind Traders na stronie http://msdn.microsoft.com, z ktrej mona j pobra . Mona oczywicie skorzysta ze wszystkich opisywanych przykadw w pracy z dowoln inn baz danych.

Aby odnie najwiksze korzyci z czytania tej ksiki, naley mie zapa do nauki oraz z uporem dy do opanowania naj potniejszego dostpnego obecnie narzdzia programi stycznego dla systemu Windows. Musisz si powici i wpisa wszystkie przykady kodu , oraz je przeanalizowa a take sprbowa rozwiza zadane wiczenia. Wszystko to brzmi o wiele gorzej, ni prezentuje si w rzeczywistoci . Nie oprzesz si uczuciu zaskoczenia, jak wiele udao Ci si osign w krtkim czasie . Naley take pamita, e kady, kto uczy si programowa, od czasu do czasu przechodzi trudne chwile. Ale jeli si nie poddasz, z czasem wszystko stanie si jasne. Ksika ta pomoe Ci rozpocz eksperymentowanie na wasn rk, a co za tym idzie - odnie sukce s jako programista C++ .

KonwencieAby umoliwi Czytelnikowi odniesienie jak najwikszych korzyci z czytania tej i uatwi zorientowanie si w temacie, w ksice tej przyjto kilka konwencji.ksiki

Wstp

25

Jako Sprbuj sam oznaczamyksiki.

wiczenia,

ktre powinny

zosta

wykonane na podstawie tekstu

Jak to dziaaPo kilku Sprbuj samnastpuje

Jak to dziaa, czyli

szczegowe objanienie

wpisanego kodu. bezpo

W ramkach takich jak ta przechowywane rednio do otaczajcego je tekstu.

s wane

informacje

odnoszce si

Wskazwki, porady, sztuczki i uwagiStyle wtekcie:

s

lekko przesunite i napisane

tak czcionk.

Nowe terminy i wane sowa pisane ich pierwszego pojawienia si. Kombinacje klawiszy prezentowane

s pismem

pochylonym w momencie Ctrl+A.

s nastpujco: obrbie

Nazwy plikw, adresy URL oraz kod w

tekstu oznaczone s nastpujco:

persistence.properties. Kod prezentowany jest na dwarne

sposoby:

Nowe i wane fragmenty kodu w przykadach znajduj si w ramkach Ramka uywana jest do oznaczania kodu mniej wanego w okrelonym kontekcie lub kodu. ktry by ju wczeniej prezentowany.Pracujc

z

przykadami

w

ksice,

kod

mona wpisywa rcznie

lub

skorzysta

z zasobw

dostpnych dla tej ksiki. Wszystkie przykady kodu z tej ksiki mona pobra ze strony

http://helion.pl/ksiazki/vcppo.htm.

26

Visual C++ 2005. Od podstaw

1

Programowanie przy uyciu lisual C++ 2005

Programowanie dla systemu Window s nie jest trudne , a Microsoft Yisu al C++ 2005 sprawi a, staje si ono wrcz banalne, o czym przekonamy s i w trakcie czytania tej ksik i . Jest tylko jeden problem: zanim zagb imy si w zawio ci programowania dla Windowsa, najpierw musimy dokadnie zapozna si z moliwo ciam i oferowanymi przez jzyk C++, a w szcze glnoci z technikami programowania zorientowanego obiektowo w tym jzyku. Techniki te s ta now i podstaw efektywn oci wszy stkich narzdzi dostarczanych przez Yisual C++ 2005 dla programowania w systemie Windows. W zwi zku z tym bardzo wane jest ich dobr e zro zumienie. W rozdziale tym dowiemy si:e

Jakie

s najw aniejsze skadniki rodowiska

Yisual C++ 2005.korzyci .

Z czego Czym Czym Jak Jak

skad a si

platforma .NET oraz jakie oferuje i proj ekty oraz j aks i je

s rozwizanias

tworzy.

programy

dziaajce

w trybie konsoli.

utworzy

i ed ytowa program. i uruchomi program konsolowy w C++.uruchomi

sk omp i l ow a , sk o nso l i d owa

A zatem nadszed czas, by wczy komputer, wisko Yisu al C++ oraz rozpocz przygod.

system Windows i potne

ro d o

rodowisko programistyczne .NETrodowisko programistyczne .NET stanowi cen t ra l n koncepcj Yisual C++ 2005, jak rwnie wszystkich innych produktw firmy Microsoft wykorzystujcych t platform. rodowisko .NET skada si z dwch komponentw : Common Language Runtime (CLR) ,

28

Visual C++ 2005. Od podstaww ktrym wykonywane s programy, oraz zbioru bibliotek, zwanych bibliotekami klas rodo wiska .NET. Biblioteki klas platformy .NET do starczaj funkcji potrzebnych do wykonania kodu w CLR bez wzgldu na uyty jzyk programowania. Oznacza to, e programy .NET napisane w C++, C# lub jakimkolwiek innym jzyku obsugujcym platform .NET korzy staj z tych samych bibliotek .NET. Za pomoc pakietu Visual C++ 2005 mona tworzy dwa podstawowe typy programw w C++. Istnieje moliwo napisania programu , ktry jest wykonywany natywnie, na tym samym komputerze - tego typu programy nazywamy programami natywnymi C++ i two rzymy je w C++ ISO/ANSI. Drugi typ to programy dziaajce pod kontrol CLR , ktre zostay napisane w rozszerzonej wersji C++, czyli C++/CLI. Programy te nazywamy programami CLR lub programami C++/CLI. Platforma .NET nie jest czci Visual C++ 2005, ale raczej skadnikiem systemu operacyj nego Windows, ktry uatwia tworzenie oprogramowania oraz usug sieciowych. Platforma ta zapewnia wiksz niezawodno kodu i jego bezpieczestwo,a take pozwala na integracj kodu C++ z kodem napisanym w ponad 20 innych jzykach programowania, ktre z ni wsppracuj. Jedn z wad programowania dla platformy .NET jest niewielka strata wydaj noci , ale w wikszoci przypadkw jest ona cakowicie niezauwaalna.

Common Language Runtime (CLRJCLR jest standardowym rodowiskiem do wykonywania programw napisanych w wielu rnych jzykach wysokiego poziomu, takich jak Visual Basic, C# czy wanie C++. Spe cyfikacja CLR w chwili obecnej zawiera si w standardzie CLI (ang. Common Language Infrastructurei, europejskiego stowarzyszenia producentw komputerw ECMA (ang . Euro pean Computer Manufacturersi - ECMA-335 , a take w rwnorzdnym standardzie ISO ISO/lEC 23271 , a wic CLR jest implementacj tego standardu. Mona atwo odgadn , dlaczego jzyk C++ dla CLR nazywany jest C++/CLI - jest to C++ dla Common Language Infrastructure (wsplna infrastruktura dla jzykw). Dziki temu kompilatory C++/CLI mona spotka take w innych systemach operacyjnych, ktre posiadaj implementacj CLI.

Wszelkie informacje o standardach ECMA dostpne s pod adresem: http ://www. ecma -international.org. Z tej strony mona nieodpatniepobra standard ECMA-335.CLI jest w rzeczywistoci specyfikacj maszyny wirtualnej, ktra umoliwia uruchamianie programw napisanych w rnych jzykach programowania wysokiego poziomu w rnych systemach operacyjnych bez zmiany lub ponownej kompilacji kodu rdowego. CLI defi niuje standardowy jzyk poredni dla maszyny wirtualnej , do ktrego kompilowany jest kod napisany w jednym z jzykw programowania wysokiego poziomu. Na platformie .NET jzyk ten nazywany jest Microsoft Intermediate Language (MSIL). Kod poredni jest ostatecznie mapowany na kod maszynowy "w locie" przez kompilator typu JIT podczas wykonywania programu. Kod poredni CLI mona oczywicie uruchomi w dowolnym ro dowisku posiadajcym implementacj CLI .

Rozdzial1. Programowanie przy uyciu Visual C++ 2005

29

CLI definiuje take wsplny zbir typw danych, zwany Common Type System (CTS), ktrego naley uywa przy pisaniu programw w jzykach majcych na celu implementacj CLI. CTS okrela sposb uywania typw danych w CLR i zawiera zestaw predefiniowanych typw. Mona take definiowa wasne typy danych, ale naley trzyma si okrelonych regu , aby zachowa zgodno z CLR (o tym za chwil). Standardowy system reprezentacji typw danych pozwala na jednolit obsug danych z poziomu komponentw napisanych w rnych jzykach programowania, a take na ich integracj w obrbie jednej aplikacji . CLR znacznie zwiksza bezpieczestwo danych i niezawodno kodu, czciowo ze wzgldu na fakt, e dynamiczne przydzielanie i zwalnianie pamici odbywa si w peni automatycznie, a czciowo poniewa kod MSIL jest dokadnie sprawdzany i poddawany walidacji przed wykonaniem programu. CLR jest tylko jedn implementacj specyfikacji CLI , ktra jest wykonywana w systemie Microsoft Windows na komputerach osobistych. Bez wtpienia implementacje CLI dla innych systemw operacyjnych i platform sprztowych take bd si pojawia. Terminy CLI i CLR mog by czasami stosowane zamiennie, ale naley pamita , e nie oznaczaj one dokadnie tego samego. CLI jest specyfikacj standardu, CLR za stwo rzonprzez firm Microsoft implementacj CLI.

Pisanie programw wC++Visual C++ 2005 umoliwia tworzenie wszelkiego rodzaju programw i ich skadnikw . Jak ju wspominaem wczeniej, w systemie Windows mamy do wyboru dwa typy aplika cji: programy wykonywane za pomoc CLR oraz programy kompilowane bezporednio do kodu maszynowego i wykonywane natywnie na komputerze . Tworzc aplikacje oparte na oknach dla CLR, jako podstaw GUl wykorzystuje si Windows Forms, ktre dostarczane s w bibliotekach platformy .NET. Korzystanie z Windows Forms znacznie przyspiesza tworze nie graficznego interfejsu uytkownika, gdy tworzy si go w trybie graficznym ze standar dowych komponentw, a kod generowany jest automatycznie. Programicie pozostaje ju tylko dopasowanie tak powstaego kodu do wasnych potrzeb w celu uzyskania wymaganejfunkcjonalnoci. Tworzc

kod wykonywany natywnie, do wyboru mamy kilka opcji . Jedn z nich jest uycie biblioteki Microsoft Foundation Classes (MFC) sucej do zaprogramowania interfejsu uytkownika aplikacji Windows. Biblioteka MFC zawiera w sobie API systemu operacyjnego Windows do tworzenia i kontrolowania GUl, a take znacznie uatwia proces rozwoju pro gramu. API Windows powstao duo wczeniej ni jzyk C++, a wic nie zawiera adnych cech waciwych technice programowania zorientowanego obiektowo, a byoby tak, gdyby zostao napisane dzisiaj. Oczywicie, nie ma obowizku uywania MFC. Jeli chcemy zyska na wydajnoci , moemy napisa kod C++ z bezporednim dostpem do API Windows. Kod C++ wykonywany w CLR opisywany jest jako CH zarzdzany (ang . managed C++), dane i kod s zarzdzane przez CLR. W programach CLR zwalnianie pamici przydzielonej dynamicznie odbywa si automatycznie. W ten sposb eliminuje si ryzyko wystpienia bdw typowych dla natywnych aplikacji CH. Kod CH, ktry wykonywany jest poza CLR, zwany jest czasami przez Microsoft CH niezarzdzanym (ang. unmanaged C++), poniewa CLR nie bierze udziau w jego wykonywaniu. Korzystajc z niezarzdzanegoponiewa

30

Visual C++ 2005. Od podslawC++, trzeba samodzielnie przydziela i zwalnia pami podczas wykonywania programu . Naley si take liczy z obnieniem poziomu bezpieczestwa, ktre daje CLR . Niezarzdzany C++ moe by czasami nazywany natywnym C++, gdy kompilowany jest on wprost do kodu maszynowego . Na rysunku 1.1 pokazano podstawowemoliwoci

tworzenia programw w C++.

Rysunek 1.1

System operacyjny

Sprzt

Rysunek 1.1 nie przedstawia jednak penego obrazu. Program moe skada si jednoczenie z kodu napisanego w zarzdzanym i natywnym C++ , a wic nie musimy trzyma si sztywno jednego stylu programowania. Oczywicie, mieszajc dwa rne typy kodu , tracimy pewne rzeczy, a wic podejcie to powinno by stosowane wycznie wtedy, gdy jest to konieczne, na przykad gdy chcemy przekonwertowa istniejcy ju program napisany w natywnym C++ na program dziaajcy pod kontrol CLR. Korzyci wynikajce z uywania zarzdzanego C++ nie s oczywicie dostpne z poziomu C++ natywnego, a komunikacja pomidzy skadnikami programu napisanymi w tych dwch typach jzyka moe by znacznie wydu ona. Moliwo czenia zarzdzanego i niezarzdzanego kodu w jednej aplikacji moe oka za si jednak nie do przecenienia, gdy zajdzie potrzeba rozwinicia lub rozszerzenia istniej cego niezarzdzanego kodu przy jednoczesnym korzystaniu z zalet uywania CLR. Oczywi cie, tworzc program od pocztku, przed rozpoczciem jego pisania naley zdecydowa si, jakiego typu aplikacj ma on by .

Nauka programowania dla slslemu WindowsTworzenie programw wykonywanych w systemie Windows oparte jest zawsze na dwch podstawowych aspektach dziaania: utworzeniu graficznego interfejsu uytkownika (GUl), z ktrym uytkownik wchodzi w interakcje, oraz wykonaniu kodu przetwarzajcego te inte

Rozdzial1. Programowanie przy uyciU Visual C++ 2005

31

rakcje w celu zapewnienia aplikacji funkcjonalnoci. Visual C++ 2005 znacznie uatwia prac nad tymi aspektami tworzenia aplikacji Windows . W dalszej czci tego rozdziau przekonamy si, e mona stworzy dziaajcy program dla Windowsa z GUl bez napisania nawet jednego wiersza kodu . Cay podstawowy kod moe zosta wygenerowany automatycznie przez Visual C++ 2005 . Zrozumienie sposobu dziaania tego kodu jest jednak niezbdne, gdy pniej bdziemy chcieli go zmodyfikowa i rozszerzy, aby wykonywa zamierzone przez nas czyn noci. Aby tego dokona , musimy bardzo dobrze rozumie C++ . Z tego powodu na pocztku skupimy si na nauce samego jzyka C++ (zarwno natywnego, jak i w wersji C++/CLI), bez wdawania si w zawioci programowania dla systemu Win dows. Gdy opanujemy ju sam jzyk C++, przejdziemy do tworzenia prawdziwych aplikacji Windows przy uyciu obu wersji jzyka C++. Oznacza to, e podczas nauki C++ bdziemy tworzy programy dziaajce z poziomu wiersza polece. Dziki takiemu podejciu bdzie mona skupi si na specyfice dziaania jzyka C++ i unikn w przyszoci komplikacji zwizanych z tworzeniem i kontrol GUL Po opanowaniu C++ stwierdzisz, e przejcie od praktycznego wykorzystania zdobytej wiedzy do tworzenia programw dla Windowsa jest naturalnym krokiem.

Nauka C++Visual C++ 2005 standardach:obsuguje

w

peni

dwie wersje jzyka C++, zdefiniowane w dwch

rnych

Standard C++ ISO/ANSI sucy do implementacji natywnych programw - C++ niezarzdzany . Ta wersja jzyka obsugiwana jest przez wikszo platform komputerowych. Standard C++/CLI, ktry zosta zaprojektowany specjalnie do tworzenia aplikacji dziaajcych pod kontrol CLR i stanowi rozszerzenie C++ ISO/ANSI.Rozdziay od 2. do 10. powicone s nauce jzyka C++. Ze wzgldu na fakt, e C++/CLI jest rozszerzeniem C++ ISO/ANSI , pierwsza cz kadego rozdziau wprowadza elementy jzyka C++ ISO/ANSI, a druga objania dodatkowe moliwoci, ktrych dostarcza C++/CLI. Piszc programy w C++/CLI , moemy w peni wykorzysta moliwoci platformy .NET, co nie jest moliwe w programach pisanych w C++ ISO/ANSI. Mimo e C++/CLI jest rozszerze niem C++ ISO/ANSI , aby program mg zosta wykonany cakowicie pod kontrol CLR, musi on zosta napisany zgodnie z wymaganiami tej technologii. Oznacza to, e C++ ISO/ANSI posiada pewne waciwo ci , ktrych nie mona wykorzystywa w CLR. Jednym z przykadw, jak mona si domyli, jest brak kompatybilnoci mechanizmw przydzielania i zwalniania pamici oferowanych przez C++ ISO/ANSI z CLR . Do zarzdzania pamici musimy korzy sta z mechanizmu CLR, a to z kolei oznacza, e musimy uywa klas C++/CLI, a nie na tywnych klas C++ .

32

Visual C++ 2005. Od podstaw

Standardy C++Standard ISO/ANSI zdefiniowany jest w dokumencie ISO/lEC 14882 opublikowanym przez American National Standards Institute (ANSI). C++ ISO/ANSI istnieje od roku 1998 i ma ju ugruntowan pozycj . Obsugiwany jest przez kompilatory wikszoci komputerowych platform sprztowych i systemw operacyjnych. Programy napisane w C++ ISO /ANSI mona do atwo przenosi pomidzy rnymi systemami, chocia prawdziwym wyznaczni kiem tego , czy dany program mona atwo przenie, czy nie , s funkcje klas przez niego uywanych w szczeglnoci klas zwizanych z budow GUl. Standard C++ ISO/ANSI jest wybierany przez wielu profesjonalnych programistw ze wzgldu na jego powszechn implementacj oraz dlatego, e jest to jeden z naj potniej szych dostpnych obecnie jzykw programowania.

Dokument iso.org.

opisujcy

standard C++ ISO/ANSI

mona zamwi

na stronie: http://www.

dziki

C++/CLI jest natomiast wersj jzyka C++, ktra rozszerza jego standardowe moliwoci, czemu lepiej obsuguje specyfikacj CLI zdefiniowan w standardzie ECMA-355. Pierwsza wersja robocza tego standardu pojawia si w 2003 roku i bya rozwijana ze wstpnej specyfikacji techn icznej stworzonej przez Microsoft w celu umoliw ienia uruchamiania programw C++ na platformie .NET. Tak wic zarwno CLI, jak i C++ /CLI wywodz si z firmy z Redmond , a ich przeznaczeniem jest wsppraca z platform .NET. Oczywicie ustandaryzowanie CLI oraz C++/CLI znacznie podwysza prawdopodobiestwo implemen tacji w rodowiskach innych ni Windows . Naley jednak pamita, e mimo i C++/CLI jest rozszerzeniem C++ ISO/ANSI, to niektrych waciwoci tego jzyka nie moemy wykorzy stywa, jeeli chcemy, aby nasze programy dziaay w peni pod kontrol CLR . O waciwo ciach tych pisz w nastpnych rozdziaach. CLR ma pewne waciwoci, ktre daj mu znaczn przewag nad rodowiskiem natywnym. Programy pisane dla CLR s bezpieczniejsze i mniej podatne na potencjalne bdy, ktre atwo popeni podczas wykorzystywania wszystkich moliwoci C++ ISO/ANSI. CLR usu wa rwnie wszelkie niekompatybilnoci zwizane z zastosowaniem rnych jzykw wyso kiego poziomu poprzez ustandaryzowanie rodowiska, dla ktrego tworzone s programy. Dziki temu mona czy moduy napisane w C++ z moduami napisanym i w innych jzy kach, takich jak C# lub Yisual Basic .

Aplikacje dziaajce

wtrybie konsoli

Poza typowymi programami dla Windowsa, Yisual CH 2005 pozwala take na pisanie, kom pilowanie i testowanie programw C++ pozbawionych caego bagau wymaganego od apli kacji okienkowych. Aplikacje te dziaaj w oparciu o tryb tekstowy i wiersz polece . W Yisual CH 2005 nazywaj si one aplikacjami konsolowymi (ang. eonsole applicationsy, poniewa komunikacja z nimi odbywa si za pomoc klawiatury i ekranu w trybie tekstowym .Piszc tego typu programy, mona odnie wraenie, e odchodzimy nieco od tematu ksiki (jest to konieczne przed rozpoczciem programowania specjalnie dla systemu Windows), ale jest to najlepszy sposb nauki C++. Nawet prosty program w Windowsie zbudowany jest

Rozdzia 1.

Programowanie przy uyciu Visual C++ 2005

33

liczby wierszy kodu i wane jest, aby zawioci zwizane z systemem Windows nie naszej uwagi skupionej na mechanizmach dziaania jzyka C++. W zwizku z tym w pocztkowych rozdziaach, w ktrych uczymy si samego jzyka C++, bdziemy tworzy proste aplikacje konsolowe, a dopiero pniej przejdziemy do bardziej skompliko wanych, zoonych z duej liczby wierszy kodu, programw dla Windowsa. zrozpraszay

duej

Podczas nauki C++ bdziemy mogli skoncentrowa si na waciwociach jzyka, nie mar twic si o rodowisko, w ktrym operujemy. Aplikacje konsolowe, ktre bdziemy tworzy, posiadaj interfejs tekstowy, ale dla zrozumienia C++ to cakowicie wystarczy. Sam jzyk z definicji nie posiada adnych moliwoci graficznych. Oczywicie programowaniu graficz nego interfejsu uytkownika powiciem duo miejsca, ale w tej czci ksiki, ktra zostaa powicona programowaniu dla Windowsa przy uyciu biblioteki MFC w natywnym C++ oraz Windows Forrns z CLR .Istniej dwa rodzaje aplikacji konsolowych i bdziemy uywa obu. Aplikacje konsolowe Win32 kompilowane s do kodu natywnego i za ich pomoc bdziemy wyprbowywa mo liwoci C++ ISO/ANSI. Aplikacje konsolowe CLR tworzone s dla CLR, a wic bdziemy ich uywa, pracujc z jzykiem CH/CLI.

Koncepcie programowania wsystemie WindowsNasze do programowania dla systemu Windows zakada wykorzystanie wszystkich w Visual C++ 2005. Narzdzia suce do tworzenia nowego projektu potrafi automatycznie wygenerowa kod szkieletu rnego rodzaju aplikacji, wczajc w to podstawowe programy dla Windowsa. Proces pisania kadego programu lub komponentu w Visual C++ 2005 rozpoczyna si od utworzenia nowego projektu. Aby sprawdzi , jak to dziaa, w dalszej czci rozdziau utworzymy kilka przykadw wcznie ze szkieletem pro gramu dla Windowsa.narzdzi dostpnych podejcie

Programy w Windowsie maj inn budow ni typowe aplikacje konsolowe wykonywane za pomoc wiersza polece - s bardziej skomplikowane. W aplikacji konsolowej dane mona przyjmowa wprost z klawiatury i wyniki dziaa wysya z powrotem do wiersza polece. Programy dla Windowsa natomiast pobieraj i wysyaj dane wycznie za pomoc funkcji systemu Windows . Nie pozwalaj one na dostp do zasobw sprztowych . Ze wzgldu na fakt, e system Windows pozwala na uruchamianie kilku aplikacji naraz, musi on umie okreli, dla ktrej z nich przeznaczone zostao dane zdarzenie, np. kliknicie przyciskiem myszki lub nacinicie klawisza na klawiaturze, a nastpnie wysa sygna do waciwego programu. Dziki temu system Windows sprawuje podstawow " ko n tro l nad caym procesem komuni kacji z uytkownikiem. A zatem natura interfejsu pomidzy uytkownikiem a systemem Windows jest taka, e po zwala na wiele rnych operacji wejcia i wyjcia w tym samym czasie. Uytkownik moe wybra jedn z wielu opcji dostpnych w menu, klikn przycisk na pasku narzdzi czy przy ciskiem myszki w dowolnym miejscu okna aplikacji. Dobrze zaprojektowany program dla Windowsa musi by przygotowany na wszelkiego rodzaju dane wejciowe w dowolnym czasie, gdy nie ma sposobu dowiedzenia si z gry, jakiego rodzaju dane wejciowe zostan przekazane . Czynnoci tego typu wykonywane przez uytkownika s przechwytywane przez system jako pierwsze i nazywaj si zdarzeniami. Zdarzenie wywoane przez uytkownika

34

Visual C++ 2005. Od podstaww obrbie interfejsu powoduje zazwyczaj wykonanie okrelonego fragmentu kodu. A zatem sposb wykonywania caego programu zaley od zachowania uytkownika. Programy ope rujce w ten sposb nazywane s programami zdarzeniowymi i rni si od zwykych programw proceduralnych, ktre odznaczaj si pojedyncz kolejnoci wykonywania . Wprowadzanie danych do programu proceduralnego kontrolowane jest przez jego kod i moe mie miejsce tylko wtedy, gdy program na to zezwoli. Tak wic program Windows skada si przede wszystkim z fragmentw kodu , ktre reaguj na zdarzenia spowodowane przez uyt kownika lub sam system. Struktura tego typu programu zostaa przedstawiona na rysunku 1.2.

Zdarzenia:Wcinicie Wcinicie

Dane z klawiatury

lewego przycisku myszy

prawego przycisku myszy

---------

WINDOWS

Przetwarzanie donych z klawiatury

Przetwarzanie zdarzenia nacinicia lewego przycisku myszy

Przetwarzanie zdarzenia nacinicia prawego przycisku myszy

------ -

-;

Dane programu

Naszprogram

Rysunek 1.2Kady prostokt na rysunku 1.2 reprezentuje fragment kodu napisany specjalnie do obsugi jednego okrelonego zdarzenia. Z rysunku mona wywnioskowa, e przedstawiony pro gram jest nieco rozbity ze wzgldu na brak pocze pomidzy niektrymi blokami, ale tak nie jest, gdy gwnym spoiwem jest tutaj system operacyjny Windows. Piszc program, mona go traktowa jako swego rodzaju nauk wykonywania okrelonych czynnoci w sys temie Windows.

Rozdzia 1.

Programowanie przy uyciu Visual C++ 2005

35

Oczywicie wszystkie moduy obsugujce rne zdarzenia zewntrzne, takie jak wybr menu

lub kliknicie przyciskiem myszki , maj dostp do wsplnej puli danych waciwych dla danej aplikacji. Dane te zawieraj informacje o tym, czym jest program - np. bloki tekstu w edytorze lub rekordy przechowujce punkty gracza w programie majcym za zadanie le dzenie wynikw druyny pikarskiej - jak rwnie informacje o niektrych zdarzeniach ma jcych miejsce podczas wykonywania programu . Te wspdzielone dane pozwalaj rnym czciom programu, ktre wydaj si niezalene, komunikowa si oraz operowa w skoor dynowany i zintegrowany sposb. Wicej na ten temat pisz w dalszej czci ksiki. Nawet najbardziej podstawowy program dla Windowsa skada si z kilku wierszy kodu, a w programach wygenerowanych za pomoc kreatora takiego jak Visual C++ 2005 kilka przeistacza si w kilkaset. Aby uproci proces nauki C++, potrzebujemy jak najprostszego kontekstu. Na szczcie Visual C++ 2005 posiada ro d o w i s k o w sam raz nadajce si do tego celu.

Czym jest zintegrowane rodowisko programistyczneZintegrowane rodowisko programistyczne (ang. Integrated Developm ent Environment IDE) , ktre dostarczane jest z Visual C++ 2005, jest kompletn platform do tworzenia, kom pilowania, konsolidowania i testowania programw napisanych w C++. Tak si skada, e doskonale nadaje si rwnie do nauki jzyka C++ (w szczeglnoci w poczeniu z dobrksik).

Visual C++ 2005 zawiera wiele w peni zintegrowanych narzdzi zaprojektowanych w celu uproszczenia caego procesu pisania programw w C++. Cz tych narzdzi poznamy ju w tym rozdziale, ale zamiast przedziera si przez nudn list abstrakcyjnych opcji i waciwo ci, najpierw opanujmy podstawy, aby zobaczy, jak dziaa IDE. Reszta przyjdzie stopniowo, w miar postpu nauki.

Skadniki

systemu

Podstawowymi skadnikami Visual C++ 2005, dostarczanymi jako cz IDE, s edytor, kompilator, program czcy (konsolidator) oraz biblioteki. S to narzdzia niezbdne do napisania i wykonania programu w C++ . Ich funkcje zostay opisane poniej .

EdylorEdytor jest interaktywnym rodowiskiem do tworzenia i edycji kodu rdowego w jzyku C++. Poza typowymi, znanymi kademu funkcjami typu kopiuj i wklej, edytor posiada take funkcj kolorowania kodu . Edytor automatycznie rozpoznaje podstawowe sowa kluczowe

36

VisIlai C++ 2005. Od podstaww jzyku C++ i nadaje im odpowiedni kolor, zgodnie z ich przeznaczeniem. Funkcja ta nie tylko sprawia, e kod jest o wiele bardziej czytelny, ale take pozwala natychmiast zoriento wa si, e zosta popeniony bd przy wpisywaniu tych sw.

KompilatorKompilator konwertuje kod rdowy na kod obiektowy oraz wykrywa bdy wystpujce podczas procesu kompilacji i o nich raportuje. Kompilator potrafi wykry wiele rnego rodzaju bdw zwizanych z nieprawidowym lub nierozpoznanym kodem, jak rwnie b dw strukturalnych, np. kiedy fragment kodu nigdy nie zostanie wykonany. Kod obiektowy wygenerowany przez kompilator przechowywany jest w plikach zwanych plikami obiekto wymi. Istniej dwa rodzaje kodu obiektowego, ktry moe zosta wygenerowany przez kom pilator. Kody te zazwyczaj przechowywane s w plikach o rozszerzeniu .obj.

Program czCYProgram czcy (konsolidator) docza rne moduy wygenerowane przez kompilator z pli kw z kodem rdowym, dodaje wymagane moduy z kodem z bibliotek dostarczanych jako cz C++ oraz czy wszystko w jedn wykonywa1n cao. Konsolidator moe take wykrywa bdy i o nich raportowa, np. gdy brakuje czci programu lub gdy znajdzie odwoanie do nieistniejcego komponentu biblioteki.

Bibliotekijzyka

Biblioteka to po prostu zbir wczeniej napisanych procedur, ktre rozszerzaj moliwoci C++, dostarczajc standardowych, profesjonalnie zaprojektowanych jednostek kodu, ktre mona wykorzysta we wasnych programach w celu wykonania niektrych czstych operacji. Operacje zaimplementowane przez procedury w rozmaitych bibliotekach dostar czanych przez Visual C++ 2005 znacznie zwikszaj produktywno, poniewa pozwalaj zaoszczdzi czas potrzebny na napisanie i testowanie kodu dla tych operacji. Wspominaem ju o bibliotece platformy .NET, ale jest ich o wiele wicej, zbyt wiele, by je wszystkie tutaj wymieni, ale najwaniejsze z nich zostan opisane. Standardowa biblioteka C++ definiuje podstawowy zestaw procedur wsplnych dJa wszyst kich kompilatorw C++ ISO/ANSI. Zawiera wiele procedur, na przykad funkcje operujce na liczbach (na przykad obliczajce pierwiastek kwadratowy czy funkcje trygonometryczne), procedury przetwarzania znakw i cigw, takie jak klasyfikacja znakw i porwnywanie cigw, a take wiele innych. W trakcie nauki jzyka C++ ISO/ANSI nauczymy si posugi wa wieloma z nich. Istniej take biblioteki obsugujce rozszerzenia C++/CLI do C++ ISO/ANSI.Natywne aplikacje oparte na oknach obsugiwane s przez bibliotek zwan Microsoft Foun dation Classes (MFC). Biblioteka ta w znacznym stopniu uatwia proces tworzenia graficz nego interfejsu aplikacji. Wicej na temat biblioteki MFC dowiemy si po zakoczeniu nauki jzyka C++. Inna biblioteka zawiera zestaw narzdzi - zwanych Windows Forms - mniej

Rozdzia 1.

Programowanie przy uyciu Visual C++ 2005

37

wicej o d po w i ad ajcy c h

bibliotece MFC dla programw opartych na oknach, ktre wyko nywane s za pomoc ro d o w is k a .NET . W dalszej czc i ks i ki dowi emy si, jak uywa biblioteki Windows Forms do tworzenia programw.

Uywanie IDEWszystkie programy w tej ksice s tworzone i wykonywane wewntrz IDE. Po uruchomien iu aplikacj i Visual C++ 2005 powinni m y zoba czy okno podobne do tego na rysunku 1.3.1'';

File

Start Page - Microsoft Visual Studio Edit View rocs

m [gJ- =t ..

Recent Proleci'

l'r SON: Vlsual C+ + 1C+ + At Wark : IRegis:tr ar , Finding su bme nus . and Mor-eFr l, 08 sep 2C06 21:49 ;4 1 GMT - Thls rnonlh : DLL problams, conta xt menus, rvu= C str j-qs to man agedC++, and mors.

C+ + At Wark : Cr eat e dynamie dialogs, sat ellite Dt.Ls, and more fv'o1, 07 Aug 2006 2 1:36 :2 1 GMT - Th is mon lh Pau l rx.ssoa te ac hes

Open : Create:

Project.;

1\.';Jf" !'" s a.. - '

rea ders the rkjl t wCt to ( rea le dyna mk: d a logs , explains setalute OLls and I discusses lcI1guagereso.rce Oll s. C + + At Wark : Customizing Combobox and ListboxFn, 07.1J 2OC620 :29 :28 GMT - This rnonlh Faul Djt esc ta codes same M ~rosoft OffK: styls dialog box featur es. e

Pro]BC t ..

[weo SIt..

Net ti ng C + + : Resouc:e Cleanup

Ge lting Sta rted

No detin1t.1on e e i e e e e e

Ready

Rysunek 1.3Okno znajduj ce si po lewej stronie na rysunku 1.3 to okno ekspl oratora rozwiza (So/ution Exp/orer), okno znajdujce si w prawym grnym rogu, w ktrym obecnie wywietlona zo st aa strona startowa, to okno edytora (Edit or window), a okno na samym dole to okno wyj ci a (Output window). Okno eksploratora rozwiza umol iwia nawigacj pomidzy plikami programu oraz wy wietlan i e ich zawarto ci w oknie edytora, a take dodawanie nowych plikw do programu. Okn o Solution Explorer moe m ie do trzech dodatkowych z akadek (na rysunku 1.3 widoczne s tylko dwie) , ktre reprezentuj C/ass View (widok klas), Resour ce View (widok zasobw) oraz Property Manager (meneder waciwo ci) aplika cji . Wyboru wyw i e t l a nyc h zakad e k mona dokona w menu View. Okno edytora suy do wprowadza nia i modyfikowania kodu rdowego oraz innych komponentw aplikacji. Okno Output wywietla komunikaty powstae w wyniku kompilacji i konsolidacji programu .

38

Visual C++ 2005. Od podslaw

Opcje paska narzdziPaski narzdzi , ktre maj by wyw i etl an e , w Visual C++ mona wybra, przyci skiem myszy w polu paska n arzdzi. Pojawia si menu zawieraj ce paskw n arzdzi (rysunek lA). Aktywne paski s zaznaczone.klikajc

prawym

list dostpnych

Rysunek 1.4

'" l:=:IL......J

Bu ild Class Designer Crystal Reports - In ser t Crys ta I Reports - Ma in Data Design Database Diagr-am

'"

El

Debug Debug Location Device Dialog Edito r Formatti ng Help HTML Source Edit ing Image Editor Layout Query Designer Report Border s Report For matti ng Sour ce Contro i

El Standar dSty le Shee t Tab le Designer Text Editor

stworzy

W menu tym mona wybra , ktre paski narzdzi maj by zawsze widoczne. Mona sobie podobne ro d ow i s ko pracy jak na rysunku 1.3, wybi eraj c kolejno elementy menu: Sui/d, Class Designer, Debug , Standard oraz View Designer. Aby wybra element z listy, na ley klikn na szarym polu po jego lewej stronie . Aby sc h owa element, trzeba klikn znak zaznaczenia znajdujcy si po jego lewej stronie.przyda .

Nie ma potrzeby przeadowywa okna aplikacji paskami n arzdzi , ktre mog s i nam kiedy Niektre z nich pojawiaj si automatycznie, gdy s potrzebne, a wic prawdopo dobnie w wikszoci przyp adkw najlepszym rozwizaniem oka si domylne ustawienia. Podczas tworzenia programu mo emy doj do wniosku , e byoby wygodniej, gdyby niektre paski narzdzi byy wywietlone cay czas. Zestaw wywietlanych paskw mona modyfi kowa wedle potrzeb, klik ajc praw ym przyciskiem myszy na szarym polu w obrbi e paska n arzdzi i wybieraj c d an e paski z menu kontekstowego.

Rozdzia 1.

Programowanie przy uyciu Visual C++ 2005

39

Podobnie jak we wszystkich programa ch w Windowsie, w paskach narzdzi Visual C+ + 2005 dostpn e s chmurki z podpowiedziami . Aby dowiedzie s i. do czeg o suy dana opcja, naley umieci nad ni kursor i odcz eka sekund lub dwie na wywietlenie informacji w chmurce.

Dokowalne paski narzdziDokowalny pasek narzdzi to taki , ktry mona dowolnie przemieszcza w obrbie okna za pomoc myszy . Kiedy zostanie umieszczony w pobli u jednej z czterech krawdzi okna , jest dokowany i wygldem przypomina paski widoczne na grze okna. Pasek znajdujcy si w grnej linii, zawierajcy ikony dyskietek i ramk tekstow po prawej stronie lornetki, nosi nazw Standard. Mona go przecign w inne miejsce okna , klikajc go lewym przyciskiem myszy i - nie puszczajc tego przycisku - umieszczajc go w innym dowolnym miejscu. Po odcigniciu od krawdzi pasek zamienia si w oddzielne okno, ktre mona dowolnieprzemieszcza.

Po odcigniciu dokowalnego paska narzdzi wyglda on jak standardowy pasek widoczny na rysunku 1.5. Ma on posta niewielkiego okna opatrzonego odpowiedni etykiet. Pasek w takim stanie nazywa si paskiem pywajcym. Wszystkie paski narzdzi widoczne na rysunku 1.3 mog by dokowane i pywajce. Sprbuj przecign niektre z nich. Kiedy zostan zadokowane, wracaj do swojego dawnego wygldu. Paski mona dokowa przy kadej z czterech krawdzi okna gwnego.

Rysunek 1.5Niektre ikony paska zada Visual C++ 2005 bd wyglday podobnie do tych znanych z innych aplikacji systemu Windows, ale ich przeznaczenie w Visual C++ moe by troch inne. Z tego powodu bd wyjania, do czego one su, gdy nastpi potrzeba ich uycia. Jako e do tworzenia nowego programu za kadym razem trzeba tworzy nowy projekt, dobrym punktem startowym nauki obsugi Visual C++ 2005 bdzie zaznajomienie si z mechanizmem definiowania projektw.

DokumentaciaNadarzy si wiele sytuacji, w ktrych bdziemy mieli potrzeb zasignicia dodatkowych informacji o Visual C++ 2005. Wyczerpujcym rdem wiedzy na ten temat jest dokumenta cja MSDN (ang. Microsoft Development Network Librarys. Zawiera ona opis wszystkich moliwoci programu, a take wiele innych informacji. Podczas instalacji Visual C++ 2005 pojawia si opcja pozwalajca zainstalowa pen dokumentacj MSDN. Jeeli dysponujesz wystarczajc iloci miejsca na dysku, to zachcam Ci do jej zainstalowania.

40

Visual C++ 2005. Od podstawAby uzyska dostp do zasobw MSDN, naley nacisn klawisz F l . Menu Help umoliwia przeszuk iwanie dokumentacji na rne sposoby. Poza rdem wiedzy o moliwociach pro gramu, dokumentacja MSDN stanowi przydatne narzdzie, gdy ma si do czynienia z bdam i w kodzie , o czym przekonamy si w dalszej czci rozdziau .

Projekt' i rozwizaniaProjekt jest zbiorem wszystkich skadnikw skadajcych si na program - moe to by program konsolowy, program oparty na oknach lub jeszcze inny typ programu. Zazwyczaj skada si on z jednego lub wikszej liczby plikw z kodem rdowym oraz prawdopodobnie innych plikw zawierajcych dodatkowe dane . Wszystkie pliki projektu przechowywane s w folderze projektu , a szczegowe informacje o nim przechowywane s w pliku XML o rozszerzeniu . vcproj, ktry rwnie znajduje s i w folderze projektu. Folder projektu zawie ra rwn ie inne foldery, w ktrych zapisywane s pliki powstae w procesach kompilacji i konsolidacji projektu. Czym jest rozwizanie, mwi ju sama jego nazwa. Jest to mechanizm czcy wszystkie pro gramy i inne zasoby skadajce si na rozwizanie jednego problemu zwizanego z przetwa rzaniem danych . Na przykad rozproszony system zgaszania zamwie dla operacji bizneso wych mgby skada si z kilku rnych programw, z ktrych kady mgby by rozwijany jako projekt w obrbie jednego rozwizania. Tak wic rozwizanie stanowi folder, w ktrym przechowywane s wszelkie informacje dotyczce jednego lub wikszej liczby projektw. Co za tym idzie, w folderze tym znajduje si co najmniej jeden podkatalog z projektem. Dane na temat projektw rozwizania przechowywane s w dwch plikach o rozszerzeniach .sln oraz .suo. Nowe rozwizanie tworzone jest automatycznie, gdy tworzy si nowy projekt, chyba e dodamy go do ju istniejcego rozwizania. Kiedy podczas tworzenia projektu zostanie utworzone rozwizanie , to istnieje moliwo p niejszego dodawania do niego nastpnych projektw. Mona dodawa projekty dowolnego rodzaju, ale zazwyczaj dodaje si takie, ktre s w jaki sposb powizane z ju istniejcym lub istniejcymi projektami w rozwizaniu. Z reguy, jeeli nie istniej adne przeciwwska zania, kady projekt powinien by przypisany do jakiego rozwizania. Wszystkie przykady w tej ksice stanowi pojedyncze projekty z wasnymi rozwizaniami .

Definiowanie projektuPierw sz czynnoci, ktr naley wykona , aby rozpocz pisanie programu w Yisual C++ 2005, jest stworzenie nowego projektu, kolejno wybierajc opcje File/New/Project lub naci skajc kombinacj klawiszy Ctrl+Shift+N. Poza plikami zawierajcymi cay kod i wszelkie inne dane, ktre skadaj si na program , w folderze projektu znajduje si plik XML. S w nim zapisywane wszystkie opcje Yisual C++ 2005, ktrych uywalimy. Mimo e nie ma potrzeby wasnorcznego edytowania tego pliku (tym zajmuje si w caoci IDE), to mona go otworzy i sprawdzi, co zawiera. Pamitaj tylko, aby nie zmieni przez przypadek jego zawartoci.

Na tym

skoczymy, jeli

chodzi o teori. Czas

zabra si

do pracy.

Rozdzia1.

Programowanie przy uyciu Visual C++ 2005

41

~ Tworzenie proiektu aplikacji konsolowej dla systemu Win32Utworzymy teraz projekt aplikacj i konsolowej. Najpierw z menu Fil e n aley w ybr a opcje New/Projec t. Pojawi si okno dialogowe tworzenia nowego projektu, podobne do pokazanego na rysunku 1.6.-

..

_-

-

-

-- -

-

-----

-

----

New ProjectProject types :;= Visual C++

[1]rBJ- ---,

Templates :1 - - - -.0. 0.00 0 ..

m(@,

lIisual Studio installed templates00

ATL CLRGeneral

;~ W in32 Console Applicatron~v Temp lat~

1'5IW k132 ProJect

II

t

Mf C Smar t Oevt e Win32 Other Languages O\her ProJ ect Types

. Search Onlne Templ ateso o o

IA prcject for creatrng a Wrn32 consoleapplicationName : LQCation: sa"!lon Name :

L

l ID :\Translations'>ellon\jvO'Cwl _0l

~'

.. -

-

IL~l lBrOWS8 ...

Hortons Visual C++

2005\Przyk ady

I

,

I CW1_Ol

I

~Create di' ectDry for -solutonI

-OK

IRysunek 1.6

II

ca ncel

I

W lewym panelu okna dialogowego New Pr oject pokazane s dostpne typy tworzonych projektw . My wybieramy Win32. W ten sposb informujemy program , ktrego kreatora ma uy do utworzen ia wstpn ych plikw projektu . W prawym panelu widoczna jest lista szablo nw dostpnych dla wybranego typu projektu. Wybrany szablon zostanie wykorzystany przez kreator podczas tworzenia plikw projektu. W nastpnym oknie, ktre poj awia si po klik n iciu przycisku OK, moemy ustawi opcje dla tworzonych plikw. W przypadku wikszo ci typw lub szablonw autom atycznie tworzony jest podstawowy zestaw moduw rdo wych programu . teraz wpisa w polu Name wybran nazw dla naszego projektu, np. Cwl_O Visual l. C++ 2005 pozwal a na stosowanie dugich nazw plikw, a wic mamy tu due pole manewru. Nazwa folderu rozwizania pojawia si w polu tekstowym na dole i domylnie jest taka sama jak nazwa projektu. W razie potrzeb y mona j jednak zmieni . W tym samym okn ie mona take zmieni lok al izacj folderu rozwizani a na dysku za pomoc pola Location. Jeeli wpi szemy tylko nazw projektu, to zostanie on umieszczony w folderze o takiej samej nazwie w lokalizacji pok azanej w polu Location. Domylnie, jeeli fold er rozwizania nie istnieje, zostanie on automatycznie utworzony. Jeli chcemy, aby nasze pliki zostay zap isane w innymMoemy

42

Visual C++ 2005. Od podstawkatalogu , wystarczy zmieni ciek w polu Location, wpisujc j rcznie lub wyszukujc za pomo c opcji Browse. Kliknicie przycisku OK spowoduje ukazanie s i okna dialogowego kreatora aplika cji Win32, ktry zosta zapre zentowan y na rysunku 1.7.

Rysunek 1.7Welcom e to th e Win32 Application Wlzard

Ovet"iew Appkakm

These ere the currentprO )ect settings:5ettirqs

ccesce ~(~ion

ekkFinishfrem any wroow to eccept tbe current se:f'J05 .Afteryou creete the project, see the pe cject 'sreeone. txt f ~ e for inforrM tion ebout the projectfeaturesand flle that.ere enereted. s

",. "

"' I

L I

Next>

II

F" j,h

II

C.ncel

l

Okno to zawi era informacj e o wybr anych opcjach. Kliknicie przycisku Finish spowoduj e utworzenie na podstawie tych informacji wszystkich plikw projektu. W oknie tym moem y take zmieni ustawienia aplikacji , klikajc Application Settings po lewej stronie kreatora, jak pokazano na rysunku 1.8.

Rysunek loBAppllcation Set tings

Overvlew

ApplicatiOn tvce :

Add corrmcn heeder f ~es for:

AppIication SeUjng~ c hci a by

1000000.00) ) od nas

poyczy ? " ;

Pochlebstwa posypi si na nas tylko wtedy, gdy co najmniej jeden z warunkw ma warto tru e (lepsze byoby pytanie : "Czemu pan chce poycza pienidze?" - zadziwiajce jest, e banki chc poycza pienidze tylko tym, ktrzy ju je maj). Dla operatora

II rwnie mona stworzy tabel prawdy:

IIfalse true

falsefa l se t r ue

truet rue t ruerwnie mona w bardzo prosty spo sb okre l i wynik : warto f al se tylko wtedy, gdy oba oper andy maj warto fa l se.

W tym przypadkumoemy otrzyma

Negacja logiczna NOTTrzeci operator logi czny! przyjmuje tylko jeden operand typu logicznego i odwraca jego warto . Tak w i c je eli zmienna test ma warto t rue, to ! test ma warto fa l se. l podobnie, jeeli zmienna t est ma warto fa l se, to ! te st ma warto t rue. Spjrzmy na prosty przykad : jeeli zmienna x ma warto 10, to wyraenie :I

(x > 5)

ma

warto

fa l se, poniewa

wartoci wyraenia

x > 5 jest true. Karola Dickensa:

Operatora ! moemyI

take uy

w ulubionym

wyraeniu

(dochd

>

wydatk i)

Jeeli wyraenie

bank zacznie

zwraca

to ma warto true, to mamie z nami, przynajmniej od momentu, w ktrym nasze czeki.

Rozdzia 3.

Decyzje i ptle

157

Operatora ! moemy take uywa z innymi podstawowymi typami danych . Przypumy , e mamy zm ienn typu zmie nnopozycyjnego o nazwie rate i wartoci 3. 2. Moe zdarzy si sytuacja, w ktrej chcemy sprawdzi, czy warto zmiennej rat e nie jest zerowa. W takim przy padku moemy u y nastpujcej instrukcji:I

(rate )warto logiczn

Warto 3. 2 jest rna od zera, a wic zostanie przekonwertowana na co z kolei spowoduje, e wynik tego wyraenia bdzie fa l se.

t rue,

l!mImI ~czenie operatorw logicznychOperatory i wyraenia logiczne mona dowolnie czy . Na przykad sprawdzanie, czy zmien na zawiera liter, mona wykona za po moc pojedynczej instrukcji warunkowej i f. Przed stawiam to na poniszym listingu :II Cw3_03.cpp II Sprawdzanie za pomo c operatorw logiczny ch, czy zmi enna zaw ieraliter.

#i ncl ude using std: :ci n: usi ng std: :cout: using std: :endl: int m n() ai(

char l et t er = O: cout endl "Wpisz ci n l etter :

II Zmi enna do p rzechowywania II wprowadzonych dany ch.

j a ki

znak :

if( letter >= 'A') && ( let t er = ' a' ) && (letter

b ? a : b:

II Przypisz zmiennej c II ktra jes t wiksza .

warto

zmi ennej a lub b, w zalen oci od tego,

to

Pierwszy operand operatora warunkowego musi by wyraeniem , ktrego wynikiem jest war logiczna - w tym przypadku jest to wyraenie a > b. Jeeli wyraenie to zwrci warto t rue, to jako rezultat tej operacji zwrco ny zosta nie drugi operand, czy li a. J ee li natomiast pierwszy argument zwrci warto f al se, to trzeci operand, tutaj b, zostanie wybrany jako war to caej operacji . A zatem wartoci wyraenia warunkowego a > b?a :b b dz ie a, jee l i a jest wiksze od b, lub b w przeciwnym przypadku. Uyc ie operatora warunkowego w tej in strukcji przypisania jest rwnoznaczne z nastpuj c i n stru kcj i f :if(a> b )

c = a:

else

c

~

b:m o n a przedstaw i

Operator warunkowy

za

po moc nastp uj cego

og lnego wzoru :

warunek ?Jee li

wyraenie]

:

wyraenie2

wynikiem warunku jest t rue, to zwrcona zostanie warto pierwszego wyraenia, w prze ciwnym przypadku zwrcona zostanie warto drugiego wyraen ia .

~ Uywanie operatora warunkowego zdanymi wyjciowymiOperatora warunkowego najczciej uywa s i w celu kontrolowania danych wysyanych na wyjcie - zalenie od wyniku wyraenia lub wartoci zmiennej. Mona spowodowa wysanie rnyc h komunikatw w za le noci od okre lonego warun ku.II Cw3_04.cpp II Operator warunk owy sterujcy danymiwy c iowym i . j

#incl ude usi ng std : :cout:

Rozdzia3.

Decyzje i ptle

159

using st d: :endl: int m ( ) ain { int nCakes

=

l:

II Licznik liczby ciastek.

cout endl "Mam y" nCakes endl : ++nC akes: cout endl "Mamy " endl :

" cias t "

((nCa kes > 1)

"ka." : "ko, ")

nCakes

" ci ast"

(( nCa kes > 1) ? "ka."

"ko. " )

retu rn O:

W wyniku

dziaania

tego programu otrzymamy:

M y 1 cias tk o. am Mam 2 ci ast ka. y

Instrukcja switchInstrukcja sw tc h pozwala na wybr spord wielu opcji na podstawie zbioru okrelonych i wartoci danego wyraenia. Przypomina ona prawdziwy przecznik obrotowy, z tym e mona wybra jedn z kilku dostpnych opcji. W niektrych pralkach na przyklad w taki spo sb wybiera si odpowiedni program prania. Podanych jest kilka moliwych ustawie prze cznika, takich jak bawena, wena, wkna syntetyczne itd., i za pomoc przecznika wybie ramy interesujc nas opcj . W instrukcji sw t ch wybr opcji uzaleniony jest od wartoci okrelonego wyraenia . Poszcze i glne opcje do wyboru definiuje si za pomoc sowa kluczowego case. Okrelona opcja zosta i nie wybrana, jeeli warto wyraenia sw t ch rwna bdzie jej wartoci . Dla kadego mo liwego wyboru jest tylko jedna warto case, ale wszystkie wartoci case musz by rne. Kada opcja definiowana jest oddzielnie za pomoc sowa kluczowego case.Jeeli warto wyraenia

sw t ch nie pasuje do adnej ze zdefiniowan ych opcji, to automatycz i nie wybierana jest opcja domylna (default). Opcj domyln mona w razie potrzeby okre l i samodzielnie, co zrobimy w poniszym przykadowym kodzie. Jeeli jej nie zdefiniujemy, to nie bdzie ona robia nic.

~ Instrukcja switchNaponiszym przykadzie przeledzimy

sposb dziaania instrukcji sw itch.

II Cw3_05.cpp II Uywanie instruk cji switch.

#i ncl ude

160

Visual C++ 2005. Od podstaw

using st d: :ci n: using st d: :cout : using st d: :endl : int m n() ai{

i

nt cho i ce

=

O:

II Zmienna do przechowywa nia

wa rtoci

wybranej opcji.

cout endl "T oj a elektroniczna ks i ka kucharska jest do t woj ej dyspozycj i ." w "D w o yboru ma sz jedno z po n i s zyc h pysznych d a : endl endl "1 G owane jajk a" ot endl "2 Sma o ne j aj ka" endl "3 Jajec znica" endl "4 Jajka na mi kk o " endl end l "Podaj numer wybranego dania: cin cho ice: itchCchoicel sw{

end l

case 1: cout endl break: case 2: cout end l break: case 3: cout end l break: case 4: cout endl break : default: cout endl j ajek ." endl:

}

"Ugot uj ki l ka j aj ek. ""U s ma

endl : end l :

ki l ka jajek."jajec z n i c . "

"Zrb

endl :

mi kko. "

"U uj kilka j ajek na got" Podana

endl :

l iczba jest nieprawi d owa. sprbuj surowych

retur n O :

Jak to dziaaPo zdefiniowaniu opcji w wyraeniu wyjciowym i zapisaniu numeru wybranej opcji w zmien itc nej choice wykonywana jest instrukcja sw h z warunkiem w postaci zmiennej choice umiesz czonej w nawiasach znajdujcych si bezporednio po sow ie kluczowym swit ch. Moliwe opcje wyboru w instrukcji sw h znajduj s i pomidzy nawiasami klamrowymi i kada z nich itc zdefiniowana jest za pomoc sowa kluczowego case, po ktrym nastpuje warto zmiennej cho i ce, odpowiadajca tej opcji . Na kocu znajduje s i redn i k . Jak wida , instrukcje, ktre maj zosta wykonane w przypadku wyboru kadej z opcji, napi sane s po dwukropku na kocu kadej etykiety case, a ich dziaan ie koczone jest i nstrukcj break, ktra przenosi wykonywanie kodu do pierw szej instrukcji po switch. Zastosowanie break nie jest obowizkowe, ale bez niej wykonane zostayby wszystkie pozostae instrukcje, czego zazwyczaj nie chcemy . Aby sp raw dz i , co si stanie, mo n a usun instrukcje brea k z powyszego przykadu .

Rozdzia 3.

Decyzje i ptle

161

zmiennej cho i ce nie odpowiada adnej z warto ci case, to wykon ywana jest instrukcja default. Nie jest ona n iezbdna . Jeeli jej nie ma i warto wyraenia sprawdzaj cego nie pasuje do adnej opcji case, to nastpuje wyjcie z instrukcji sw ch i program jest it kontynuowany od instrukcji, ktra znajduj e s i bezporednio po sw itch.Jeeli warto

~ WsPldzielenie jednego przypadkuz wyrae , ktre okrelamy w celu ident yfik acji opcji , musi b y s ta e, aby w arto w czasie kompilacji, oraz jego wynikiem musi by unikalna warto typu cakowitego . Powodem, dla ktrego dwie stae warto ci case nie mog by takie same, jest fakt, e kompilator nie wiedziaby, na ktr z nich s i zdecydowa . Oczywi cie , rne opcje case nie musz wykonywa unikalnych czynnoci . Kilka opcji case moe dzieli jedn czyn no , jak pokazano poni ej .mo na byo okreli Kade

II Cw3_06.cpp II Uywan ie wielu czyn noci case.

#include using std : .ct n: usi ng std: :cout ; using std : .endl : int m ainO{

char l et t er = O : cout endl "Podaj m a ci n letter;

{

l it e r :

switch(letter*(letter >= 'a ' && l ette r ~

'a' & let t er &

= l && dice = 1 && di ce , poniewa data jest uchwytem i zachowuje si jak wskanik . Wac iwo Length zapisuje liczb wartoc i w postaci 32-bitowej liczby cakowitej . W razie potrzeby rozmiar tablicy moemy rozszerzy do wartoci M-bitowej za pomoc waciwoci LongLength.Mona rwnie przej

przez wszystkie elementy tablicy za pomoc ptli f or each:

arrayA values ~ { 3, 5, 6. 8, 6); for each(lnt item in values ){

i t em ~ 2*item+ l ; Conso le: :Write ("{O .5}",item ; ) Zmienna i t ern znajdujca si wewntrz ptli odnosi si do wszystkich elementw w tablicy val ues. Pierwsza instrukcja w ciele ptli zamienia biec warto elementu na jej podwjn warto plus jeden. Druga instrukcja wysya na wyjcie now warto wyrwnan do prawej w polu o szerokoci piciu znakw, a wic wynik tego fragmentu kodu przedstawia si nastpujco:

7

11

13

17

13

Zmienna tablicowa moe przechowywa adres dowolnej tablicy o takiej samej liczbie wymiarw i takim samym typie danych . Na przykad: dat a=

gcnew array(45) ;

Powysza instrukcja tworzy now j ednowym i arow tablic 45 elementw typu i nt i zapisuje j ej adres do uchwytu dat a. Oryginalna tablica zostaje usunita.

Mona rwnie utworzy tablic, podajc zbir wartoci pocztkowych

elementw:

ples arrayAsam

=

{

3,4, 2,3. 6,8, 1.2. 5,5, 4,9, 7,4, 1,6};

Rozmiar tablicy okrelony jest przez liczb wartoci pocztkowych znajdujcych si w nawiasach (w tym przypadku osiem). Wartoci te zostaj przypisane do elementw w kolejnoci , w jakiej zostay podane .Oczywicie

elementy w tablicy~

mog by

dowolnego typu, a wic z atwoci moemy utwo-

rzy tablic acuchw :

arr ayA names

{ "Jack". "Jane". "Joe". "Jessi ea". "Ji m". "Joanna"};

Rozdzia 4.

Tablice, acuchy znakw i wskaniki

235

Elementy tej tablicy zostay zainicjalizowane za pomoc acuchw podanych w nawiasach . Liczba tych acuch w okrela liczb elementw tablicy. Obiekty typu St r i ng tworzone s na stercie CLR , a wic typ elementu jest typem uchwytu ledzcego - St r i nq". Gdy nie zainicjalizujemy zadeklarowanej zmiennej tablicowej, musimy jawnie, jeli chcemy uywa listy wartoci pocztkowych . Na przykad :t tablic utworzy

arrayAnarnes : II Deklara cj a zmi ennej tablicowej. names = gcnew ar ray-St r tnq'] "Jack". "Jane". "Joe". "Jessiea". "Jim" . "Joanna"};Druga z powyszych instrukcji tworzy tablic i inicjalizuje j acuchami w nawiasach. Bez jawnej definicji z uyciem operatora genew, instrukcji tej nie mona by skompilowa. Za funkcji statycznej C1ear() zdefiniowanej w klasie Ar ray mona ustawi na zero elementw zawierajcych wartoci liczbowe. Funkcje statyczne wywouje si przy uyciu nazwy klasy. Wicej na temat tych funkcji dowiemy si przy okazji szczegowego omawiania klas. Poniej znajduje si przykad uycia funkcji C1ea r ( ) :dowoln sekwencj

pomoc

A rray: ;C (sam lear ples. O. sam ples->L h); engt

II Ustaw wszys tkie elementy na zero.

Pierwszym argumentem funkcji C 1ear( ) jest tablica, ktr chcemy wyczyci, drugi argument to indeks pierwszego elementu, ktry chcemy wyczyci, a trzeci to liczba elementw do wyczyszczenia. A zatem powyszy przykad ustawia wszystkie elementy tablicy sam l es na O. O p . Jeeli funkcj C1ear () zastosujemy z tablic uchwytw ledzcych , jak np. St r tnq", to elementy zostan ustawione na nu 11. Zastosowanie tej funkcji dla tablicy wartoci logicznych spowoduje ustawienie wartoci elementw na fa l se. Czas na wyczyszczenie jakiej tablicy .

R!lml!mI Uywanie tablic ClRPrzykad

ten generuje

tablic zawierajc

losowe

wartoci,

a

nastpnie

odnajduje

najwiksz

z nich:

using namespace System ; i nt m ain(array args)

rarrayAsamplesII Generowanie losowych=

gcnew array(50):dla elementw.

A R andom generat or = gcnew Random ; ples->Lengt h ; i++) for(i nt i = O : i< sam samples[i ] = l O *generat or->N D O.O ext ouble( );wyjcie

wartoci

II WY.lylanie na

prbek.

Console : 'W riteLi ne(L"Tabl ica zawi era n a st puj c e l iczby:"); for( int i = O : i< samp les->Lengt h : i++)

236

Visual C++ 2005. Od podstaw

Conso l e: :WriteC L"{O ,10:F2}", sam ples[l]) : i f (C +l )% ~ ~ O) i 5 Console: :W riteLi neC : )II Szukanie najwiksz ej wartoc i ,

double m ~ O ax : for eachC doub le samp le i n samo les) if Cmax < samp le) max ~ samo le ;Co nso le : :WriteLine( L "Na jw i ksza wa rto

w tabl icy t o (O :F2}", max) :

ret urn O;Przykadowy

wynik

dziaania

tego programu

wida poniej:

Tab l lca zawiera nastpu jce ll czby: 63,03 66,07 83,73 12,11 76,99 89,57 83,78 80,28 25,02 86, 09 56,39 69,56 64,79 90,73 0,84 11 ,58 11,26 55,80 75, 29 75,01 88,99 26,72 57,32 95,52 77,49 43,02 28 ,21 6,97 24,58 72.85 50,23 40,12 15,13 80,63 86.40 79,60 66.04 41.69 59.03 5.86 Najw iks za wa r to w tab licy to 95.52

88,30 66,96 48,04 46,37 50 ,44 63,91 47 ,51 54,45 56,83 9.94

Jak to dziaaNajpierw tworzymytablic~

50 elementw typu doub 1e:gcnew array(50);by

ar rayA samp les

Zmienna tablicowa samp1es musi stercie oczyszczonej .Tablic wypeniamy

uchwytem

ledzcym, gdy

tablice CLR tworzone

s na

losowymi

wartociami

typu doub1e za pomoc nastpujcych instrukcji:

Ra ndamA generator = gcnew Ra ndom: tor t i nt i = O ; i < samp les ->Length , i++) samp l es[i] = 100. 0*generato r- >Next DoubleC : )

Pierwsza instrukcja tworzy na stercie CLR obiekt typu Random. Obiekt R andom zawiera funkcje, ktre generuj liczby pseudolosowe. W tym przypadku uylimy funkcji N Doub 1e( ) ext w ptli, ktra zwraca losow liczb typu doub 1e nalec do zbioru 0,0 - 1,0. Dziki pomnoeniu tego przez 100 otrzymujemy wartoci od 0,0 do 100,0. Ptla fo r zapisuje do kadego elementu tablicy samp 1es losow liczb .

Obiekt Random zawiera rwnie funkcj Next( ), ktra zwraca losow liczb nieujemn typu i nt. Jeeli w wywoaniu funk cji Next ( ) podamy argument w