Wielka Księga C++.doc

(1718 KB) Pobierz

 

LEKCJA 1. Co o C i C++ każdy wiedzieć powinien. 

 

________________________________________________________________

 

W trakcie tej lekcji dowiesz się, dlaczego pora na C++.   

________________________________________________________________

 

 

Język C++ jest uniwersalnym, nowoczesnym językiem programowania. Stosowane przez USA i inne kraje wobec Polski wieloletnie embargo COCOM'u (przeszkody w dostępie do nowoczesnej technologii) sprawiły m. in., że popularność OS2, UNIXa i C/C++  jest w Polsce do dziś nieproporcjonalnie mała, a Basica, Pascala i DOSa nieproporcjonalnie duża. W USA C++ już od kilku lat stanowi podstawowe narzędzie programistów.  

  Już słyszę oburzenie (A co mnie obchodzi historia "komputerologii" i koligacyjki!). Otóż obchodzi, bo wynikają z niej pewne "grzechy pierworodne" języka C/C++, a dla Ciebie, szanowny Czytelniku - pewne wnioski praktyczne. 

 

Grzech Pierwszy:  

* Kompilator języka C/C++ jest standardowym wyposażeniem systemu operacyjnego UNIX.  

 

Skutki praktyczne: 

 

Każdy PC jest w momencie zakupu (co często wchodzi w cenę zakupu komputera) wyposażany w system operacyjny DOS - np. DR DOS, PC DOS, PTS DOS lub MS DOS. Standardowo w zestaw systemu MS DOS wchodzi interpreter języka BASIC (w MS-DOS - QBasic.EXE). Możesz więc być pewien, że jeśli jest DOS, to musi być i BASIC.

Podobnie rzecz ma się z C/C++. Jeśli jest na komputerze system UNIX (za wyjątkiem najuboższych wersji systemu XENIX), masz tam do dyspozycji kompilator C/C++, za to BASICA ani Pascala prawie na pewno tam nie ma. Podobnie coraz popularniejszy OS/2 wyposażony jest w kompilator (całkiem niezły) C++ i dodatkowo jeszcze w

pewne gotowe-firmowe biblioteki. 
 
Grzech drugi:  

* Język C/C++ powstał jeszcze zanim wymyślono PC, DOS, GUI (Graficzny Interfejs Użytkownika), Windows i inne tym podobne. 

 

Dwa najważniejsze skutki praktyczne: 
 
I. W założeniach twórców język C++ miał być szybki (i jest) i zajmować mało miejsca w pamięci (bo ówczesne komputery miały jej bardzo mało!). Zawiera więc różne, niezrozumiałe dla nas z dzisiejszego punktu widzenia skróty. Np. to co w Pascalu czy Basicu wygląda zrozumiale:  

 

i:=i+1;                            (Pascal)  

10 I=I+1     lub inaczej NEXT I    (Basic)  

 

to w języku C++ wygląda dziwacznie:  

 

i++;            albo jeszcze dziwniej         ++i; 

 

Tym niemniej zwróć uwagę, że w Pascalu zajmuje to 7 znaków, w Basicu - 8 znaków (spacja to też znak!), a w C++ tylko 4. 

 

Inny przykład:  

 

X=X+5     (Basic, 5 znaków),  

X:=X+5    (Pascal, 6 znaków),  

X+=5      (C++, tylko 4 znaki). 

 

Z takiej właśnie filozofii wynika i sama nazwa - najkrótsza z możliwych. Jeśli bowiem i++ miało znaczyć mniej więcej tyle samo co NEXT I (następne I) to C++ znaczy mniej więcej tyle samo co "NASTĘPNA WERSJA C". 

 

II. Nie ma nic za darmo. W języku C/C++, podobnie jak w  samochodzie wyścigowym formuły I, za szybkość i skuteczność płaci się komfortem. Konstrukcje stosowane w języku C/C++ są maksymalnie dostosowane do "wygody" komputera. Pozwala to na uzyskiwanie ˙niezwykle szybkich "maszynowo-zorientowanych" kodów wykonywalnych programu, ale od programisty wymaga  przyzwyczajenia się do "komputerowo-zorientowanego sposobu  

myślenia". 

 

