Reverse
Advanced User
- Joined
- Jul 11, 2010
- Messages
- 191
- Reaction score
- 44
C++ z Reverse - Lekcja pi?ta!
Czas zacz?? lekcje na kt?rych b?dzie coraz mnie obrazk?w a coraz wi?cej tekstu, na poprzednich lekcjach poznali?my podstawy programowania w j?zyku C++.
5.1 Instrukcja goto
W zasadzie omawianie instrukcji steruj?cych mogli?my zako?czy? na poprzedniej lekcji, gdyby nie jeszcze jedna wstydliwa instrukcja goto.
Ma ona form? :
goto etykieta ;
Po napotkaniu takiej instrukcji wykonywanie programu przenosi si? do miejsca gdzie jest dana etykieta. Powiedzmy sobie jasno, u?ywanie instrukcji goto zdradza ?e si? jest z?ym programist?.To dlatego ?e instrukcji goto zawsze da si? unikn??. Program nadu?ywaj?cy tej instrukcji staje si? dla programisty nie czytelny a dla kompilatora stanowi przeszkod? w eleganckim skompilowaniu.
Ponadto z instrukcj? goto wi??e si? zawsze etykieta, do kt?rej nale?y przeskoczy?.
W j?zyku C++ nie mo?na sobie przeskoczy? z dowolnego punktu programu w dowolne miejsce. Etykieta do kt?rej przeskakujemy musi, le?e? w obowi?zuj?cym w danej chwili tzw. zakresie wa?no?ci. ( O zakresie wa?no?ci pogadamy za jakie? 3 - 4 lekcje ).
Przyk?ad u?ycia funkcji goto :
A o to efekt kt?ry zobaczymy w konsoli :
W przysz?o?ci raczej nie b?dziemy pisa? wi?cej o instrukcji goto, uznajmy j? po prostu jako ciekawostk?.
1) typy wbudowane - czyli takie, w kt?re j?zyk C++ jest
wyposa?ony.
2) typy zdefiniowane przez u?ytkownika - czyli typy, kt?re
mo?esz sobie wymy?li? samemu. Ta cecha jest chyba
jednym z najlepszych pomys??w w j?zyku C++.
Zajmiemy si? teraz typami wbudowanymi. Natomiast typom definiowanym przez u?ytkownika przyjrzymy si? bli?ej na nast?pnych lekcjach.
Ma ona form? :
goto etykieta ;
Po napotkaniu takiej instrukcji wykonywanie programu przenosi si? do miejsca gdzie jest dana etykieta. Powiedzmy sobie jasno, u?ywanie instrukcji goto zdradza ?e si? jest z?ym programist?.To dlatego ?e instrukcji goto zawsze da si? unikn??. Program nadu?ywaj?cy tej instrukcji staje si? dla programisty nie czytelny a dla kompilatora stanowi przeszkod? w eleganckim skompilowaniu.
Ponadto z instrukcj? goto wi??e si? zawsze etykieta, do kt?rej nale?y przeskoczy?.
W j?zyku C++ nie mo?na sobie przeskoczy? z dowolnego punktu programu w dowolne miejsce. Etykieta do kt?rej przeskakujemy musi, le?e? w obowi?zuj?cym w danej chwili tzw. zakresie wa?no?ci. ( O zakresie wa?no?ci pogadamy za jakie? 3 - 4 lekcje ).
Przyk?ad u?ycia funkcji goto :
PHP:
cout << "Cos piszemy \n" ;
goto aaa ;
cout << " Tego nie wypiszemy " ;
aaa:
cout << " Piszemy " ;
Code:
Cos piszemy
Piszemy
5.2 Instrukcja continue
Drugi podzia? to podzia? na:Instrukcja continue przydaje si? wewn?trz p?tli for, while, do..while. Powoduje ona zaniechanie realizacji instrukcji b?d?cych tre?ci? p?tli, jednak (w przeciwie?stwie do instrukcji break ) sama p?tla nie zostaej przerwana. Continue przerywa tylko ten obieg p?tli i zaczyna nast?pny, kontynuuj?c prac? p?tli.
Przyk?ad :
W efekcie otrzymamy :
Innymi s?owy napotkanie instrukcji Continue odpowiada jakby takiemu u?yciu instrukcji goto :
czyli skokowi do etykiety stoj?cej przed zamykaj?c? p?tl? klamr?. W rezultacie komputer "pomy?li", ?e ju? wykona? tre?? p?tli, i przyst?pi do wykonania nast?pnego obiegu.
Identycznie zachowa si? wobec p?tli while. Czy te? p?tli do...while.
Przyk?ad :
PHP:
int k;
for(k = 0 ; k < 12 ; k++)
{
cout << "A" ;
if(k > 1) continue ;
cout << "b" << endl ;
}
Code:
Ab
Ab
AAAAAAAAA
Innymi s?owy napotkanie instrukcji Continue odpowiada jakby takiemu u?yciu instrukcji goto :
PHP:
for(...)
{
...
continue ; // goto sam_koniec
....
sam_koniec
}
Identycznie zachowa si? wobec p?tli while. Czy te? p?tli do...while.
6.0 Typy
6.1 Deklaracja typ?w
Ka?da nazwa w C++, zanim zostanie u?yta, musi zosta? zadeklarowana. Deklarujemy mianowicie, ?e opisuje ona obiekt jakiego? typu: ca?kowitego, zmiennoprzecinkowego, itd - (np. int, float ). To informuje kompilator, jak ma w przypadku napotkania tej nazwy post?powa?.
Wyja?nijmy to na przyk?adzie. Za???my, ?e kompilator napotka? w naszym programie wyra?enie :
a + b
Jest to dodawanie zatem trzeba uruchomi? specjalny podprogram zajmuj?cy si? dodawaniem. ( Taki podprogram nazywa si? te? czasem operatorem dodawania).
W zwi?zku z tym, ?e w komputerze liczby ca?kowite przechowywane s? inaczej ni? liczby zmiennoprzecinkowe - zatem operator dodawania musi inaczej post?powa? w stosunku do liczb ca?kowitych, a inaczej w stosunku do liczb zmiennoprzecinkowych.
Napotykaj?c na ?w zapis - kompilator musi wi?c dok?adnie wiedzie? czy symbol a oznacza u nas liczb? ca?kowit? czy liczb? zmiennoprzecinkow?. Sk?d to b?dzie wiedzia?? W?a?nie z deklaracji. Deklaruj?c wcze?niej zmienn? a jak typu integer, czyli pisz?c
int a;
powiedzieli?my kompilatorowi tak :
Jakby? napotka? nazw? a to wiedz, ?e oznacza ona zmienn? typu int.
Tutaj deklaracje jest r?wnocze?nie definicj?. Oznacza to, ?e nie tylko, i? informujemy kompilator o tym, co oznacza nazwa a, lecz tak?e ??damy w tym miejscu by zarezerwowa? w pami?ci obszar na t? zmienn? - czyli powo?a? j? do ?ycia.
Definicja m?wi wi?c kompilatorowi:
A teraz zarezerwuj mi w pami?ci miejsce na obiekt typu ca?kowitego o nazwie a.
Nie zawsze jednak chodzi o powo?anie do ?ycie.
Mo?e by? przecie? sytuacja, gdy zmienna ta ju? gdzie? w programie istnieje, a tu chcemy tylko poinformowa? o jej typie.
extern int a ;
S?owo extern informuje kompilator, obiekt typu int o nazwie a ju? gdzie? istnieje, na przyk?ad na zewn?trz pliku, kt?rym zajmuje si? w?a?nie kompilator. W trakcie kompilacji naszego pliku, kompilator musi jednak wiedzie? jakiego typu jest ta "zewn?trzna" zmienna a.
Oto przyk?ady definicji i deklaracji :
Ka?da nazwa w C++, zanim zostanie u?yta, musi zosta? zadeklarowana. Deklarujemy mianowicie, ?e opisuje ona obiekt jakiego? typu: ca?kowitego, zmiennoprzecinkowego, itd - (np. int, float ). To informuje kompilator, jak ma w przypadku napotkania tej nazwy post?powa?.
Wyja?nijmy to na przyk?adzie. Za???my, ?e kompilator napotka? w naszym programie wyra?enie :
a + b
Jest to dodawanie zatem trzeba uruchomi? specjalny podprogram zajmuj?cy si? dodawaniem. ( Taki podprogram nazywa si? te? czasem operatorem dodawania).
W zwi?zku z tym, ?e w komputerze liczby ca?kowite przechowywane s? inaczej ni? liczby zmiennoprzecinkowe - zatem operator dodawania musi inaczej post?powa? w stosunku do liczb ca?kowitych, a inaczej w stosunku do liczb zmiennoprzecinkowych.
Napotykaj?c na ?w zapis - kompilator musi wi?c dok?adnie wiedzie? czy symbol a oznacza u nas liczb? ca?kowit? czy liczb? zmiennoprzecinkow?. Sk?d to b?dzie wiedzia?? W?a?nie z deklaracji. Deklaruj?c wcze?niej zmienn? a jak typu integer, czyli pisz?c
int a;
powiedzieli?my kompilatorowi tak :
Jakby? napotka? nazw? a to wiedz, ?e oznacza ona zmienn? typu int.
Tutaj deklaracje jest r?wnocze?nie definicj?. Oznacza to, ?e nie tylko, i? informujemy kompilator o tym, co oznacza nazwa a, lecz tak?e ??damy w tym miejscu by zarezerwowa? w pami?ci obszar na t? zmienn? - czyli powo?a? j? do ?ycia.
Definicja m?wi wi?c kompilatorowi:
A teraz zarezerwuj mi w pami?ci miejsce na obiekt typu ca?kowitego o nazwie a.
Nie zawsze jednak chodzi o powo?anie do ?ycie.
Mo?e by? przecie? sytuacja, gdy zmienna ta ju? gdzie? w programie istnieje, a tu chcemy tylko poinformowa? o jej typie.
extern int a ;
S?owo extern informuje kompilator, obiekt typu int o nazwie a ju? gdzie? istnieje, na przyk?ad na zewn?trz pliku, kt?rym zajmuje si? w?a?nie kompilator. W trakcie kompilacji naszego pliku, kompilator musi jednak wiedzie? jakiego typu jest ta "zewn?trzna" zmienna a.
Oto przyk?ady definicji i deklaracji :
PHP:
int liczba ; // definicja + deklaracja
extern int licznik ; // deklaracja ( tylko!)
6.2 Systematyka typ?w z j?zyka C++
typ?w fundamentalnych W deklaracji okre?la si?, ?e dany obiekt jest danego typu. Jakie mamy do dyspozycji typy? Jest ich du?o. Wprowad?my wi?c pewien porz?dek.
Typy z j?zyka C++ mo?na podzieli? na dwie cz??ci:
Pierwszy podzia? to podzia? na:
1) typy fundamentalne
2) typy pochodne, kt?re s? jakby wariacjami na temat
Typy z j?zyka C++ mo?na podzieli? na dwie cz??ci:
Pierwszy podzia? to podzia? na:
1) typy fundamentalne
2) typy pochodne, kt?re s? jakby wariacjami na temat
1) typy wbudowane - czyli takie, w kt?re j?zyk C++ jest
wyposa?ony.
2) typy zdefiniowane przez u?ytkownika - czyli typy, kt?re
mo?esz sobie wymy?li? samemu. Ta cecha jest chyba
jednym z najlepszych pomys??w w j?zyku C++.
Zajmiemy si? teraz typami wbudowanymi. Natomiast typom definiowanym przez u?ytkownika przyjrzymy si? bli?ej na nast?pnych lekcjach.
6.3 Typy Fundamentalne
S? identyczne jak w klasycznym C. Oto ich lista :
oraz tak zwany typ wyliczeniowy enum, o kt?rym porozmawiamy niebawem ; )
Wszystkie powy?sze typy mog? by? w dw?ch wariantach - ze znakiem i bez znaku. Do wybrania wariantu pos?ugujemy si? modyfikatorem signed lub unsigned.
Na przyk?ad :
Wyposa?enie typu znak sprawia, ?e mo?e on reprezentowa? liczb? ujemn? i dodatni?. Typ bez znaku reprezentuje liczb? dodatni?.
oznacza, ?e chodzi nam o typ
czyli typ ze znakiem.
Natomiast w wypadku typu char sprawa nie jest tak prosta. To, czy przez domniemanie b?dziemy mieli signed czy unsigned - zale?y od typu kompilatora czy komputera. M?wimy kr?tko: zale?y to od implementacji.
umo?liwiaj? prac? na liczbach rzeczywistych z r??n? dok?adno?ci?.
Zastanawiasz si? zapewne po co a? s? trzy typy reprezentuj?ce liczby ca?kowite oraz trzy typy reprezentuj?ce liczby zmiennoprzecinkowe.
Chodzi o to, by mo?na by?o lepiej wykorzysta? mo?liwo?ci danego typu komputera. Zale?nie od tego, ile dany komputer przydziela nam kom?rek pami?ci na zapis danej liczby - otrzymujemy mniejsza lub wi?ksz? precyzj? oblicze?.
Za lepsz? dok?adno?? p?aci si? d?u?szym czasem oblicze?, dlatego zapewnienie programi?cie a? 3 typ?w dla liczb ca?kowitych daje mo?liwo?? wyboru pomi?dzy dok?adno?ci? a szybko?ci? oblicze?
- Typy reprezentuj?ce liczby ca?kowite:
PHP:
short int inaczej: short
int
long int inaczej: long
- Typ reprezentuj?cy obiekty zadeklarowane jaki znaki alfanumeryczne :
PHP:
char
Na przyk?ad :
PHP:
signed int
unsigned int
PHP:
inta a ;
PHP:
signed int a ;
Natomiast w wypadku typu char sprawa nie jest tak prosta. To, czy przez domniemanie b?dziemy mieli signed czy unsigned - zale?y od typu kompilatora czy komputera. M?wimy kr?tko: zale?y to od implementacji.
- Typy reprezentuj?ce liczby zmiennoprzecinkowe
PHP:
float
double
longdouble
Zastanawiasz si? zapewne po co a? s? trzy typy reprezentuj?ce liczby ca?kowite oraz trzy typy reprezentuj?ce liczby zmiennoprzecinkowe.
Chodzi o to, by mo?na by?o lepiej wykorzysta? mo?liwo?ci danego typu komputera. Zale?nie od tego, ile dany komputer przydziela nam kom?rek pami?ci na zapis danej liczby - otrzymujemy mniejsza lub wi?ksz? precyzj? oblicze?.
Za lepsz? dok?adno?? p?aci si? d?u?szym czasem oblicze?, dlatego zapewnienie programi?cie a? 3 typ?w dla liczb ca?kowitych daje mo?liwo?? wyboru pomi?dzy dok?adno?ci? a szybko?ci? oblicze?
Koniec lekcji pi?tej!
Co tu du?o m?wi? na koniec, znamy ju? podstawy a nawet troch? wi?cej, przed nami jeszcze szmat drogi, do zobaczenia na nast?pnej lekcji!
Pozdrawiam,
Reverse.
Pozdrawiam,
Reverse.
Pisz?c lekcj? pi?t? bazowa?em na ksi??ce "Symfonia C++"