Professional Documents
Culture Documents
Danh mc: Cc ph n ca mt chng trnh C++. Gii thiu hm Cout. Trnh b y ch thch. nh ngha h m. Hng s v b in s. Cc k iu b in s. Typedef. K t d c bit. Hng s . Hng s lit k . Biu thc v cu lnh . Cu lnh . Biu th c. Cc ton t. Ton t tng v g im. Cu lnh if. Ton t l gc. Ton t ph thuc. Cc loi hm. Kh ai b o hm Nguy n mu h m. Bin khu vc (b in a phng ). Bin ton c c. Gi tr tr v. Tham s mc nh. Cc h m xp chng. Cc h m InLin e.
Trang 1
Cc lp c bn
To ra mt kiu mi. Khai bo lp( class ). nh ngha i tng (objects). Private v public. Class. Cc hm trong lp. Cch t khai bo lp v hm.
FOR.
Vng lp lng. Switch.
Con tr.
Con tr, a ch, bin. Khai bo con tr.
Reference
C php:
Trang 2
I.1
Dng 1 l th vin # iostream.h. K t u tin l biu tng # : l mt tn hiu cho b tin x l. Mi ln bt u bin dch, b tin x l c chy. B tin x l c m ngun ca bn, tm kim nhng dng bt u vi du ( #) v thc hin cc dng ny trc khi bin dch. Include l mt lnh tin x l. Du ngoc n <file name > ch cho b tin x l tm trong tt c cc v tr thng thng i vi file ny. Nu b bin dch c thit lp ng, du ngoc < > s lm cho b tin x l tm kim file " iostream.h" trong th mc m cha tt c cc file H cho b bin dch.
Trang 3
I.2
1: 2: 3: 4: 5: 6: 7: 8:
#include <iostream.h> int main() { cout << "Hello there.\n"; cout << "Here is 5: " << 5 << "\n"; cout << "The manipulator endl writes a new line to the screen." << endl;
cout << "Here is a very big number:\t" << 70000 << endl; cout << "Here is the sum of 8 and 5:\t" << 8+5 << endl; cout << "Here's a fraction:\t\t" << (float) 5/8 << endl; cout << "And a very very big number:\t" << (double) 7000 * 7000 << endl;
Trang 4
Hello there. Here is 5: 5 The manipulator endl writes a new line to the screen. Here is a very big number: Here is the sum of 8 and 5: Here's a fraction: 70000 13
0.625 4.9e+07
Don't forget to replace Jesse Liberty with your name... Jesse Liberty is a C++ programmer! Ch : 3 gi tr c a ra trn dng 7, mi gi tr c tch ra bi ton t chn. Gi tr u tin l chui " Here is 5: ". Ch c du cch sau du hai chm. Du cch l mt phn ca chui. Tip n, gi tr 5 c a ra n ton t chn v k t dng mi ( lun lun trong du ngoc kp hay du ngoc n). iu ny to ra dng: Here is 5: 5 c in ra mn hnh. V khng c k t dng mi nn gi tr sau s c in ngay sau . y gi l mc ni 2 gi tr. Trn dng 8, bn tin c in ra, v sau lnh " endl" c s dng. Mc ch ca "endl " l vit mt dng mi ra mn hnh. Trn dng 9, ( \t) c a vo. y l chn mt k t "tab" v n c dng trn dng 812. Dng 9 ch ra rng khng ch c cc s nguyn, s nguyn di cng c in ra. Dng 10 gii thch rng: cout s thc hin phn b sung n gin. Gi tr ca 8+5 c a ra bi cout, nhng 13 c in ra. Trn dng 11, gi tr 5/8 c chn vo cout. S hng (float) ch ra cho cout rng bn mun gi tr ny c gi tr tng h s 10, v v vy mt phn s c in. Trn dng 12, gi tr 7000*7000 a ti cout v s hng (double) ch cho cout bit bn mun ci ny c in ra s dng k hiu ton hc
I.3
Ch thch (Comments).
Dng gii thch cu lnh cho d hiu v gii thiu c cc thng tin v tc gi v thi
Trang 5
Trang 6
I.4
Hm ( Functions ).
Hm main() l c bit. Cc hm thng thng c gi trong chng trnh ca bn. Mt
chng trnh c x l tng dng theo th t m n c trong m ngun, tn khi n mt hm. Sau chng trnh r nhnh x l hm. Khi hm kt thc, n tr li iu khin cho dng m ngay sau n. Khi mt chng trnh cn thc hin mt dch v, n c th gi mt hm thc hin dch v . V d sau minh ho iu : Listing 2.4. Demonstrating a call to a function. 1: 2: 3: 4: 5: 6: 7: 8: 9: } // function Demonstration Function // prints out a useful message void DemonstrationFunction() { cout << "In Demonstration Function\n"; #include <iostream.h>
Trang 7
Trang 8
Exiting...
Trang 9
II
II.1
Hng s v bin s.
Bin s l g:
Trong C++, bin s l ni lu gi thng tin. Mt bin s l mt v tr trong b nh ca
my tnh m c th lu gi mt gi tr v t bn c th truy nhp vo gi tr sau ny. B nh ca my tnh c th c xem nh l mt lot cc "cubbyholes". Mi "cubbyholes" hay v tr trong b nh c nh s ln lt. Nhng s ny c bit l a ch b nh. Mt bin lu gi trong mt hoc nhiu "cubbyholes" lu mt gi tr. Tn bin ( v d : myVariable) l mt nhn trn 1 hay nhiu "cubbyholes", v vy c th tm n d dng khng cn s hiu bit a ch b nh thng thng ca n. Cch thit lp bin: Khi nh ngha mt bin trong C++, bn phi bo cho trnh bin dch bit bin l kiu g : s nguyn, k t,.... y l thng tin bo cho trnh bin dch bit kch thc ln bao nhiu thit lp mt khong b nh v kiu gi tr bn mun lu trong bin ca bn. Mi "cubbyholes" l ln 1 byte. Nu kiu bin to ra l kch thc 2 byte, n cn 2 byte ca b nh, hay 2 "cubbyholes". Kiu bin s cho trnh bin dch bit cn bao nhiu b nh dnh cho bin.
II.1.1
-
Mt bin char (dng lu k t) thng l mt byte long. Mt short interger l 2 byte trn hu ht cc my tnh, mt long interger thng l 4 byte, v mt interger (khng phi l long hay short) c th l 2 hay 4 byte.
Listing 3.1. Determining the size of variable types on your computer. 1: #include <iostream.h> 2: 3: int main() 4: { 5: 6: 7: 8: 9: cout << "The size of an int is:\t\t" << sizeof(int) << " bytes.\n";
cout << "The size of a short int is:\t" << sizeof(short) << " bytes.\n"; cout << "The size of a long int is:\t" << sizeof(long) << " bytes.\n"; cout << "The size of a char is:\t\t" << sizeof(char) << " bytes.\n"; cout << "The size of a float is:\t\t" << sizeof(float) << " bytes.\n";
10: cout << "The size of a double is:\t" << sizeof(double) << " bytes.\n"; 11: 12: return 0;
Trang 10
II.1.2
S c du v khng du.
Ni chung tt c cc kiu s nguyn l 2 dng chnh : c du v khng c du. Mc ch y l thnh thong bn cn s m v khng cn. S nguyn ( short v long )khng c t "unsigned" c coi l c du (signed). S nguyn c du hoc l s dng hoc s m. S nguyn khng du lun l dng. S nguyn khng du short c gi tr t : 0 n 65535 S nguyn c du short c gi tr t : -32768 n 32767
II.1.3
-
Cc kiu bin c bn
Bin du phy ng dng biu din s thc (real) Bin Character chim 1 byte dng cha 256 k t hoc biu tng ca bng ASCII hoc ASCII m rng.
Type Unsigned short int Short int Unsigned long int Long int Int (16 bit) Int (32 bit) Unsigned int (16 bit) Unsigned int (32 bit) Char Float Double
Size 2 bytes 2 bytes 4 bytes 4 bytes 2 bytes 4 bytes 2 bytes 2 bytes 1 byte 4 bytes 8 bytes
Values 0 to 65,535 -32,768 to 32,767 0 to 4,294,967,295 -2,147,483,648 to 2,147,483,647 -32,768 to 32,767 -2,147,483,648 to 2,147,483,647 0 to 65,535 0 to 4,294,967,295 256 character values 1.2e-38 to 3.4e38 2.2e-308 to 1.8e308
Cch to mt bin:
Trang 11
II.1.4
T kho.
II.1.5
Gn gi tr cho bin
Gn gi tr cho bin bng cch s dng ton t (=). V d: unsigned short Width; Width = 5; Bn c th gp ba bc thnh mt bc. unsigned short Width = 5; Tng t, c th khi to cho nhiu bin cng mt lc nh sau: long width = 5, length = 7; V d ny khi to bin s nguyn long l width =5 v bin s nguyn long l length =7. Ta c th kt hp c khai bo v khi to nh sau:
Trang 12
II.1.6
Typedef
Ta c th cm thy chn ngt v bun t nu c phi s dng kiu khai bo unsigned short int. C++ cho php bn to ra mt b danh cho cm t ny bng cch s dng t kho typedef, vit tt cho s nh ngha kiu. Ta nh ngha bng cch: sau t kho typedef l kiu v sau l tn mi. V d: Typedef unsigned short int USHORT Tn mi USHORT s dng bt c u thay th cho vic vit : unsigned short int.
Trang 13
10: USHORT Length; 11: Length = 10; 12: USHORT Area = Width * Length; 13: cout << "Width:" << Width << "\n"; 14: cout << "Length: " << Length << endl; 15: cout << "Area: " << Area <<endl; 16: } Output: Width:5 Length: 10 Area: 50
II.1.7
Hin tng nhy vng khi bin s vt qu gi tr cho php ca kiu khai bo.
10: cout << "small number:" << smallNumber << endl; 11: 12: } Output: small number:65535 small number:0 small number:1 return 0;
Trang 14
T hc C++ trong 21 ngy. Listing 3.5. A demonstration of adding too large a number to a signed integer.
1: #include <iostream.h> 2: int main() 3: { 4: 5: 6: 7: 8: 9: short int smallNumber; smallNumber = 32767; cout << "small number:" << smallNumber << endl; smallNumber++; cout << "small number:" << smallNumber << endl; smallNumber++;
10: cout << "small number:" << smallNumber << endl; 11: 12: } Output: small number:32767 small number:-32768 small number:-32767 return 0;
II.1.8
Characters
Bin k t ( type char ) l 1 byte, cha 256 gi tr. Mt char c th c dch nh l mt s nh ( 0-255) hay nh l mt s ca tp ASCII. Trong m ASCII, "a" c xc nh bng gi tr 97. Tt c ch thng v ch hoa, ch s v cc du chm c gi tr trong khong 1 n 128.
Trang 15
What it means
New line Tab Backspace Double quote Single quote Question mark Backslash
II.2
Hng s.
Ging nh bin s, hng s cng l ni lu tr d liu. Bn phi khi to hng s khi to ra n v khng th gn mt gi tr mi. Trong C++ c hai kiu hng : ch v biu tng.
II.2.1
V d :
Hng s kiu ch
Int myAge = 39 ;
MyAge l mt bin kiu int ; 39 l mt hng s dng ch. Bn khng th gn mt gi tr cho 39, v gi tr ca n khng th thay i c.
II.2.2
L mt hng s m c i din bng 1 tn, ch nh l mt bin nhng khng ging nh bin, gi tr ca n sau khi khi to th khng thay i c. Nu chng trnh c mt bin s nguyn t tn l : students v mt bin khc tn l : classes, c th tnh ton c bao nhiu sinh vin, nu bit c 15sinh vin/1 lp : Students = classes * 15 ; Trong v d ny, 15 l hng s kiu ch s. on m tr ln d c v d sa. Nu thay th bng mt hng s kiu ch cho gi tr ny th s l:
Trang 16
II.2.3
Hng s lit k.
Cho php to ra nhiu kiu mi v sau nh ngha cc bin ca nhng kiu ny,ton b gi tr c hn ch trong mt tp cc gi ttr c th. V d bn c th khai bo COLOR l mt bng kit k, v c th nh ngha c 5 gi tr i vi COLOR : RED, BLUE, GREEN, WHITE v BLACK. C php i vi hng s lit k c vit vi t kho enum, sau l tn kiu, mt du ngoc m, mi gi tr c phn cch bi mt du phy, cui cng l du ngoc ng v du chm phy. V d: Enum COLOR { RED, BLUE, GREEN, WHITE, BLACK } ; Lnh ny thc hin 2 cng vic: N t tn COLOR cho lit k, l mt kiu mi. N gn cho RED mt hng s biu tng 0, BLUE mt hng s biu tng 1, GREEN l 3, v tip tc. Mi hng s lit k c gi tr nguyn. Nu khng ch r cch xc nh khc th hng s u tin s c gi tr 0, v tip tc tng ln. Bt c 1 trong cc hng s ny c th c khi to vi mt gi tr c th. V vy nu vit: enum Color { RED=100, BLUE, GREEN=500, WHITE, BLACK=700 };
Trang 17
_Saturday }; 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: } Output: What day would you like off (0-6)? 1 Okay, I'll put in the vacation day. What day would you like off (0-6)? 0 You're already off on weekends! Trn dng 4, hng s kiu lit k DAYS c nh ngha, vi 7 gi tr bt u t 0. Ngi s dng c nhc nh i vi ngy trong dng 9. Gi tr c chn, mt s gia 0 v 6, c so snh trn dng 13 vi cc gi tr lit k ch nht v th by, v hnh ng i theo. if (DayOff == Sunday || DayOff == Saturday) cout << "\nYou're already off on weekends!\n"; else cout << "\nOkay, I'll put in the vacation day.\n"; return 0; cout << "What day would you like off (0-6)? "; cin >> x; DayOff = Days(x); Days DayOff; int x;
Trang 18
III
III.1 Cu lnh:
Trong C++ mt cu lnh iu khin chui x l, c lng mt biu thc, hoc khng c g ( cu lnh rng ). Tt c cc cu lnh kt thc vi mt du chm phy, thm ch cu lnh "null". Mt trong cc cu lnh thng dng l lnh gn : X=a+b; Khng ging nh trong i s, cu lnh ny khng c ngha l x bng a+b. M c l " Gn gi tr ca php cng a v b cho x" hoc " Gn cho x, a+b ". Ton t gn s gn bt c ci g bn phi du bng cho bt c ci g bn tri du bng. Ch : Cu lnh null l mt cu lnh khng lm ci g.
III.1.1
Khong trng
Khong trng ( tabs, spaces, v cc dng mi) thng c b qua trong cu lnh. Cu lnh gn trn s c vit nh sau: X=a+b; Hoc nh l : X + b ; =a
Khong trng c th c dng cho chng trnh d c,d sa hn, hoc n c th c dng to ra m kinh khng v khng th c ra c. Trong trng hp ny,nh tt c mi th, C++ cung cp kh nng. Cc k t khong trng ( tab, space, newline )khng th nhn thy c. Nu cc k t ny c in ra, bn ch nhn thy khong trng trn giy.
III.1.2
Bt c ni no bn c th a vo mt cu lnh n, bn c th a vo mt cu lnh phc, cng c th c gi l mt khi. Mt khi bt u vi 1 du ngoc m ({) v kt thc vi 1 du ngoc ng (}). Mc d vy mi cu lnh trong khi phi kt thc vi mt du chm phy, khi t n khng kt thc vi mt du chm phy. V d : { temp = a;
Trang 19
SecondsPerMinute
Gi s rng PI l mt hng s bng 3.14 v SecondsPerMinute l mt hng s bng 60, tt c 3 cu lnh ny l cc biu thc. Biu thc phc tp x = a + b; khng ch cng a v b v gn kt qu cho x, nhng tr v gi tr ca vic gn (gi tr ca x). V vy, lnh ny cng l mt biu thc. V l mt biu thc, n c th bn phi ca ton t gn: y = x = a + b; Dng ny c xc nh trong lnh sau : Cng a vi b. Gn kt qu ca biu thc a+b cho x. Gn kt qu ca biu thc x = a+b cho y
Trang 20
III.3 Cc ton t.
L biu tng m lm cho trnh bin dch hot ng. Cc ton t hot ng trn cc ton hng, v trong C++ tt c cc t l cc biu thc. Trong C++ c mt vi loi ton t khc nhau. Hai loi ton t l : Cc ton t gn. Cc ton t ton hc.
III.3.1
Ton t gn.
X=a+b;
Ton t gn (=). V d : Cc hng s u l r- gi tr. Chng khng th l 1_ gi tr. V vy, c th vit. X = 35 ; // OK Nhng khng th vit: 35 = x ; // error, not an 1 value !
III.3.2
C 5 ton t ton hc: cng (+), tr (-), nhn (*), chia (/), v (%).
Trang 21
III.3.3
Php chia s nguyn c khc mt cht so vi php chia thng thng. Khi chia 21 cho 4, kt qu l mt s thc (mt s thp phn). Cc s nguyn khng c phn thp phn, v v vy "remainder" (s d) c ct i. Tr li l 5. ly c s d, a 21 modulus 4 (21%4) v kt qu l 1. Php chia divison (/) l php chi ly phn nguyn. Php chia modulus (%) l php chia ly phn d.
Ch : Nhiu ngi lp trnh C++ cha c kinh nghim tnh c a mt du chm phy sau cc lnh if. If ( SomeValue <10) ; SomeValue = 10 ; Ta phi vit li theo cch sau: if (SomeValue < 10) // test ; // do nothing SomeValue = 10; // assign
III.3.4
Him khi mun cng mt gi tr vi mt bin s v sau gn kt qu tr li bin. Nu c mt bin myAge v bn mun tng gi tr thm hai, c th vit: int myAge = 5; int temp; temp = myAge + 2; // add 5 + 2 and put it in temp myAge = temp; // put it back in myAge
Phng php ny, mc d, rt kh chu v gy lng ph. Trong C++, c th a vo bin tng t trn c hai chiu ca ton t gn, v v vy phn trc tr nn tt hn nhiu :s MyAge = myAge + 2 ; Trong i s biu thc thc ny l v ngha, nhng trong C++ c c l "cng 2 vo gi tr ca myAge v gn kt qu vo myAge ". Mt cch vit n gin hn l : MyAge += 2 ; Ton t (+=) cng r-gi tr vo 1-gi tr v sau gn tr li kt qu vo trong 1-gi tr. Ton t l "cng-bng". Cu lnh c l "myAge cng-bng 2". Nu myAge c gi tr 4 bt u, sau cu lnh s l 6.
Trang 22
III.3.5
Thng thng gi tr cng (hoc tr) v sau gn li vo bin l 1.Trong C++, vic tng gi tr l 1 c gi l lng tng, v gim 1 c gi lng gim. C cc ton t c bit thc hin nhng tc ng ny. Ton t tng (++) tng gi tr ca bin ln 1, v ton t gim (--) gim i 1. V vy,nu c 1 bin, c, v mun tng n, ta s s dng lnh ny: c++ ; Lnh ny tng ng vi lnh sau: c = c +1 ; Cu lnh ny cng tng ng: c += 1 ;
III.3.6
-
Tin t v hu t.
C hai ton t (++) v ton t (--) i n 2 loi: tin t v hu t. Tin t c vit trc tn bin (++myAge) Hu t c vit sau tn bin (myAge++).
V ng ngha hc th: tng gi tr ln trc khi thc hin lnh. Cn vi hu t th : thc hin lnh sau mi tng gi tr. V d: nu x l s nguyn c gi tr l 5, nu vit: int a = ++x ; C ngha l tng x (lm n thnh 6) v sau ly gi tr gn cho a. V vy a = 6 v x = 6. Nu sau ta tip tc vit: int b = x++ ; C ngha l ly gi tr ca x (6) v gn cho b, sau tng gi tr ca x. V vy, by gi b = 6, v x = 7.
Trang 23
cout << "One year passes...\n"; cout << "I am: " << myAge << " years old.\n"; cout << "You are: " << yourAge << " years old\n"; cout << "Another year passes\n"; cout << "I am: " << myAge++ << " years old.\n"; cout << "You are: " << ++yourAge << " years old\n"; cout << "Let's print it again.\n"; cout << "I am: " << myAge << " years old.\n"; cout << "You are: " << yourAge << " years old\n"; return 0;
III.3.7
Quyn u tin.
Trong cu lnh phc tp : x = 5 + 3 * 8; Th php nhn s c thc hin trc php cng. Mi ton t u c 1 gi tr u tin. Khi 2 ton t ton hc c cng quyn u tin, chng s thc hin theo trt t " t tri - qua - phi". V vy X=5+3+8*9+6*4; Php nhn s thc hin t tri qua phi. V vy, 8 * 9 = 72, v 6*4 =24. By gi cu lnh s l: X = 5 + 3 + 72 + 24; By gi php cng thc hin t tri qua phi: 5 + 3 =8 ; 8+72 =80 ; 80+24 = 104.
Trang 24
III.3.8
Ton t quan h
Dng xc nh hoc 2 s bng nhau, hoc 1 s ln hn hoc nh hn 1 s khc. Cu lnh quan h xc nh hoc 1 (TRUE) hoc 0 (FALSE). Ton t bng "equals" : MyAge == yourAge ; Ton t ln hn. MyAge > yourAge ; Bng : == Nh hn: < Ln hn: > Nh hn hoc bng: <= Ln hn hoc bng : >= Khc nhau : != // gi tr myAge ln hn yourAge ? // gi tr myAge tng t ca yourAge ? Biu thc xc nh 0, hoc FALSE khi 2 bin khng bng nhau.
Operator
==
Sample
100 == 50; 50 == 50;
Evaluates
false true true false true false
!=
Greater Than
>
Trang 25
<=
Trang 27
Else
Thng chng trnh ca bn s mun r nhnh nu iu kin ng, v nu iu kin sai. Nu ch s dng lnh if khng th chng trnh s di v ta s dng t kho "else" nh sau: If (biu thc) Cu lnh ; Else Cu lnh ;
Trang 28
Output: Please enter a big number: 10 Please enter a smaller number: 12 Oops. The second is bigger!
Trang 29
Trang 30
Second: 2
Symbol
&& || !
expression2 expression2
III.5.1
Php AND ng (=1) khi c hai biu thc u ng. Sai khi 1 trong 2 biu thc sai. Php AND c biu tng l &&.
III.5.2
Php lgc OR
if ( (x == 5) || (y == 5) )
ng khi 1 trong 2 hoc c 2 biu thc ng. Sai khi c 2 biu thc u sai.
III.5.3
III.5.4
V d:
if ( x > 5 && y > 5 || z > 5) Nu vit cch ny s lm cho cu lnh khng r ngha. Do ta c th s dng cc du ngoc. if ( (x > 5) && (y > 5 || z > 5) ) Ch trong khi vit chng trnh cn trnh by sao cho d c v d hiu.
III.5.5
V d 1:
Cu lnh c ngha : nu x c gi tr khc 0, t n l 0. Ta c th vit cch khc r rng hn: if (x != 0) x = 0; V d 2: Hai cu lnh sau l tng ng : if (!x) // if x is false (zero) // if x is nonzero
Trang 32
Trang 33
Second: 8
z: 8 z: 8
IV
Cc hm.
Hm l g ? Hm l mt chng trnh con m c th lm vic trn d liu v tr v mt gi tr. Trong chng trnh C++ c ti thiu mt hm, main(). Khi chng trnh bt u, main() c t ng gi. main() c th gi cc hm khc. Mi hm c tn ca n v khi tn c gp, vic x l chng trnh r nhnh vo trong thn hm. Khi hm tr v, vic x l tr li trn dng tip theo ca hm gi. Cc hm c hai cch to ra: Do ngi s dng nh ngha. C sn trong trnh bin dch.
Trang 34
IV.1.1
dng
Cc nguyn mu hm.
# include . i vi cc hm ca chnh bn vit, bn phi gp nguyn mu.
Nhiu hm c sn, bn c th s dng chng trong chng trnh ca bn bng cch s Nguyn mu hm l mt cu lnh , ngha l n kt thc vi du chm phy (;). N kiu tr v ca hm, tn, v danh sch tham s. Danh sch tham s l mt danh sch ca tt c cc tham s v kiu ca chng, phn cch bi du phy (commas). Nguyn mu hm v s nh ngha hm phi ging nhau chnh xc v kiu tr v, tn, danh sch tham s. Nu chng khng ging nhau , bn s nhn c mt li "compile-time". Ch : nguyn mu hm khng cn gm tn ca tham s, m ch l kiu ca chng. Mt nguyn mu trng ging nh : Long Area (int , int ) ; Nguyn mu ny khai bo mt hm tn l Area() tr v mt long v c hai tham s, c hai l s nguyn. Mc d y l theo qui nh, n khng phi l tng tt. Tn tham s thm vo lm cho nguyn mu r rng hn. Hm tng t vi cc tham s c dt tn c th l : Long Area (int length, int width) ; Ch rng: tt c cc hm c mt kiu tr v. Nu khng nh r, kiu tr v mc nh l int . Chng trnh ca bn s hiu d dng hn, mc d, nu khai bo r rng kiu tr v ca mi hm, k c main() .
Listing 5.1. A function declaration and the definition and use of that function.
1: // Listing 5.1 - demonstrates the use of function prototypes 2: 3: typedef unsigned short USHORT; 4: #include <iostream.h> 5: USHORT FindArea(USHORT length, USHORT width); 6: 7: int main() //function prototype
Trang 35
10: USHORT widthOfYard; 11: USHORT areaOfYard; 12: 13: cout << "\nHow wide is your yard? "; 14: cin >> widthOfYard; 15: cout << "\nHow long is your yard? "; 16: cin >> lengthOfYard; 17: 18: areaOfYard= FindArea(lengthOfYard,widthOfYard); 19: 20: cout << "\nYour yard is "; 21: cout << areaOfYard; 22: cout << " square feet\n\n"; 23: 24: } 25: 26: USHORT FindArea(USHORT l, USHORT w) 27: { 28: 29: } Output: How wide is your yard? 100 return l * w; return 0;
IV.1.2
nh ngha hm .
nh ngha hm bao gm u hm v thn hm. u hm chnh xc ging nh nguyn mu hm, ngoi tr cc tham s phi c t tn, v khng c du chm phy kt thc. Thn hm l mt tp cc lnh bn trong cc du ngoc. Hm: C php nguyn mu hm: Return_type function_name ( [type [parameterName] ] .....) ; C php nh ngha hm:
Trang 36
void PrintMessage(int whichMsg) { if (whichMsg == 0) cout << "Hello.\n"; if (whichMsg == 1) cout << "Goodbye.\n"; if (whichMsg > 1) cout << "I'm confused.\n"; }
Trang 37
Trang 38
Hin nay, cc bin c khai bo bn trong u ca mt vng for (for int i = 0; i<SomeValue ;
Trang 39
Trang 40
Trang 41
34: }
Back in main, x is: 5 Chng trnh bt u vi s khi to 1 bin khu vc, x, trn dng 10, trong main(). In ra trn dng 11 xc nh rng x c khi to vi gi tr 5. MyFunc() c gi, v 1 bin khu vc, cng c t tn x, c khi to vi gi tr 8 trn dng 22. Gi tr c in ra trn dng 23. Mt khi c bt u trn dng 25, v bin x t hm c in li trn dng 26. Mt bin mi cng c t tn x, nhng khu vc khi c to ra trn dng 28 v c khi to vi gi tr 9. Gi tr ca bin x mi nht c in ra trn dng 30. Khi kt thc trn dng 31, v bin c to ra trn dng 28 -"out of scope". Khi x c in ra trn dng 33, x c nh ngha trn dng 28; gi tr ca n vn l 8.
IV.3.1
Cu lnh hm.
Hu nh khng c gii hn v s kiu cu lnh m c th bn trong thn hm. Mc d vy bn khng th nh ngha mt hm khc t bn trong mt hm, bn c th gi 1 hm. Cc hm c th thm ch gi chnh chng. Mc d khng c gii hn v kch thc ca 1 hm trong C++, nhng xu hng xy dng hm c kch thc nh. Nhiu nh lp trnh khuyn lm cho hm va trn mt mn hnh n v vy bn c th nhn ton b hm cng mt lc. y l mt qui lut lt trang, thng ngt qung bi cc nh lp trnh gii, nhng mt hm cng nh th cng d hiu v sa cha. Mi hm nn thc hin mt cng vic n l v d hiu.
IV.3.2
i s ca hm.
Trang 42
IV.3.3
Mc d l qui lut i vi mt hm thc hin nh 1 tham s ca hm th hai m tr v 1 gi tr,n c th lm cho m chng trnh kh c v rc ri. V d, c cc hm : double(), triple(), square(), v cube(); mi hm tr v 1 gi tr. C th vit. Answer = (double(triple(square(cube(myValue))))); Cu lnh ny dng 1 bin, myValue, v coi n nh 1 i s i vi hm cube(), gi tr tr v c coi l i s ca hm square(), gi tr tr v ca n coi l i s ca hm triple(), v gi tr tr v a ti hm double(). Gi tr tr v ca hm double(), triple(), square(), cube() c a ti Answer. Kh c th chc chn on m no thc hin (l gi tr trc triple hay sau l square ?). Mt thay i k tip l gn mi bc ti bin trung gian ca n: unsigned long myValue = 2; unsigned long cubed = cube(myValue); unsigned long squared = square(cubed); unsigned long tripled = triple(squared); unsigned long Answer = double(tripled); // cubed = 8 // squared = 64 // tripled = 196 // Answer = 392
IV.3.4
i s a vo trong hm l khu vc cho hm. S thay i lm cho cc i s khng nh hng ti gi tr trong gi hm. iu ny c bit nh truyn gi tr, ngha l mt bn sao khu vc ca mi i s lm trong hm. Nhng bn sao khu vc ny c coi nh l bt c bin khu vc khc.
Trang 43
Output: Main. Before swap, x: 5 y: 10 Swap. Before swap, x: 5 y: 10 Swap. After swap, x: 10 y: 5 Main. After swap, x: 5 y: 10
IV.3.5
Gi tr tr v.
Cc hm tr v gi tr hoc tr v dng void. Void l 1 tn hiu bo cho trnh bin dch s khng c gi tr tr v. tr v mt gi tr t 1 hm, vit t kho return theo sau l gi tr mun tr v. Gi tr c th t n l 1 biu thc m tr v mt gi tr. V d: return 5; return (x > 5); return (MyFunction()); y l tt c nhng lnh return theo qui nh, gi s rng hm MyFunction() t n tr v mt gi tr. G tr trong cu lnh th hai, return (x>5), s l zero nu x khng ln hn 5, hoc n s l 1. Ci c tr v l gi tr ca biu thc ,0 (false) hay 1(true), khng phi gi tr ca x.
Trang 44
Trang 45
IV.3.6
Tham s mc nh.
i vi mi tham s khai bo v nh ngha trong nguyn mu hm, hm ang gi phi a vo mt gi tr. Gi tr c a vo phi l kiu c khai bo. V vy, nu c 1 hm khai bo nh sau. Long myFunction (int); Hm phi nhn mt bin s nguyn. Nu nh ngha hm khng ging hoc nu khng a vo mt s nguyn th s nhn c mt li bin dch. Mt s ngoi tr i vi qui lut ny l nu nguyn mu hm khai bo 1 gi tr mc nh i vi tham s. Gi tr mc nh l 1 gi tr s dng nu dng dng "none". Khai bo trc c th c vit nh sau: Long myFunction (int x = 50) ; Nguyn mu ni rng, "myFunction ()" tr v mt gi tr long v nhn 1 tham s s nguyn. Nu mt i s khng c a vo, s dng gi tr mc nh 50. Bi v tn tham s khng cn trong nguyn mu hm, nguyn mu ny c th c vit nh sau: Long myFunction (int = 50); nh ngha hm khng thay i bi khai bo 1 tham s mc nh. u nh ngha hm i vi hm ny s l : long myFunction (int x)
Trang 46
Trang 47
Output: First area equals: 10000 Second time area equals: 5000 Third time area equals: 2500
IV.3.7
Cc hm xp chng.
C++ cho php to ra hn 1hm cng tn. iu ny c gi l xp chng hm. Cc hm phi khc nhau trong danh sch tham s, vi kiu tham s khc nhau, mt s tham s khc nhau hoc c hai. V d: int myFunction (int, int); int myFunction (long, long); int myFunction (long); Kiu tr v c th ging nhau hoc khc nhau trn cc hm xp chng. Ch : hai hm c cng tn v dang sch tham s, nhng khc nhau kiu tr v, to ra mt li bin dch. Ch : Hm "Overloading" cng c gi l hm "polymorphism": Hm nhiu dng. Gi s vit 1 hm kiu double vi bt c u vo no. Bn mun a vo trong 1 kiu int, 1 kiu long, 1 kiu float, hoc 1 kiu double. Khng c xp chng hm, bn phi to ra 4 hm vi cc tn : int DoubleInt(int); long DoubleLong(long); float DoubleFloat(float); double DoubleDouble(double); Vi hm xp chng, c th khai bo nh sau: int Double(int); long Double(long); float Double(float); double Double(double); y l cch d c v d s dng.Khng phi lo lng v hm no gi; ch cn a vo 1 bin, v hm bn phi c gi t ng
Trang 48
double doubledDouble;
Trang 49
Trang 50
IV.3.8
Cc hm "InLine".
Khi nh ngha 1 hm, thng thng trnh bin dch to ra 1 tp cc lnh trong b nh. Khi gi 1 hm, vic x l ca chng trnh nhy ti cc lnh ny, v khi tr v hm, vic thc hin nhy tr v dng tip theo trong hm gi. Nu gi hm 10 ln, chng trnh nhy ti tp lnh tng t mi ln. Ngha l ch c sao chp hm 1 ln, khng phi 10 ln. C 1 s chc nng mo u trong vic nhy vo v nhy ra khi hm. i vi hm nh ch 1 dng hoc 2 dng m lnh v 1 s kh nng c th c li nu chng trnh c th trnh c vic nhy ny ch x l 1 hoc 2 lnh. Khi ni v hiu qu , cc nh lp trnh ni rng: Chng trnh chy nhay hn nu hm gi c th c trnh. Nu 1 hm c khai bo vi t kho "inline", trnh bin dch khng to ra mt hm thc : n sao chp m t hm inline trc tip t hm gi. Khng c bc nhy; n ch nh l nu bn vit cc lnh ca hm bn phi sang hm gi. Ch rng: Trong hm inline c th a ra mt gi tr ln. Nu hm c gi 10 ln, m inline c copy sang hm gi mi ln trong 10 ln . Vic ci tin gim nh tc c th t c bng cch tng kh nng x l chng trnh . Cc trnh bin dch ngy nay thc hin cng vic rt ln, v hu nh khng c li ln t vic khai bo mt hm inline.
Trang 51
IV.4 qui.
Mt hm c th gi chnh n. iu ny c gi l qui, v qui c th l trc tip hoc khng trc tip. L trc tip khi 1 hm t gi chnh n; l khng trc tip khi 1 hm gi mt hm khc m sau gi hm u tin. Hm qui cn mt iu kin dng, nu khng n s khng bao gi kt thc. Trong chui Fibonacci , iu kin dng l n<3. Thut ton s dng cho chui : 1. Hi user v v tr trong chui. 2. Gi hm fib() vi v tr . Nhn gi tr user a vo. 3. Hm fib() xc nh i s (n). Nu n<3, n tr v 1; ngc li fib() t gi n ( qui) n-2, t gi li n-1 v tr v tng s.
Trang 52
Trang 53
40: }
Processing fib(5)... Call fib(3) and fib(4). Processing fib(3)... Call fib(1) and fib(2). Processing fib(1)... Return 1! Processing fib(2)... Return 1! Processing fib(4)... Call fib(2) and fib(3). Processing fib(2)... Return 1! Processing fib(3)... Call fib(1) and fib(2). Processing fib(1)... Return 1! Processing fib(2)... Return 1! 5 is the 5th Fibonacci number qui khng thng s dng trong lp trnh C++, nhng n c th l cng c y sc mnh i vi nhu cu no . Ch : qui l 1 phn rt kho lo ca lp trnh nng cao.
Trang 54
V
V.1
V.1.1
Cc lp c bn.
To ra cc kiu mi.
Ti sao phi to mt kiu mi.
Chng trnh thng c vit gii nhng bi ton ca th gii thc, nh l lu gi cc
bn ghi ca nhn vin, m phng cng vic ca mt h thng t nng. Mc d n c kh nng gii cc bi ton phc tp bng cch s dng cc chng trnh c vit ch vi s nguyn v k t, n s d dng thc hin cc bi ton ln v phc tp hn nu c th to i din ca cc i tng m s ni n. Ni cch khc, m phng cng vic mt h thng nung nng d dng hn nu c th to ra cc bin m i din l cc bung, cc cm bin nhit, b n nhit, v ni hi.
V.1.2
Lp v cc b phn.
Thc hin mt kiu mi bng cch khai bo mt lp (class).Mt lp ch l mt tp cc
bin-- thng l cc kiu khc nhau-- kt hp vi 1 tp cc hm c lin quan. Mt lp cho php gi gn nhng phn khc nhau v nhng hm khc nhau vo trong mt tp hp, m c gi l mt i tng (objects).
Trang 55
on m ny nh ngha 1 bin gi l Gross Weight l s nguyn khng du. N cng nh ngha Frisky, l i tng ca lp Cat. Ch : Mt i tng l 1 trng hp ring bit ca mt lp. truy nhp vo cc b phn trong lp, ngi ta thng dng du (.). Trong v d trn, gn 50 vo bin thnh vin Weight ca Frisky, phi vit: Frisky.Weight = 50; Tng t, gi hm Meow(), nn vit : Frisky.Meow() ;
Trang 56
V.1.2.3 Gn cho i tng, khng gn cho lp. Trong C++, khng gn gi tr cho cc kiu; m gn gi tr cho bin. V d, bn khng bao gi c vit : Int = 5 ; Trnh bin dch s a ra mt li, v khng th gn 5 cho mt s nguyn. Bn phi vit nh sau: Int x ; X=5; Tng t, khng th vit : Cat.age = 5 ; Trnh bin dch s a ra mt li, v khng th gn 5 cho phn tn ca mt lp Cat. Bn phi nh ngha mt i tng Cat v gn 5 cho i tng . V d: Cat Frisky; Frisky.age = 5; // just like int x; // just like x = 5;
V.1.3
Private v Public.
Cc t kho khc dng khai bo lp. C hai loi thng dng l : public v private.
Tt c cc phn (thnh vin) ca mt lp-- d liu v phng php (methods)-- l private theo mc nh. Cc thnh vin private c th c truy nhp ch bn trong method ca chnh lp . Cc thnh vin private c th c truy nhp thng qua bt c i tng no ca lp. S khc nhau ny l c quan trng v kh hiu. hiu r rng hn, quan st v d sau: class Cat { unsigned int itsAge; unsigned int itsWeight; Meow(); }; Trong v d ny , itsAge, itsWeight, v Meow() tt c l private, v tt c thnh vin ca 1 lp l private theo mc nh. Mc d vy, nu bn vit: Cat Boots; Boots.itsAge=5; // error! can't access private data! Trnh bin dch s bo 1 li . Cch s dng Cat v vy bn c th truy nhp vo c cc thnh vin data l: class Cat { public:
Trang 57
11: }; 12: 13: 14: void main() 15: { 16: 17: 18: 19: 20: Output: Frisky is a cat who is 5 years old. Mt qui lut chung ca thit k l nn gi li d liu thnh phn ca mt private lp. V vy, bn phi to ra cc hm public c bit nh l b truy nhp h thng thit lp v nhn cc bin private thnh vin. Nhng b truy nhp h thng l cc hm thnh vin m cc phn ca chng trnh gi nhn c v thit lp cc bin private thnh vin. Ch : Mt public accessor method l 1 hm thnh vin ca lp c dng hoc c gi tr ca bin thnh vin private ca lp hoc thit lp gi tr ca n. Cat Frisky; Frisky.itsAge = 5; // assign to the member variable
cout << "Frisky is a cat who is " ; cout << Frisky.itsAge << " years old.\n";
Trang 58
10: void SetAge(unsigned int Age); 11: 12: unsigned int GetWeight(); 13: void SetWeight(unsigned int Weight); 14: 15: // public member functions
19: private: 20: unsigned int itsAge; 21: unsigned int itsWeight; 22: 23: }; thit lp tui ca Frisky, ta c th a gi tr vo hm SetAge() nh sau: Cat Frisky; Frisky.SetAge(5); // set Frisky's age using the public accessor
V.1.4
T kho Class.
Trang 59
Cat Frisky; Frisky.Age = 8; Frisky.Weight = 18; Frisky.Meow(); V d: class Car { public: void Start(); void Accelerate(); void Brake(); void SetYear(int year); int GetYear(); // the next five are public
Trang 60
// make an instance of car // a local variable of type int // assign 84 to the year // set bought to 84
V.1.4.1 Cc hm b sung trong lp. Hm b sung c gi l nh ngha hm. Mt nh ngha hm thnh vin bt u vi tn ca lp, sau l 2 du 2 chm (::), tn ca hm, v cc tham s ca n. V d:
void SetAge (int age); // accessor function void Meow(); // general function // begin private section // member variable
16: // GetAge, Public accessor function 17: // returns value of itsAge member 18: int Cat::GetAge() 19: { 20: 21: } 22: return itsAge;
Trang 61
Trang 62
Trang 63
Trang 64
67: }
Output: Meow. Frisky is a cat who is 5 years old. Meow. Now Frisky is 7 years old. Ch : Khng nn a tham s cho cc hm xo ( destructors ). Cc hm xy dng (instructors ) v hm xo khng nn tr v gi tr . S dng hm xy dng khi to cho i tng . V.1.5.1 Cc hm thnh vin Const. Nu khai bo mt hm trong lp l const, bn phi hy vng hm s khng lm thay i gi tr ca bt c thnh vin no ca lp. khai bo mt hm khng i trong lp, t t kho const sau du ngoc n nhng trc du chm phy. V d khi bo hm khng i SomeFunction() khng c i s v tr v dng void: Void someFunction() const ; V d Void SetAge (int anAge) ; Int GetAge () ; SetAge() khng th l const v n thay i bin thnh vin itsAge. GetAge() c th l const v n khng thay i tt c lp. GetAge() tr v gi tr hin ti ca bin thnh vin itsAge. V vy, khai bo hm ny nn vit: Void SetAge (int anAge) ; Int GetAge () const ;
Trang 65
t khai bo lp v hm trong lp u.
Mi hm m bn khai bo cho lp, phi c mt nh ngha . S nh ngha cng c gi l s b xung hm. Ging nh cc hm khc, nh ngha ca mt hm trong lp c mt u v 1 thn hm. S nh ngha phi trong 1 file m trnh bin dch c th tm thy. Hu ht cc trnh bin dch C++ mun cc file kt thc vi .C hoc .CCP. Trong quyn sch ny vit l .CCP. Bn t do t khai bo trong file ny, nhng l khng tt cho lp trnh thc t. Quy c m hu ht cc lp trnh vin chp nhn t khai bo vo trong ci c gi l u file, thng vi tn kt thc l .H hoc .HP, .HPP . Trong quyn sch ny u file vi .HPP. V d, t khai bo ca lp Cat vo trong 1 file c tn CAT.HPP, v t khai bo ca hm trong lp vo trong 1 file c gi l CAT.CPP. Sau gn u file vi file .CPP bng cch t m lnh sau u file CAT.CPP: #include Cat.hpp iu ny bo cho trnh bin dch c CAT.HPP bn trong file. Vic c file u bo cho chng mi th chng cn bit; chng c th b qua cc file b xung. V.2.1.1 B xung Inline. Khai bo vi hm GetWeight() : inline int Cat::GetWeight() { return itsWeight; } Bn cng c th t nh ngha ca hm vo trong khai bo ca lp, m t ng thc hin hm inline . V d : class Cat { public: int GetWeight() { return itsWeight; } void SetWeight(int aWeight); }; V d: class Cat { public: int GetWeight() { // inline // return the Weight data member
Trang 66
8: void SetAge (int age) { itsAge = age;} 9: void Meow() { cout << "Meow.\n";} 10: private: 11: int itsAge; 12: };
Trang 67
29: }
Output: Meow. Frisky is a cat who is 5 years old. Meow. Now Frisky is 7 years old. Trong v d ny, trn dng 4 c #include "cat.hpp" , n bo cho tin x l c file cat.hpp vo trong file ny. K thut ny cho php bn t khai bo vo trong mt file b xung khc. y l k thut rt thng dng trong lp trnh C++. in hnh, khai bo lp trong file .HPP v sau c #include vo trong file c lin kt .CPP.
V.2.2
Ngi ta khng thng xy dng mt lp phc tp bng vic khai bo cc lp n gin hn v gp chng vo trong khai bo ca lp phc tp. Quan st v d th 2. Mt hnh ch nht l kt hp ca cc ng thng. Mt ng thng c 2 im. Mt im c nh ngha bng 1 to x,y . V d sau ch ra mt khai bo hon chnh ca mt lp hnh ch nht, xut hin trong RECTANGLE.HPP. V mt hnh ch nhtdc nh ngha l 4 ng thng lin kt vi nhau 4 im, mi im coi l mt to trn th, u tin khai bo mt lp Point, gi cc to x,y ca mi im.
Trang 68
14: }; // end of Point class declaration 15: 16: 17: class Rectangle 18: { 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36: 37: 38: 39: void SetTop(int top) { itsTop = top; } void SetLeft (int left) { itsLeft = left; } void SetUpperLeft(Point Location) {itsUpperLeft = Location;} void SetLowerLeft(Point Location) {itsLowerLeft = Location;} void SetUpperRight(Point Location) {itsUpperRight = Location;} void SetLowerRight(Point Location) {itsLowerRight = Location;} Point GetUpperLeft() const { return itsUpperLeft; } Point GetLowerLeft() const { return itsLowerLeft; } Point GetUpperRight() const { return itsUpperRight; } Point GetLowerRight() const { return itsLowerRight; } int GetTop() const { return itsTop; } int GetLeft() const { return itsLeft; } int GetBottom() const { return itsBottom; } int GetRight() const { return itsRight; } public: Rectangle (int top, int left, int bottom, int right); ~Rectangle () {}
Trang 69
Trang 70
V.3
Cu trc (structures).
Mt t kha rt gn vi t kho class l struct , c dng khai bo mt cu trc. Trong C++, mt cu trc chnh xc ng nh mt lp, ngoi tr cc thnh vin ca n mc nh l public. Bn c th khai bo 1 cu trc chnh xc nh khai bo 1 lp. Xem li v d trn listing 6.8 : Dng 3, l : class Point to struct Point .
Trang 71
VI
9: loop: counter ++; 10: 11: 12: 13: 14: 15: 16: } Output: counter: 1 counter: 2 counter: 3 counter: 4 counter: 5
cout << "counter: " << counter << "\n"; if (counter < 5) goto loop; // test the value // jump to the top
cout << "Complete. Counter: " << counter << ".\n"; return 0;
Trang 72
VI.1.1
Vic s dng lnh goto s gy ra s ln xn v kh khn, khng th c chng trnh mt cch d dng c . Do nhng iu ny m ngi ta t khi s dng lnh goto. thay th cho vic s dng lnh goto, ngi ta a ra cc lnh: for, while, v do ... while. Ch khng nn dng goto. V n gy ra nhng phc tp.
VI.1.2
Cu lnh goto.
s dng lnh goto, ta vit sau goto l tn nhn. iu ny to ra bc nhy v iu kin ti nhn. V d: if (value > 10) goto end ; if (value < 10) goto end; cout << "value is 10!"; end: cout << "done";
Trang 73
VI.2.1
C php:
Cu lnh While.
While (iu kin ) Cu lnh ;
iu kin l bt c biu thc no, cu lnh c th l 1 cu lnh hoc mt khi cc lnh. Khi iu kin l ng (TRUE), , cu lnh c x l, v sau iu kin c kim tra li. Qu trnh s tip tc n khi iu kin kim tra l FALSE, khi vng lp kt thc v x l dng u tin sau cu lnh . V d: // count to 10 int x = 0; while (x < 10) cout << "X: " << x++;
VI.2.2
iu kin kim tra trong vng lp while c th phc tp, n c th s dng ton t lgc: && (AND), // (OR), v ! (NOT).
Trang 74
33: } Output: Enter a small number: 2 Enter a large number: 100000 small: 2......... Small: 33335 Large: 33334
VI.2.3
Continue v break.
Lnh continue nhy tr li u ca vng lp. Lnh break lp tc kt thc vng lp while v chng trnh x l tip sau du ng ngoc. V d:
Trang 75
Trang 76
48: return 0; 49: } Output: Enter a small number: 2 Enter a large number: 20 Enter a skip number: 4 Enter a target number: 6 skipping on 4 skipping on 8
Small: 10 Large: 8 VI.2.3.1 Lnh Continue. Lm cho vng lp while hoc for tr li u vng lp. V d: if (value > 10) goto end; if (value < 10) goto end; cout << "value is 10!"; end: cout << "done"; VI.2.3.2 Cu lnh Break. Lm cho vng lp while hoc for lp tc kt thc. V d: while (condition) { if (condition2) break;
Trang 77
VI.2.4
Vng lp While(1).
y l vng lp While khng bao gi kt thc (lp v hn). V 1 lun l ng v lp khng bao gi kt thc tr khi gp lnh break.
Vng lp ny x l khi lp trc khi kim tra iu kin ca n v chc chn rng khi lp lun c thc hin vi thi gian ti thiu.
1: 2: 3:
Trang 78
Output: How many hellos? 2 Hello Hello Counter is: 0 Cc lnh continue v break lm vic trong vng lp do ...while c tc dng nh trong vng lp while. S khc nhau gia while v do...while l khi no kim tra iu kin .
VI.3.2
C php: Do
Cu lnh While (iu kin) ; Cu lnh c thc hin sau iu kin c xc nh. Nu iu kin l TRUE, vng lp c lp li, ngc li nu l FALSE, vng lp kt thc. V d 1: // count to 10 int x = 0; do cout << "X: " << x++; while (x < 10)
Trang 79
VI.4.1
C php cu lnh for : For ( Khi to; Kim tra; hot ng) Cu lnh ; V d: // print Hello ten times for (int i = 0; i<10; i++) cout << "Hello! "; V d 2: for (int i = 0; i < 10; i++) { cout << "Hello!" << endl; cout << "the value of i is: " << i << endl; }
VI.4.2
Cu lnh for c y sc mnh v s linh hot. Mt vng lp for lm vic theo cc bc sau: 1. Thc hin php ton khi to. 2. Xc nh iu kin .
Trang 81
12: }
Output: i: 0 j: 0 i: 1 j: 1 i: 2 j: 2 V d v cu lnh Null trong vng lp FOR: 1: // Listing 7.11 2: // For loops with null statements 3: 4: #include <iostream.h> 5: 6: int main() 7: { 8: 9: 10: 11: 12: 13: for( ; counter < 5; ) { counter++; cout << "Looping! "; int counter = 0;
Trang 82
output: Looping! Looping! Looping! Looping! Looping! Counter: 5. Trong thc t, s dng break v continue to ra mt vng for khng c 3 cu lnh . V d cu lnh For rng: 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: } } return 0; } else break; int main() { int counter=0; int max; cout << "How many hellos?"; cin >> max; for (;;) { if (counter < max) { cout << "Hello!\n"; counter++; // increment // test // a for loop that doesn't end // initialization #include <iostream.h> //Listing 7.12 illustrating //empty for loop statement
Trang 83
23: }
Trang 84
Trang 85
Which position? 5
Which position? 20
Trang 86
Trang 87
Enter a number between 1 and 5: 8 Too large! V d khc. switch (choice) { case 0: cout << "Zero!" << endl; break case 1: cout << "One!" << endl; break; case 2: cout << "Two!" << endl; default: cout << "Default!" << endl; }
Example 2
switch (choice) { choice 0: choice 1: choice 2: cout << "Less than 3!"; break; choice 3: cout << "Equals 3!"; break; default:
Trang 88
Trang 89
Trang 90
(1) Choice one. (2) Choice two. (3) Choice three. (4) Redisplay menu. (5) Quit.
:1 Task One! **** Menu **** (1) Choice one. (2) Choice two. (3) Choice three. (4) Redisplay menu. (5) Quit.
:3 Task Three! **** Menu **** (1) Choice one. (2) Choice two. (3) Choice three. (4) Redisplay menu.
Trang 91
:5
VII
2:
n tp t I VI .
1: #include <iostream.h>
3: typedef unsigned short int USHORT; 4: typedef unsigned long int ULONG; 5: enum BOOL { FALSE, TRUE}; 6: enum CHOICE { DrawRect = 1, GetArea, 7: GetPerim, ChangeDimensions, Quit};
8: // Rectangle class declaration 9: class Rectangle 10: { 11: public: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: private: 27: 28: 29: }; 30: USHORT itsWidth; USHORT itsHeight; // Misc. methods void DrawShape() const; // accessors USHORT GetHeight() const { return itsHeight; } USHORT GetWidth() const { return itsWidth; } ULONG GetArea() const { return itsHeight * itsWidth; } ULONG GetPerim() const { return 2*itsHeight + 2*itsWidth; } void SetSize(USHORT newWidth, USHORT newHeight); // constructors Rectangle(USHORT width, USHORT height); ~Rectangle();
Trang 92
Trang 93
Trang 94
Trang 95
*** Menu *** (1) Draw Rectangle (2) Area (3) Perimeter (4) Resize (5) Quit 2 Area: 150
*** Menu *** (1) Draw Rectangle (2) Area (3) Perimeter (4) Resize (5) Quit 3 Perimeter: 70
Trang 96
New Width: 10 New height: 8 ********** ********** ********** ********** ********** ********** ********** **********
*** Menu *** (1) Draw Rectangle (2) Area (3) Perimeter (4) Resize (5) Quit 2 Area: 80
*** Menu *** (1) Draw Rectangle (2) Area (3) Perimeter (4) Resize (5) Quit 3 Perimeter: 36
Trang 97
Exiting...
Dng u tin to ra mt bin --howOld v khi to gi tr l 50. Dng th hai khai bo 1 con tr kiu unsigned short int v khi to l zero. PAge l mt con tr bi v du hoa th (*) sau kiu bin v trc tn bin.
Trang 98
unsigned short int * pAge = &howOld; // make pointer to howOld pAge l con tr cha a ch ca bin howOld. S dng pAge, bn c th xc nh gi tr ca bin howOld, trong trng hp ny l 50. Truy cp howOld bng cch s dng con tr pAge c gi l gin tip, bi v khng trc tip truy cp howOld bng pAge. Ngy nay, ta s xem cch s dng gin tip truy nhp vo gi tr ca bin. Gin tip ngha l truy nhp gi tr a ch c gi bi con tr. Con tr cung cp mt cch khng trc tip nhn c gi tr lu a ch .
Trang 99
Trang 100
myAge = 9 myAge: 9 *pAge: 9 Ch : *pointer: ch ra gi tr ca a ch m con tr lu gi VIII.1.3.1 Kim tra a ch . Con tr cho php bn thao tc a ch khng cn bit gi tr thc ca chng.
Trang 101
Trong dng 8, myAge v yourAge c khai bo l cc bin kiu s nguyn khng du short. Trong dng 9, pAge c khai bo l 1 con tr cho s nguyn khng du short, v c khi to vi a ch ca bin myAge . Dng 11 v 12 in gi tr v a ch ca myAge v yourAge .Dng 14 in ni dung ca pAge, m l a ch ca myAge . Dng 15 in kt qu ca "dereferencing" pAge, m in gi tr pAge-- gi tr trong myAge, hoc 5. y l bn cht ca con tr. Dng 14 ch ra pAge lu c ca myAge, v dng 15 ch ra cch nhn gi tr c lu trong myAge bng cch "dereferencing" con tr pAge. Dng 17, pAge c gn li ti im c ca yourAge. Gi tr v a ch li c in ra. u ra a ra pAge by gi c a ch ca bin yourAge v t c gi tr trong yourAge .
Trang 102
VIII.3 NEW
Bn c th nh r v tr b nh trn b nh trng (free store) trong C++ bng cch s dng t kho new . New theo sau kiu ca i tng m bn mun nh r v tr v vy trnh bin dch bit c cn bao nhiu b nh. V vy, new unsigned short int nh r 2 byte nh v new long nh r 4 byte nh. Gi tr tr v t new l mt a ch b nh. N phi c gn vo mt con tr. to ra mt unsigned short trn b nh rng, ta phi vit: unsigned short int * pPointer; pPointer = new unsigned short int; Bn c th khi to con tr nh sau: unsigned short int * pPointer = new unsigned short int; Trong mi trng hp trn, pPointer coi nh mt con tr s nguyn khng du . Ta c th vit: *pPointer = 72 ; Lnh ny c ngha, "gn gi tr 72 cho vng trn b nh rng ti cc im pPointer ".
VIII.4 Delete.
Khi bn kt thc vi khu vc ca b nh, bn phi gi "delete" thuc con tr. Delete tr v vng nh cho b nh t do. Vng nh xc nh vi new khng t ng gii phng c. khi phc li b nh b nh rng, ta s dng t kho delete. V d: delete pPointer ;
Trang 103
Trang 104
Trang 105
Output: SimpleCat Frisky... Constructor called. SimpleCat *pRags = new SimpleCat.. Constructor called. delete pRags... Destructor called. Exiting, watch Frisky go... Destructor called.
Trang 106
Trang 107
Trang 108
Trang 109
Output: theRect is 10 feet long. theRect is 5 feet long. theRect is 20 feet long. theRect is 10 feet long. Cc hm SetLength() v GetLength() s dng con tr this truy nhp cc bin thnh vin ca i tung Rectangle. Cc hm GetWidth v SetWidth khng s dng.
Trang 110
Trang 111
Output: pRect width: 5 feet pConstRect width: 5 feet pConstPtr width: 5 feet pRect width: 10 feet pConstRect width: 5 feet pConstPtr width: 10 feet
VIII.8 Tm li.
Con tr cung cp mt cch y sc mnh truy nhp d liu gin tip. Mi bin c mt a ch, m c th t c bng cch s dng ton t a ch ca (&) . a ch c th c lu trong mt con tr. Con tr c khai bo bng cch vit kiu ca i tng m chng tr ti, sau l ton t gin tip (*) v tn ca con tr. Con tr nn c khi to tr ti mt i tng hoc rng (null : 0 ). Bn c th truy nhp gi tr a ch c lu trong mt con tr bng cch s dng ton t gin tip (*). Bn c th khai bo con tr const, m khng th c gn li tr ti i tng khc, v cc con tr ti cc i tng hng (const), m khng th c dng thay i cc i tng m chng tr ti. to cc i tng mi trn b nh free, bn s dng t kho new v gn a ch tr li cho con tr. Bn gii phng b nh bng cch gi t kho delete con tr. Delete gii phng b nh, nhng n khng ph hu con tr. V vy, bn phi gn li con tr sau khi b nh c gii phng.
IX
IX.1 Reference l g ?
Reference l mt b danh; khi bn to mt reference, bn khi to n vi tn ca mt i tng khc, target. T , reference hot ng nh mt tn c chn cho target, v bt c ci g lm cho reference thc cht l lm cho target. Ta c th to ra mt reference bng cch vit kiu ca i tng target, theo sau ton t reference (&), sau l tn ca reference. Reference c th s dng bt c tn bin hp php no, nhng trong sch ny chng ta s dng tin t vi tn "r". V vy, nu bn c mt bin s nguyn tn someInt, bn c th thc hin mt reference cho bin bng cch vit nh sau: int &rSomeRef = SomeInt ;
Trang 112
Output: intOne: 5 rSomeRef: 5 intOne: 7 rSomeRef: 7 Nu khai bo mt Reference, nhng nu khng khi to n th s gp phi li bin dch. Reference phi c khi to.
Trang 113
Trang 114
26: }
8 8
Trang 115
IX.1.2
Reference.
Bt c i tng no cng c th c xt n, bao gm cc i tng c ngi s dng nh ngha. Ch rng bn to ra mt reference cho mt i tng, nhng khng phi cho 1 lp. Bn khng c vit : Int & rIntRef = int ; int howBig = 200; int & rIntRef = howBig; Trong cch tng t, bn khng nn khi to 1 reference cho mt CAT: CAT & rCatRef = CAT ; CAT frisky ; CAT & rCatRef = frisky ; Chng ta c th truy nhp vo d liu thnh vin bng cch dng ton t chm (.). // sai Bn phi khi to rCatRef cho mt i tng CAT c th : // sai Bn phi khi to rIntRef cho mt s nguyn c th , nh l:
Trang 116
33: return 0; 34: } Output: Frisky is: 5 years old. And Frisky weighs 8 pounds. IX.1.2.1 C php References. Khai bo mt reference bng cch vit kiu, sau l ton t &, sau l tn reference. Reference phi c khi to cng thi im to ra. V d: int hisAge; int &rAge = hisAge; V d: CAT boots; CAT &rCatRef = boots; IX.1.2.2 Hm swap() lm vic vi con tr.
Trang 117
Output: Main. Before swap, x: 5 y: 10 Swap. Before swap, *px: 5 *py: 10 Swap. After swap, *px: 10 *py: 5 Main. After swap, x: 10 y: 5
Trang 118
Trang 119
29: } 30: 31: short Factor(USHORT n, USHORT *pSquared, USHORT *pCubed) 32: { 33: short Value = 0; 34: 35: 36: 37: 38: if (n > 20) Value = 1; else { *pSquared = n*n;
Trang 120
Mng
Mng l mt tp cc v tr lu tr d liu, mi v tr lu tr c gi l mt thnh phn ca mng. Khai bo mng: Kiu mng tn mng ch s mng: l s phn t trong mng, bao quanh l du ngoc vung [ ]. V d : Long longarray[25] ; V d : 1: #include <iostream.h> 3: 4: int main() 5: { 6: int myArray[5]; 7: int i; 8: for ( i=0; i<5; i++) // 0-4 9: { 10: cout << "Value for myArray[" << i << "]: "; 11: cin >> myArray[i]; 12: } 13: for (i = 0; i<5; i++) 14: cout << i << ": " << myArray[i] << "\n"; 15: return 0; 16: } Output: Value for myArray[0]: 3 Trang 121 // mng ny c 25 phn t Cc phn t ca mng tnh t 0: longarray[0] , longarray[1], ... , longarray[24]
T hc C++ trong 21 ngy. Value for myArray[1]: 6 Value for myArray[2]: 9 Value for myArray[3]: 12 Value for myArray[4]: 15 0: 3 1: 6 2: 9 3: 12 4: 15 X.1 Khi to mng
C th khi to mng khi khai bo. V d: Int intArray[5] = {10, 15, 20, 25, 35} ; Nu qun kch thc ca mng, mt mng s c kch thc bng ng s phn t khi to. V d: Int intArray[ ] = { 5, 12, 15, 18, 20 }; Hm dng ly kch thc ca mng : Const USHORT IntArraylength ; IntArraylength = sizeof(IntArray)/sizeof(IntArray[0]) ; Ly kch thc ton mng chia cho kch thc mt phn t. Ch : Khng c khi to cc phn t ln hn khai bo cho mng. Tuy nhin c th khi to 2 phn t trong 5 phn t ca c mng: Int IntArray[5] = {2, 6}; Nu khng khi to cho cc phn t ca mng th cc phn t s c gn mc nh l 0. Listing 11.3. Using consts and enums in arrays.
1: // Listing 11.3 2: // Dimensioning arrays with consts and enumerations 3: 4: #include <iostream.h> 5: int main() 6: { 7: enum WeekDays { Sun, Mon, Tue, 8: Wed, Thu, Fri, Sat, DaysInWeek }; 9: int ArrayWeek[DaysInWeek] = { 10, 20, 30, 40, 50, 60, 70 }; 10: 11: cout << "The value at Tuesday is: " << ArrayWeek[Tue]; 12: return 0; 13: }
Trang 122
Mng cc i tng. Bt c i tng no , mc d c sn hoc c nh ngha, cng c th c lu trong mt mng. Vic truy nhp d liu thnh phn trong mt mng i tng, tri qua 2 bc: - Xc nh s phn t ca mng nh ch s trong ton t [ ] - Thm ton t (.) truy nhp bin thnh vin c th V d: Listing 11.4. Creating an array of objects.
1: // Listing 11.4 - An array of objects 2: 3: #include <iostream.h> 4: 5: class CAT 6: { 7: public: 8: CAT() { itsAge = 1; itsWeight=5; } 9: ~CAT() {} 10: int GetAge() const { return itsAge; } 11: int GetWeight() const { return itsWeight; } 12: void SetAge(int age) { itsAge = age; } 13: 14: private: 15: int itsAge; 16: int itsWeight; 17: }; 18: 19: int main() 20: { 21: CAT Litter[5]; 22: int i; 23: for (i = 0; i < 5; i++) 24: Litter[i].SetAge(2*i +1); 25: 26: for (i = 0; i < 5; i++) 27: { 28: cout << "Cat #" << i+1<< ": "; 29: cout << Litter[i].GetAge() << endl; 30: } 31: return 0; 32: } Output: cat #1: 1 cat #2: 3 cat #3: 5 cat #4: 7
Trang 123
X.2
Mng nhiu chiu l c t hai chiu tr ln. Mi chiu c xc nh bng mt du ngoc vung: Int Mang [5] [3] ; Khi to: Th t xc nh l: 3 phn t u tin thuc Mang[0], 3 phn t tip theo l thuc Mang[1] , v tip tc ... Ta c th vit : Int Mang[5][3] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15 } ; r dng, nn vit nh sau: Int Mang[5][3] = { {1, 2, 3}, {4, 5, 6}, {7, 8, 9}, {10, 11, 12}, {13, 14, 15} } ;
X.2.1 Mng con tr.
Trang 124
C th a ton b mng ln Free Store, thc hin bng cch gi t kho new v s dng ton t ch s. Kt qu l mt con tr tr ti mt vng trn free store m cha mng . Vd: Cat *Family = new Cat[500]; Khai bo Family l mt con tr tr ti phn t u tin trong mng 500 Cat. Ni cch khc Family ch ti -- hoc c a ch ca -- Family[0]. u im ca vic s dng Family theo cch ny l bn c th s dng con tr s hc truy cp ti mi thnh vin ca Family. V d:
CAT *Family = new CAT[500]; CAT *pCat = Family; //pCat points to Family[0] pCat->SetAge(10); // set Family[0] to 10 pCat++; // advance to Family[1] pCat->SetAge(20); // set Family[1] to 20
X.2.3
V d : C 3 khai bo. 1: Cat Fone[500] ; 2: Cat *Ftwo[500] ; 3: Cat *Fthree = new Cat[500] ; FOne l mt mng 500 Cat. Trang 125
T hc C++ trong 21 ngy. Ftwo l mt mng 500 con tr tr ti cc Cat. Fthree l mt con tr tr ti mt mng 500 Cat. Trong khai bo th ba, Fthree l mt bin ca Fone. X.3 Tn con tr v mng
Trong C++, tn mng l mt con tr hng tr ti phn t u tin ca mng. V vy, trong khai bo: Cat Family[50] ; Family l mt con tr tr ti a ch &Family[0]: a ch ca phn t u tin ca mng Family. Ta c th vit : Family + 4 truy nhp n d liu ca Family[4]. X.4 Mng k t (CHAR).
Trong C++, mt chui (String) l mt mng cc k t, kt thc l mt k t null. Ta c th khai bo v khi to mt mng k t nh cc mng thng thng nh sau: Char Greeting[ ] = { 'H', 'e', 'l', 'l', 'o', ' ' W', 'o', 'r', 'l', 'd', '\0' }; '\0' l k t null, trong nhiu hm C++ chp nhn nh l du kt thc chui. gim s phc tp v c th gy ra li, C++ cho php vit nh sau: char Greeting[ ] = "Hello World" ; // Vi cch ny khng cn c k t null ('\0') Chui Hello World chim 12 byte. Hello chim 5 byte, space 1 byte, World 5 byte v null chim 1 byte. Listing 11.8. Filling an array.
1: //Listing 11.8 char array buffers 2: 3: #include <iostream.h> 4: 5: int main() 6: { 7: char buffer[80]; 8: cout << "Enter the string: "; 9: cin >> buffer; 10: cout << "Here's the buffer: " << buffer << endl; 11: return 0; 12: } Output: Enter the string: Hello World Here's the buffer: Hello
Trang 126
T hc C++ trong 21 ngy. C hai kh nng li vi chng trnh ny: - Th 1: Nu user a vo hn 79 k t (mt k t l ca null), cin vit vo vt qu im kt thc ca mng buffer . - Th 2: Nu user nhp vo 1 space, cin cho rng l kt thc chui, v dng vic ghi vo buffer. gii quyt iu ny, phi gi mt phng thc c bit vi cin: get().cin.get() c 3 tham s: - in y buffer - S k t ti a nhn vo. - nh ra ranh gii kt thc nhp vo. Ranh gii mc nh l newline. Listing 11.9. Filling an array.
1: //Listing 11.9 using cin.get() 2: 3: #include <iostream.h> 4: 5: int main() 6: { 7: char buffer[80]; 8: cout << "Enter the string: "; 9: cin.get(buffer, 79); // get up to 79 or newline 10: cout << "Here's the buffer: " << buffer << endl; 11: return 0; 12: } Output: Enter the string: Hello World Here's the buffer: Hello World
X.5
Hm Strcpy( ) v Strncpy( ).
C++ tha hng t C mt s hm , trong c hai hm ny. Listing 11.10. Using strcpy().
1: 2: 3: 4: 5: 6: 7: 8: 9: #include <iostream.h> #include <string.h> int main() { char String1[] = "No man is an island"; char String2[80]; strcpy(String2,String1);
Trang 127
Hm Strcpy( ) c hai tham s l chui ch v sau l chui ngun, nu chui ngun ln hn chui ch, Strcpy( ) s ghi ln phn cui ca buffer. chng li iu ny, s dng hm Strncpy( ). Hm ny s copy n k t, n s copy ti k t null u tin hoc ti s k t ti a c ch r trong chui ch. Listing 11.11. Using strncpy().
1: #include <iostream.h> 2: #include <string.h> 3: int main() 4: { 5: const int MaxLength = 80; 6: char String1[] = "No man is an island"; 7: char String2[MaxLength+1]; 8: 9: 10: strncpy(String2,String1,MaxLength); 11: 12: cout << "String1: " << String1 << endl; 13: cout << "String2: " << String2 << endl; 14: return 0; 15: } Output: String1: No man is an island String2: No man is an island
X.6
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15:
String Classes
//Listing 11.12 #include <iostream.h> #include <string.h> // Rudimentary string class class String { public: // constructors String(); String(const char *const); String(const String &); ~String();
Trang 128
// private constructor
// default constructor creates string of 0 bytes String::String() { itsString = new char[1]; itsString[0] = `\0'; itsLen=0; } // private (helper) constructor, used only by // class methods for creating a new string of // required size. Null filled. String::String(unsigned short len) { itsString = new char[len+1]; for (unsigned short i = 0; i<=len; i++) itsString[i] = `\0'; itsLen=len; } // Converts a character array to a String String::String(const char * const cString) { itsLen = strlen(cString); itsString = new char[itsLen+1]; for (unsigned short i = 0; i<itsLen; i++) itsString[i] = cString[i]; itsString[itsLen]='\0'; } // copy constructor String::String (const String & rhs) { itsLen=rhs.GetLen(); itsString = new char[itsLen+1]; for (unsigned short i = 0; i<itsLen;i++)
Trang 129
Trang 130
Trang 131
T dng 7-- 31 khai bo lp mt string n gin. Cc dng 11--13 c 3 hm constructor : constructor mc nh, constructor copy, constructor ly k t kt thc chui null.
Trang 132