Grzech Trzeci (i chyba najcięższy):  

* Jest najlepszy. Ostrożniej - jest najchętniej stosowanym narzędziem profesjonalnych programistów. Ma oczywiście konkurentów. Visual Basic (do małych aplikacji okienkowych), Turbo Pascal (do nauki podstaw - elementów programowania sekwencyjnego, proceduralno-strukturalnego), QuickBasic (programowanie strukturalne w środowisku DOS), Fortran 90, ADA, SmallTalk, itp, itd.  

 

Sam wielki Peter Norton przyznaje, że początkowe wersje swojego słynnego pakietu Norton Utilities pisał w Pascalu, ale dopiero przesiadka na C/C++ pozwoliła mu doprowadzić NU do dzisiejszej doskonałości. Jakie są programy Petera Nortona - każdy widzi... 

 

Zapewne masz na swoim komputerze kilka różnych aplikacji (np. TAG, QR-Tekst, Word, itp.) - jeśli zajrzysz do nich do środka  (View), możesz sam przekonać się, że większość z nich została napisana właśnie w C++ (Kompilatory C++ pozostawiają w kodzie wynikowym .EXE swoją wizytówkę zwykle czytelną przy pomocy przeglądarki; przekonasz się o tym także zaglądając przez [View] do własnych programów); stosowane narzędzia możesz rozpoznać także po obecności dynamicznych bibliotek - np. BWCC.DLL - biblioteka elementów sterujących - klawiszy, itp - Borland  

Custom Controls for Windows). 

 

Skutki praktyczne:  

 

Nauczywszy się języka C/C++ możesz nie bać się ani systemu UNIX/XENIX a ich środowiska okienkowego - X Windows, ani OS2, ani Windows 95 (dotychczasowe testy starych 16-bitowych aplikacji wykazały b. wysoki stopień kompatibilności), ani stacji roboczych, ani dużych komputerów klasy mainframe. Język C/C++ dosłużył się bowiem ogromnej ilości tzw. implementacji czyli swoich odmian, przeznaczonych dla różnych komputerów i dla różnych systemów operacyjnych. Windows NT i Windows 95 również zostały napisane w C++. Czytając prasę (np. Computer World, PC-Kurier i in.) zwróć uwagę, że najwięcej ofert pracy jest właśnie dla programistów posługujących się C++ (i tak zapewne będzie jeszcze przez kilka lat, póki nie wymyślą czegoś lepszego - np. jakiegoś C+++). Z Grzechu Trzeciego (choć nie tylko) wynika także pośrednio  Grzech Czwarty.  

 

Języka C++ Grzech Czwarty - ANSI C, C++, czy Turbo C++, Visual C++, czyli mała wieża BABEL.  

 

Nie jestem pewien, czy "wieża BABEL" jest określeniem trafniejszym niż "kamień filozoficzny", bądź "perpetuum mobile". To co w ciągu ostatnich lat stało się z językiem C++ ma coś wspólnego z każdym z tych utopijnych symboli. A w dużym uproszczeniu było to tak. Podobnie, jak mechanikom od zarania dziejów marzyło się perpetuum mobile, tak informatykom zawsze marzyło się stworzenie jednego SUPER-UNIWERSALNEGO języka programowania. Takiego, który byłby zupełnie niezależny od sprzętu tzn., aby program napisany w takim języku mógł być przeniesiony BEZ ŻADNYCH ZMIAN na dowolny komputer I DZIAŁAŁ. Do takiej roli pretendowały kolejno FORTRAN, Algol a potem przyszła pora na C/C++. Gdyby informatycy nie okazali się zbyt zachłanni, może coś by z tego wyszło. Ale,

jak to w życiu, programiści (podobnie jak żona rybaka z bajki "O rybaku i złotej rybce") chcieli wszystkiego naraz:

 

* żeby program dał się przenieść na komputer innego typu i działał,  

* żeby działał szybko i optymalnie wykorzystywał sprzęt,  

* żeby umiał wszystko, co w informatyce tylko wymyślono (tj. i grafika, i obiekty, i obsługa peryferii i...).  

 

I stało się. W pomyślanym jako uniwersalny języku zaczęły powstawać odmiany, dialekty, mutacje, wersje itp. itd.  

 

