Reverse
Advanced User
- Joined
- Jul 11, 2010
- Messages
- 191
- Reaction score
- 46
C++ z Reverse - Lekcja sz?sta!
Na dzisiejszej lekcji zajmiemy si? sta?ymi no wi?c do dzie?a.
6.3 Definiowanie obiekt?w "w biegu"
6.4 Sta?e dos?owne.
W naszych dotychczasowych programach ju? kilkakrotnie spotkali?my si? z definicjami zmiennych. W niekt?rych j?zykach programowania definicje powinny si? pojawi? przed wykonaniem instrukcji. Tak te? jest w klasycznym C.
W C++ zasada ta nie obowi?zuje. Obiekt mo?na zdefiniowa? "w biegu", " w locie " mi?dzy dwoma instrukcjami - wtedy, gdy uznamy, ?e jest on nam w?a?nie potrzebny.
Oto przyk?ad
W tym przyk?adzie widzimy, ?e przed instrukcjami wykonywanymi w funkcji main jest definicja obiektu typu float [1]. Jest to definicja w starym, klasycznym stylu.
Tymczasem w trakcie pisania programu dochodzimy do wniosku, ?e potrzebujemy jeszcze jednego obiektu float - na wsp??czynnik za?amania. Mo?emy wr?ci? do [1] i tam dopisa? nast?pn? definicj?, ale mo?emy te? zrobi? to tu, gdzie sobie o zmiennej przypomnieli?my [2], lub gdzie wynik?a konieczno?? jej istnienia. Robimy wi?c definicj? w biegu, nie przerywaj?c normalnego pisania programu. Ten spos?b jest nawet logiczniejszy.
Co prawda, w naszym przyk?adzie warto?? wczytywali?my z klawiatury, jednak w innych wypadkach - cz?sto w linijce, w kt?rej wynik?a konieczno?? istnienia obiektu, ju? dok?adnie wiemy, jak? warto?? powinien on od razu zawiera?. Mo?emy wi?c nie tylko zdefiniowa? obiekt, ale od razu nada? mu warto??. Takie post?powanie daje w efekcie szybszy program.
W C++ zasada ta nie obowi?zuje. Obiekt mo?na zdefiniowa? "w biegu", " w locie " mi?dzy dwoma instrukcjami - wtedy, gdy uznamy, ?e jest on nam w?a?nie potrzebny.
Oto przyk?ad
PHP:
#include <cstdlib>
#include <iostream>
using namespace std;
int main(int argc, char *argv[])
{
float dlugosc_fali ; // 1
//..
cout << "Podaj wspolczynnik zalamania: " ;
float wspolczynnik ; // 2
cin >> wspolczynnik ;
cout << " Zrozumialem, wspolcznnik ma byc: "
<< wspolczynnik << "\n";
//... dalsze obliczenia
system("PAUSE");
return EXIT_SUCCESS;
}
Tymczasem w trakcie pisania programu dochodzimy do wniosku, ?e potrzebujemy jeszcze jednego obiektu float - na wsp??czynnik za?amania. Mo?emy wr?ci? do [1] i tam dopisa? nast?pn? definicj?, ale mo?emy te? zrobi? to tu, gdzie sobie o zmiennej przypomnieli?my [2], lub gdzie wynik?a konieczno?? jej istnienia. Robimy wi?c definicj? w biegu, nie przerywaj?c normalnego pisania programu. Ten spos?b jest nawet logiczniejszy.
Co prawda, w naszym przyk?adzie warto?? wczytywali?my z klawiatury, jednak w innych wypadkach - cz?sto w linijce, w kt?rej wynik?a konieczno?? istnienia obiektu, ju? dok?adnie wiemy, jak? warto?? powinien on od razu zawiera?. Mo?emy wi?c nie tylko zdefiniowa? obiekt, ale od razu nada? mu warto??. Takie post?powanie daje w efekcie szybszy program.
6.4 Sta?e dos?owne.
W programach cz?sto pos?ugujemy si? sta?ymi. Mog? by? to liczby , mog? by? znaki (litery) albo ci?gi znak?w ( z ang. stringi). Sta?ych tych u?ywamy na przyk?ad, by wstawi? je do jakich? zmiennych.
lub wtedy, gdy wyst?puj? one w wyra?eniach arytmetycznych
albo wtedy, gdy chcemy co? z nimi por?wna?
Zwracam uwag?, ?e w tym miejscu chodzi nam o sta?e dos?owne czyli o sam zapis liczby, a nie jaki? obiekt, kt?ry ma akurat tak? warto??. Zapoznamy si? tu ze sposobami zapisywania takich sta?ych.
Code:
x = 10.52 ;
PHP:
i = i + 5 ; // powiekszenie obiektu o sta?a 5
PHP:
if(m>12)
6.5 Sta?e b?d?ce liczbami ca?kowitymi.
Sta?e taki zapisujemy tak, jak do tego przywykli?my w szkole. Czyli :
Je?li natomiast zapis sta?ej zaczniemy od cyfry 0 (zero), to kompilator zrozumie, ?e zastosowali?my zapis liczby w systemie ?semkowym.
Je?eli sta?a zaczyna si? od 0x to kompilator uzna, ?e w stosunku do sta?ej zastosowali?my zapis szesnastkowy. Czyli :
Przypomn? ?e w zapisie znaki a,b,c,d,e,f oznaczaj? odpowiednio : 10, 11, 12, 13, 14, 15 w zapisie dziesi?tkowym. W zapisie mo?na pos?ugiwa? si? zar?wno wielkimi literami X, A, B, C, D, E, F, jak i ma?ymi.
Sta?e ca?kowite traktuje si? tak, jak typ int, chyba ?e reprezentuj? tak wielkie liczby, kt?re nie zmie?ci?yby si? w int. W?wczas sta?a taka jest typu long.
Mo?na ?wiadomie zmieni? typ nawet niewielkiej sta?ej - z typu int na typ long. Robi si? to przez dopisanie na ko?cu liczby: litery L.
Mimo ?e liczby te wystarczaj?co dobrze mieszcz? si? w typie int - dopisana na ko?cu litera L sprawia, ?e s? typu long. Osobi?cie zawsze u?ywam tu wielkie litery L, gdy? ma?a za bardzo przypomina jedynk?.
Je?li chcemy by dana sta?a mia?a typ unsigned, to sprawi to dopisanie na ko?cu litery u.
Przypisek u mo?e wyst?pi? razem z przypiskiem L.
w?wczas oznacza to ?e dana sta?a jest typu unsigned long.
Oto przyk?ad zapisu w programie :
A efekcie otrzymamy :
Zauwa? ?e zastosowani kt?rego? z zapis?w jest tylko jednym ze sposob?w powiedzenia o jak? liczb? nam chodzi. Komputer i tak przet?umaczy to sobie na sw?j w?asny spos?b (binarny).
Code:
17 -33 0 1000 itd.
Code:
010 - czyli dziesi?tkowo 8
014 - czyli dziesi?tkowo 8+4 = 12
091 - b??d, w zapisie ?semkowym cyfra 9 nie wyst?puje.
Code:
0x10 - czyli dziesi?tkowo 1*16 + 0 = 16
0xa1 - czyli dziesi?tkowo 10*16 + 1 = 161
0xff - czyli dziesi?tkowo 15*16 + 15 = 255
Sta?e ca?kowite traktuje si? tak, jak typ int, chyba ?e reprezentuj? tak wielkie liczby, kt?re nie zmie?ci?yby si? w int. W?wczas sta?a taka jest typu long.
Mo?na ?wiadomie zmieni? typ nawet niewielkiej sta?ej - z typu int na typ long. Robi si? to przez dopisanie na ko?cu liczby: litery L.
Code:
0L 200L
Je?li chcemy by dana sta?a mia?a typ unsigned, to sprawi to dopisanie na ko?cu litery u.
Code:
277u
Code:
50 uL
Oto przyk?ad zapisu w programie :
PHP:
#include <cstdlib>
#include <iostream>
using namespace std;
int main(int argc, char *argv[])
{
int i ;
int k, n, m, j ;
i = 5 ;
k = i + 010 ;
cout << " k= " << k << endl ;
m = 100;
n = 0x100 ;
j = 0100 ;
cout << "m+n+j= " << (m+n+j) << endl ;
cout << " Wypisujemy : " << 0x22 << " "
<< 022 << " " << 22 << endl ;
system("PAUSE");
return EXIT_SUCCESS;
}
Code:
k= 13
m+n+j= 420
Wypisujemy : 34 18 22
Zauwa? ?e zastosowani kt?rego? z zapis?w jest tylko jednym ze sposob?w powiedzenia o jak? liczb? nam chodzi. Komputer i tak przet?umaczy to sobie na sw?j w?asny spos?b (binarny).
Koniec lekcji sz?stej!
Na nast?pnej lekcji zajmiemy si? : sta?ymi reprezentuj?cymi liczby zmiennoprzecinkowe, sta?ymi znakowymi i sta?ymi tekstowymi.
Pozdrawiam,
Rev.
Pozdrawiam,
Rev.