Jeśli C++ nie jest Twoim pierwszym językiem, z pewnością zauważyłeś Czytelniku, że pomiędzy GW Basic a Quick Basic są pewne drobne różnice. Podobnie Turbo Pascal 7.0 trochę różni się od Turbo Pascala 5.0. Mimo to przykład poniżej pewnie Cię trochę zaskoczy. Dla zilustrowania skali problemu przedstawiam poniżej dwie wersje TEGO SAMEGO PROGRAMU napisanego w dwu różnych wersjach TEGO SAMEGO JĘZYKA C++. . Obydwa programy robią  dokładnie to samo. Mają za zadanie wypisać na ekranie napis "Hello World" (czyli "Cześć świecie!").  

 

Program (1) 

 

main() 

  printf("Hello World\n");  

}  

 

 

Program (2)  

 

#include <windows.h>  

#include <iostream.h>  

 

LPSTR p = "Hello World\n"; 

 

main(void)  

{  

  cout << "Hello World" << endl; 

  MessageBox(0, p, "Aplikacja dla Windows", MB_OK);  

  return (0);  

 

Cóż za uderzające podobieństwo, prawda? Ale żarty na bok. Jeśli zaistnieje jakiś problem, zawsze mamy co najmniej trzy wyjścia.

Możemy:  

 

1. Udawać, że go nie ma. Tak postępuje wielu autorów podręczników na temat C/C++.  

2. Krzyczeć, że nam się to nie podoba. Mamy pełne prawo obrazić się i wrócić do Basica lub Pascala.  

3. Spróbować poruszać się w tym gąszczu.  

 

Wyjście trzecie ma jedną wadę - jest najtrudniejsze, ale i efekty takiego wyboru są najbardziej obiecujące. 

 

Jeśli chcesz zaryzykować i wybrać wyjście trzecie, spróbujmy zrobić pierwszy krok w tej "dżungli". Wyjaśnijmy kilka nazw, pojęć i zasad gry obowiązujących w tym obszarze.  

 

Języki programowania posługują się pewnymi specyficznymi grupami słów i symboli. Są to m. in.:  

 

* słowa kluczowe  (tu pomiędzy wersjami C++ rozbieżności są niewielkie),  

* operatory (po prostu znaki operacji - np. +),  (tu zgodność jest niemal 100 %-owa) 

* dyrektywy  (polecenia dla kompilatora JAK tworzyć program wynikowy;  tu już jest gorzej, szczególnie dyrektywa 

   #pragma w każdej  wersji kompilatora C++ jest inna)  
* nazwy funkcji (z tym gorzej, bo każdy producent ma własne funkcje i własne upodobania)  
* nazwy stałych (gdyby chodziło tylko o PI i e - wszystko byłoby proste)  
* nazy zasobów (FILE, PRN, CONSOLE, SCREEN itp. itd) (tu jest lepiej, ale też rozbieżności są zauważalne) 

 

Autor programu może jeszcze nadawać zmiennym (liczbom, zmiennym napisom, obiektom, itp.) własne nazwy, więc czasem nawet wytrawny programista ma kłopoty ze zrozumieniem tekstu żródłowego programu... 

 

W języku C a następnie C++ przyjęto pewne maniery nadawania nazw

 

 

- identyfikatorów ułatwiające rozpoznawanie tych grup słów:  

* nazwa() - funkcja  

* słowa kluczowe i nazwy zmiennych - małymi literami  

* STAŁE - nazwy stałych najczęściej dużymi literami  

* long/LONG - typy danych podstawowe/predefiniowane dla Windows 

_NAZWA - nazwy stałych predefiniowanych przez producenta  

__nazwa lub __nazwa__ - identyfikatory charakterystyczne dla  

danej wersji kompilatora  

itp., których to zwyczajów i ja postaram się przestrzegać w  

tekście książki. 

 

Amerykański Instytut Standardów ANSI od lat prowadzi walkę z wiatrakami. Stoi na straży jednolitego standardu języka, który nazywa się standardem ANSI C i ANSI C++. Wielcy producenci od czasu do czasu organizują konferencje i spotkania gdzieś w ciepłych krajach i uzgadniają niektóre standardy - czyli wspólne dla nich i zalecane dla innych normy, ale niektórzy bywają zazdrośni o własne tajemnice i nie publikują wszystkich informacji o swoich produktach. Dlatego wszelkie "słuszne i uniwersalne" standardy typu ODBC, Latin 2, Mazovia, LIM, OLE, DDE, BGI, itp., itd. mają niestety do dziś ograniczony zakres stosowalności a wszelkie zapewnienia producentów o całkowitej zgodności ich produktu z... (tu wpisać odpowiednie) należy niestety nadal traktować z pewną rezerwą. 
 
W niniejszej książce zajmiemy się kompilatorem Borland C++ w jego wersjach 3.0 do 4.5, jest to bowiem najpopularniejszy w Polsce kompilator języka C/C++ przeznaczony dla komputerów IBM PC. Nie bez znaczenia dla tej decyzji był także fakt, że Borland C++ i Turbo C++ bez konfliktów współpracuje z:   
* Turbo Pascal i Borland Pascal;  
* Assemblerami: TASM, BASM i MASM;  
* Turbo Debuggerem i Turbo Profilerem;  
* bibliotekami Turbo Vision, ObjectVision, Object Windows Library, Database Tools, itp.  

* pakietami innych producentów - np. Win/Sys Library, Object Professional, CA-Visual Objects, Clipper, itp.  

 

i in. produktami "ze stajni" Borlanda popularnymi wśród programistów. Programy TASM/BASM, Debugger, Profiler a także niektóre biblioteki (np. Object Windows Library, Turbo Vision Library, itp. wchodzą w skład pakietów instalacyjnych BORLANDA, ale UWAGA - niestety nie wszystkich). Borland C++ 4+ pozwala, dzięki obecności specjalnych klas VBX w bibliotece klas i obiektów Object Windows Library na wykorzystanie programów i zasobów tworzonych w środowisku Visual Basic'a. Podobnie kompilatory C++ firmy Microsoft (szczególnie Visual C++)  
bezkonfliktowo współpracują z zasobami innych aplikacji - np. Access, Excel, itp.. 
 
Warto tu zwrócić uwagę na jeszcze jeden czynnik, który może stać się Twoim, Czytelniku atutem. Jeśli znasz już kompilatory Turbo Pascal, bądź Borland Pascal, zwróć uwagę, że wiele funkcji zaimplementowanych w Turbo Pascal 6.0. czy 7.0 ma swoje odpowiedniki w BORLAND C++ i Turbo C++. Odpowiedniki te zwykle działają dokładnie tak samo, a różnią się najczęściej  nieznacznie pisownią nazwy funkcji. Wynika to z błogosławieństwa "lenistwa" (ponoć homo sapiens najwięcej wynalazków popełniał właśnie ze strachu, bądź z lenistwa...). Firmie Borland "nie chciało się" wymyślać od nowa tego, co już sprawdziło się wcześniej i do czego przyzwyczaili się klienci! I odwrotnie. Poznawszy Borland/Turbo C++ z łatwością zauważysz te same funkcje w Borland/Turbo Pascalu. 
 
[!!!]UWAGA!  
________________________________________________________________

O Kompilatorach BORLAND C++ 4 i 4.5 napiszę nieco póżniej, ponieważ są bardziej skomplikowane i wymagają trochę większej znajomości zasad tworzenia i uruchamiania programów (projekty).

To prawda, że zawierają narzędzia klasy CASE do automatycznego generowania aplikacji i jeszcze kilka innych ułatwień, ale miej trochę cierpliwości... 

________________________________________________________________

[???] C.A.S.E.  
________________________________________________________________

 

CASE - Computer Aided Software Engineering - inżynieria programowa wspomagana komputerowo. Najnowsze kompilatory C++ wyposażone są w narzędzia nowej generacji. W różnych wersjach nazywają się one AppExpert, ClassExpert, AppWizard, VBX Generator, itp. itd, które pozwalają w dużym stopniu zautomatyzować proces tworzenia aplikacji. Nie można jednak zaczynać kursu pilotażu od programowania autopilota - a kursu programowania od automatycznych generatorów aplikacji dla   Windows...  
________________________________________________________________

 
Zaczynamy zatem od rzeczy najprostszych, mając jedynie tę krzepiącą świadomość, że gdy już przystąpimy do pisania  

aplikacji konkurencyjnej wobec Worda, QR-Tekst'a, czy Power Point'a - może nas wspomagać system wspomaganina CASE dołączony do najnowszych wersji BORLAND C++ 4 i 4.5. Jeśli mamy już gotowe aplikacje w Visual Basic'u - Borland C++ 4+ pozwoli nam skorzystać z elementów tych programów (ale pracować te aplikacje po przetransponowaniu do C++ będą od kilku do kilkuset razy szybciej). 
_______________________________________________________________

 

 

 

 

 

 

 

 

 

 

 

 

LEKCJA 2. Jak korzystać z kompilatora BORLAND C++?

________________________________________________________________

W trakcie tej lekcji poznasz sposoby rozwiązania typowych problemów występujących przy uruchomieniu kompilatora Borland C++. 

________________________________________________________________

 

UWAGA:

Z A N I M rozpoczniesz pracę z dyskietką dołączoną do niniejszej książki radzimy Ci SPORZĄDZIĆ ZAPASOWĄ KOPIĘ DYSKIETKI przy pomocy rozkazu DISKCOPY, np.

 

DISKCOPY A: A:    lub    DISKCOPY B: B: 

 

Unikniesz dzięki temu być może wielu kłopotów, których może Ci narobić np. przypadkowy wirus lub kropelka kawy. 

 

INSTALACJA DYSKIETKI. 

 

Na dyskietce dołączonej do niniejszej książki, którą najlepiej zainstalować na dysku stałym (z dyskiem pracuje się znacznie szybciej, a prócz tego jest tam znacznie więcej miejsca), w jej katalogu głównym znajduje się programik instalacyjny o nazwie: 

 

INSTALUJ.BAT 

 

napisany jako krótki plik wsadowy w języku BPL (Batch Programming Language - język programowania wsadowego). Aby zainstalować programy z dyskietki na własnym dysku powinieneś: 

 

·          sprawdzić, czy na dysku (C:, D:, H: lub innym) jest co najmniej 2 MB wolnego miejsca, 

·          włożyć dyskietkę do napędu i wydać rozkaz: 

·          po naciśnięciu [Entera] rozpocznie się nstalacja. O zakończeniu instalacji zostaniesz poinformowany napisem na ekranie. 

 

UWAGI:

* Jeśli korzystasz z napędu dyskietek B:, lub chcesz zainstalować programy z dyskietki na innym dysku niż C: - wystarczy napisać rozkaz - np. B:\INSTALUJ AMC48 D: i nacisnąć [Enter]. 

* Program instalacyjny zadziała poprawnie tylko wtedy, gdy masz system operacyjny DOS 6+ (6.0 lub nowszy) na dysku C: w katalogu

 

C:\DOS.

* Możesz zainstalować programy z dyskietki z poziomu środowiska Windows. W oknie Menedżera Programów: 

- rozwiń menu Plik 

- wybierz rozkaz Uruchom... 

- do okienka wpisz <-- patrz tekst książki

 

Program instalacyjny utworzy na wskazanym dysku katalog \C-BELFER i tam skopiuje całą zawartość dyskietki oraz dokona dekompresji (rozpakowania) plików. Jeśli chcesz skopiwać zawartość dyskietki do własnego katalogu roboczego, wystarczy "wskazać" programowi instalacyjnemu właściwy adres: 

 

Zostanie utworzony katalog: F:\USERS\ADAM\TEKSTY\C-BELFER

 

UWAGA: 

Prócz przykładów opisanych w książce dyskietka zawiera dodatkowo kilka przykładowych aplikacji, na które zabrakło miejsca, między

innymi:

 

WYBORY95 - prosta gra zręcznościowa (dla Windows)

FOR*.CPP - przykłady zastosowania pętli 

BGI*.CPP - przykłady grafiki DOS/BGI 

oraz programik ułatwiający kurs - MEDYT.EXE wyposażony w dodatkowe pliki tekstowe. 

 

I. URUCHOMIENIE KOMPILATORA. 

 

Aby uruchomić kompilator, powinieneś w linii rozkazu po DOS'owskim znaku zachęty (zwykle C> lub C:\>) wydać polecenie: 

 

BC 

 

i nacisnąć [Enter].  (UWAGA: w różnych wersjach kompilatorów może to być np.: 

BC, TC, a dla Windows np. BCW - sprawdź swoją wersję) 

 

Jeśli Twój komputer odpowiedział na to: 

 

Bad command or file name 

 

* na Twoim komputerze nie ma kompilatora BORLAND C++: ROZWIĄZANIE: Zainstaluj C++. 

 

* w pliku AUTOEXEC.BAT nie ma ścieżki dostępu do katalogu, w którym zainstalowany jest kompilator C++. 

 

ROZWIĄZANIE: 

 

1. Zmienić bieżący katalog (i ewentualnie dysk) na odpowiedni, 

np.: 

D:[Enter] 

CD D:\BORLANDC\BIN[Enter].       //UWAGA: Podkatalog \BIN 

Albo 

 

2. Ustawić ścieżkę dostępu przy pomocy rozkazu np: 

PATH C:\BORLANDC\BIN 

(lub D:\TURBOC\BIN stosownie do rozmieszczenia plików na Twoim 

komputerze; najlepiej zasięgnij rady lokalnego eksperta).

 

[???] NIE CHCE USTAWIĆ ŚCIEŻKI ? 

________________________________________________________________

Tak czasem się zdarza - zwykle wtedy, gdy pracujesz w DOS-ie z programem Norton Commander. Musisz pozbyć się "na chwilę" programu NC. Naciśnij [F10] - Quit i potwierdź przez [Y] lub [Enter]. Po ustawieniu ścieżek możesz powtórnie uruchomić NC. 

________________________________________________________________

 

Albo

 

3. Dodać do pliku AUTOEXEC.BAT dodatkową ścieżkę. Jest to wyjście najlepsze. Na końcu linii ustawiającej ścieżki - np.: 

 

PATH C:\; C:\DOS; C:\NC; C:\WINDOWS

 

dodaj ścieżkę do kompilatora C++, np.

 

PATH C:\; C:\DOS; C:\NC; D:\BORLANDC\BIN;

 

Załatwi to problem "raz na zawsze". Po uruchomieniu komputera ścieżka będzie odtąd zawsze ustawiana automatycznie. Ponieważ kompilator C++ wymaga w trakcie pracy otwierania i łączenia wielu plików, różne wersje (program instalacyjny 

INSTALL.EXE podaje tę informację w okienku pod koniec 

instalacji) wymagają dodania do pliku konfiguracyjnego 

CONFIG.SYS wiersza: 

 

FILES = 20 

 

(dla różnych wersji wartość ta wacha się w granicach od 20 do 50). Najbezpieczniej, jeśli nie masz pewności dodać 50. Jeśli wybrałeś wariant trzeci i ewentualnie zmodyfikowałeś swój CONFIG.SYS, wykonaj przeładowanie systemu [Ctrl]-[Alt]-[Del]. 

Teraz możesz wydać rozkaz 

 

BC[Enter]

 

Mam nadzieję, że tym razem się udało i oto jesteśmy w IDE Borland C++. Jeśli nie jesteś jedynym użytkownikiem, na ekranie rozwinie się cała kaskada okienek roboczych. Skonsultuj z właścicielem, które z nich można pozamykać a które pliki można skasować lub przenieść. Pamiętaj "primo non nocere" - przede wszystkim nie szkodzić!

 

[S!]  IDE = Integrated Development Environment, 

 

IDE, czyli Zintegrowane Środowisko Uruchomieniowe. Bardziej prozaicznie - połączony EDYTOR i KOMPILATOR. Zapewne znasz już coś podobnego z Pascala lub Quick Basica. Od dziś będzie to Twoje środowisko pracy, w którym będziesz pisać, uruchamiać i modyfikować swoje programy. 

 

[???]  DISK FULL! 

________________________________________________________________

Co robić, jeśli przy próbie uruchomienia kompilator C++ odpowiedział Ci:  ...

Zgłoś jeśli naruszono regulamin