You are on page 1of 79

Updatesofts.

com

Ebooks Team

C++ Cn bn v nng cao


Mc lc: I. C bn v C++ (2) I. Cu trc ca mt trng trnh C++ (2) II. Cc bin kiu v hng s (5) III. Cc ton t (13) IV. Giao tip vi Console (19) II. Cc cu trc iu khin v Hm (22) I. Cu trc d liu iu khin (22) II. Hm I (29) III. Hm II (34) III. D liu nng cao (41) I. Mng (41) II. Su k t (48) III. Con tr (54) IV. B nh ng (65) V. Cc cu trc (69) VI. Cc kiu d liu do ngi dng nh ngha. (typedef, union, enum) (75)

Trang 1

Updatesofts.com

Ebooks Team

Cu trc ca mt chng trnh C++

C l mt trong nhng cch tt nht bt u hc mt ngn ng lp trnh l bng mt chng trnh. Vy y l chng trnh u tin ca chng ta :
// my first program in C++ #include <iostream.h> int main () { cout << "Hello World!"; return 0; } Hello World!

Chng trnh trn y l chng trnh u tin m hu ht nhng ngi hc ngh lp trnh vit u tin v kt qu ca n l vit cu "Hello, World" ln mn hnh. y l mt trong nhng chng trnh n gin nht c th vit bng C++ nhng n bao gm nhng phn c bn m mi chng trnh C++ c. Hy cng xem xt tng dng mt :
// my first program in C++

y l dng ch thch. Tt c cc dng bt u bng hai du s (//) c coi l cht thch m chng khng c bt k mt nh hng no n hot ng ca chng trnh. Chng c th c cc lp trnh vin dng gii thch hay bnh phm bn trong m ngun ca chng trnh. Trong trng hp ny, dng ch thch l mt gii thch ngn gn nhng g m chng trnh chng ta lm.
#include <iostream.h>

Cc cu bt u bng du (#) c dng cho preprocessor (ai dch h ti t ny vi). Chng khng phi l nhng dng m thc hin nhng c dng bo hiu cho trnh dch. y cu lnh #include <iostream.h> bo cho trnh dch bit cn phi "include" th vin iostream. y l mt th vin vo ra c bn trong C++ v n phi c "include" v n s c dng trong chng trnh. y l cch c in s dng th vin iostream
int main ()

Dng ny tng ng vi phn bt u khai bo hm main. Hm main l im m tt c cc chng trnh C++ bt u thc hin. N khng ph thuc vo v tr ca hm ny ( u, cui hay gia ca m ngun) m ni dung ca n lun c thc hin u tin khi chng trnh bt u. Thm vo , do nguyn nhn ni trn, mi chng trnh C++ u phi tn ti mt hm main. Theo sau main l mt cp ngoc n bi v n l mt hm. Trong C++, tt c cc hm m sau l mt cp ngoc n () th c ngha l n c th c hoc khng c tham s
Trang 2

Updatesofts.com

Ebooks Team

(khng bt buc). Ni dung ca hm main tip ngay sau phn khai bo chnh thc c bao trong cc ngoc nhn ( { } ) nh trong v d ca chng ta
cout << "Hello World";

Dng lnh ny lm vic quan trng nht ca chng trnh. cout l mt dng (stream) output chun trong C++ c nh ngha trong th vin iostream v nhng g m dng lnh ny lm l gi chui k t "Hello World" ra mn hnh. Ch rng dng ny kt thc bng du chm phy ( ; ). K t ny c dng kt thc mt lnh v bt buc phi c sau mi lnh trong chng trnh C++ ca bn (mt trong nhng li ph bin nht ca nhng lp trnh vin C++ l qun mt du chm phy).
return 0;

Lnh return kt thc hm main v tr v m i sau n, trong trng hp ny l 0. y l mt kt thc bnh thng ca mt chng trnh khng c mt li no trong qu trnh thc hin. Nh bn s thy trong cc v d tip theo, y l mt cch ph bin nht kt thc mt chng trnh C++. Chng trnh c cu trc thnh nhng dng khc nhau n tr nn d c hn nhng hon ton khng phi bt buc phi lm vy. V d, thay v vit
int main () { cout << " Hello World "; return 0; }

ta c th vit
int main () { cout << " Hello World "; return 0; }

cng cho mt kt qu chnh xc nh nhau. Trong C++, cc dng lnh c phn cch bng du chm phy ( ;). Vic chia chng trnh thnh cc dng ch nhm cho n d c hn m thi.

Cc ch thch.
Cc ch thch c cc lp trnh vin s dng ghi ch hay m t trong cc phn ca chng trnh. Trong C++ c hai cch ch thch
// Ch thch theo dng /* Ch thch theo khi */

Ch thch theo dng bt u t cp du x (//) cho n cui dng. Ch thch theo khi bt u bng /* v kt thc bng */ v c th bao gm nhiu dng. Chng ta s thm cc ch thch cho chng trnh :
/* my second program in C++ Hello World! I'm a C++ program

Trang 3

Updatesofts.com

Ebooks Team

with more comments */ #include <iostream.h> int main () { cout << "Hello World! "; // says Hello World! cout << "I'm a C++ program"; // says I'm a C++ program return 0; }

Nu bn vit cc ch thch trong chng trnh m khng s dng cc du //, /* hay */, trnh dch s coi chng nh l cc lnh C++ v s hin th cc li.

Trang 4

Updatesofts.com

Ebooks Team

Cc bin, kiu v hng s


Identifiers
Mt tn (indentifiers) hp l l mt chui gm cc ch ci, ch s hoc k t gch di. Chiu di ca mt tn l khng gii hn. K t trng, cc k t nh du u khng th c mt trong mt tn. Ch c ch ci, ch s v k t gch di l c cho php. Thm vo , mt tn bin lun phi bt u bng mt ch ci. Chng cng c th bt u bng k t gch di ( _ ) nhng k t ny thng c dnh cho cc lin kt bn ngoi (external link). Khng bao gi chng bt u bng mt ch s. Mt lut na m bn phi quan tm n khi to ra cc tn ca ring mnh l chng khng c trng vi bt k t kho no ca ngn ng hay ca trnh dch, v d cc tn sau y lun lun c coi l t kho theo chun ANSI-C++ v do vy chng khng th c dng t tn
asm, car, bool, break, marry, catch, to char, class, const, const_cast, continue, default, delete, do, double, dynamic_cast, else, enum, explicit, extern, false, float, for, friend, goto, if, inline, int, long, mutable, namespace, new, operator, private, protected, public, to register, reinterpret_cast, return, short, signed, sizeof, static, static_cast, struct, switch, template, this, throw, true, try, typedef, typeid, typename, union, unsigned, using, virtual, void, volatile, wchar_t

Thm vo , mt s biu din khc ca cc ton t (operator) cng khng c dng lm tn v chng l nhng t c dnh ring trong mt s trng hp.
and, and_eq, bitand, bitor, compl, not, not_eq, or, or_eq, xor, xor_eq

Trnh dch ca bn c th thm mt t dnh ring c trng khc. V d, rt nhiu trnh dch 16 bit (nh cc trnh dch cho DOS) cn c th cc t kho far, huge v near. Ch : Ngn ng C++ l "case sensitive" c ngha l phn bit ch hoa ch thng. Do vy bin RESULT khc vi result cng nh Result.

Cc kiu d liu
Khi lp trnh, chng ta lu tr cc bin trong b nh ca my tnh nhng my tnh phi bit chng ta mun lu tr g trong chng v cc kiu d liu khc nhau s cn lng b nh khc nhau.

Trang 5

Updatesofts.com

Ebooks Team

B nh ca my tnh chng ta c t chc thnh cc byte. Mt byte l lng b nh nh nht m chng ta c th qun l. Mt byte c th dng lu tr mt loi d liu nh nh l kiu s nguyn t 0 n 255 hay mt k t. Nhng my tnh c th x l cc kiu d liu phc tp hn bng cch gp nhiu byte li vi nhau, nh s nguyn di hay s thp phn. Tip theo bn s c mt danh sch cc kiu d liu c bn trong C++ cng nh min gi tr m chng c th biu din Tn char short long S byte 1 2 4 M t K t hay kiu s nguyn 8-bit kiu s nguyn 16-bit kiu s nguyn 32-bit S nguyn. di ca n ph thuc vo h thng, nh trong MS-DOS n l 16-bit, trn Windows 9x/2000/NT l 32 bit... Dng du phy ng Dng du phy ng vi chnh xc gp i Dng du phy ng vi chnh xc hn n a Gi tr logic. N mi c thm vo chun ANSI-C++. Bi vy khng phi tt c cc trnh dch u h tr n. Min gi tr c du: -128 to 127 khng du: 0 to 255 c du: -32763 to 32762 khng du: 0 to 65535 c du:-2147483648 to 2147483647 khng du: 0 to 4294967295 Xem short, long 3.4e + / - 38 (7 digits) 1.7e + / - 308 (15 digits) 1.2e + / - 4932 (19 digits)
true

int float

* 4

double 8 long 10 double bool 1

hoc false

Ngoi cc kiu d liu c bn ni trn cn tn ti cc con tr v cc tham s khng kiu (void) m chng ta s xem xt sau.

Khai bo mt bin
c th s dng mt bin trong C++, u tin chng ta phi khai bo n, ghi r n l kiu d liu no. Chng ta ch cn vit tn kiu (nh int, short, float...) tip theo sau l mt tn bin hp l. V d
int a; float mynumber;

Dng u tin khai bo mt bin kiu int vi tn l a. Dng th hai khai bo mt bin kiu float vi tn mynumber. Sau khi c khai bo, cc bin trn c th c dng trong phm vi ca chng trong chng trnh.

Trang 6

Updatesofts.com

Ebooks Team

Nu bn mun khai bo mt vi bin c cng mt kiu v bn mun tit kim cng sc vit bn c th khai bo chng trn mt dng, ngn cch cc tn bng du phy. V d
int a, b, c;

khai bo ba bin kiu int (a,b v c) v hon ton tng ng vi :


int a; int b; int c;

Cc kiu s nguyn (char, short, long and int) c th l s c du hay khng du tu theo min gi tr m chng ta cn biu din. V vy khi xc nh mt kiu s nguyn chng ta t t kho signed hoc unsigned trc tn kiu d liu. V d:
unsigned short NumberOfSons; signed int MyAccountBalance;

Nu ta khng ch r signed or unsigned n s c coi l c du, v vy trong khai bo th hai chng ta c th vit :
int MyAccountBalance

cng hon ton tng ng vi dng khai bo trn. Trong thc t, rt t khi ngi ta dng n t kho signed. Ngoi l duy nht ca lut ny kiu char. Trong chun ANSIC++ n l kiu d liu khc vi signed char v unsigned char. c th thy r hn vic khai bo trong chng trnh, chng ta s xem xt mt on m C++ v d nh sau:
// operating with variables #include <iostream.h> int main () { // declaring variables: int a, b; int result; // process: a = 5; b = 2; a = a + 1; result = a - b; // print out the result: cout << result; // terminate the program: 4

Trang 7

Updatesofts.com

Ebooks Team

return 0; }

ng lo lng nu nh vic khai bo c v hi l lng vi bn. Bn s thy phn chi tit cn li trong phn tip theo

Khi to cc bin
Khi khai bo mt bin, gi tr ca n mc nhin l khng xc nh. Nhng c th bn s mun n mang mt gi tr xc nh khi c khai bo. lm iu , bn ch cn vit du bng v gi tr bn mun bin s mang:
type identifier = initial_value ;

V d, nu chng ta mun khai bo mt bin int l a cha gi tr 0 ngay t khi khi to, chng ta s vit :
int a = 0;

B xung vo cch khi to kiu C ny, C++ cn c thm mt cch mi khi to bin bng cch bc mt cp ngoc n sau gi tr khi to. V d :
int a (0);

C hai cch u hp l trong C++.

Phm vi hot ng ca cc bin


Tt c cc bin m chng ta s s dng u phi c khai bo trc. Mt im khc bit gia Cv C++ l trong C++ chng ta c th khai bo bin bt k ni no trong chng trnh, thm ch l ngay gia cc lnh thc hin ch khng ch l u khi lnh nh trong C. Mc d vy chng ta vn nn theo cch ca ngn ng C khi khai bo cc bin bi v n s rt hu dng khi cn sa cha mt chng trnh c tt c cc phn khai bo c gp li vi nhau. Bi vy, cch thng dng nht khai bo bin l t n trong phn bt u ca mi hm (bin cc b) hay trc tip trong thn chng trnh, ngoi tt c cc hm (bin ton cc). Global variables (bin ton cc) c th c s dng bt k u trong chng trnh, ngay sau khi n c khai bo. Tm hot ng ca local variables (bin cc b) b gii hn trong phn m m n c khai bo. Nu chng c khai bo u mt hm (nh hm main), tm hot ng s l ton b hm main. iu c ngha l trong v d trn, cc bin c khai bo trong

Trang 8

Updatesofts.com

Ebooks Team

hm main() ch c th c dng trong hm , khng c dng bt k u khc. Thm vo cc bin ton cc v cc b, cn c cc bin ngoi (external). Cc bin ny khng nhng c dng trong mt file m ngun m cn trong tt c cc file c lin kt trong chng trnh. Trong C++ tm hot ng ca mt bin chnh l khi lnh m n c khai bo (mt khi lnh l mt tp hp cc lnh c gp li trong mt bng cc ngoc nhn { } ). Nu n c khai bo trong mt hm tm hot ng s l hm , cn nu c khai bo trong vng lp th tm hot ng s ch l vng lp ....

Cc hng s
Mt hng s l bt k mt biu thc no mang mt gi tr c nh, nh: Cc s nguyn
1776 707 -273

chng l cc hng mang gi tr s. Ch rng khi biu din mt hng kiu s chng ta khng cn vit du ngoc kp hay bt k du hiu no khc. Thm vo nhng s h c s 10 ( ci m tt c chng ta u bit) C++ cn cho php s dng cc hng s c s 8 v 16. biu din mt s h c s 8 chng ta t trc n k t 0, biu din s h c s 16 chng ta t trc n hai k t 0x. V d:
75 0113 0x4b // C s 10 // c s 8 // c s 16

Cc s thp phn (dng du phy ng) Chng biu din cc s vi phn thp phn v/hoc s m. Chng c th bao gm phn thp phn, k t e (biu din 10 m...).
3.14159 // 3.14159 6.02e23 // 6.02 x 1023 1.6e-19 // 1.6 x 10-19 3.0 // 3.0

K t v xu k t Trong C++ cn tn ti cc hng khng phi kiu s nh:


'z' 'p' "Hello world" "How do you do?"

Trang 9

Updatesofts.com

Ebooks Team

Hai biu thc u tin biu din cc k t n, cc k t c t trong du nhy n ('), hai biu thc tip theo biu thc cc xu k t c t trong du nhy kp ("). Khi vit cc k t n hay cc xu k t cn phi chng trong cc du nhy phn bit vi cc tn bin hay cc t kho. Ch :
x 'x'

x tr n bin x trong khi 'x' l k t hng 'x'. Cc k t n v cc xu k t c mt tnh cht ring bit l cc m iu khin. Chng l nhng k t c bit m khng th c vit bt k u khc trong chng trnh nh l m xung dng (\n) hay tab (\t). Tt c u bt u bng du x ngc (\). Sau y l danh sch cc m iu khin :
\n \r \t \v \b \f \a \' \" \ \\

xung dng li v u dng k t tab cn thng theo chiu dc backspace sang trang Ku bp du nhy n du nhy kp du hi k t x ngc

V d:
'\n' '\t' "Left \t Right" "one\ntwo\nthree"

Thm vo , biu din mt m ASCII bn cn s dng k t x ngc (\) tip theo l m ASCII vit trong h c s 8 hay c s 16. Trong trng hp u m ASCII c vit ngay sau du s ngc, trong trng hp th hai, s dng s trong h c s 16 bn cn vit k t x trc s (v d \x20 hay \x4A). Cc hng chui k t c th c vit trn nhiu dng nu mi dng c kt thc bng mt du s ngc (\):

Trang 10

Updatesofts.com

Ebooks Team

"string expressed in \ two lines"

Bn c th ni mt vi hng xu k t ngn cch bng mt hay vi du trng, k t tab, xung dng hay bt k k t trng no khc.
"we form" "a unique" "string" "of characters"

nh ngha cc hng (#define)


Bn c th nh ngha cc hng vi tn m bn mun c th s dng thng xuyn m khng mt ti nguyn cho cc bin bng cch s dng ch th #define. y l dng ca n:
#define identifier value

V d:
#define PI 3.14159265 #define NEWLINE '\n' #define WIDTH 100

chng nh ngha ba hng s mi. Sau khi khai bo bn c th s dng chng nh bt k cc hng s no khc, v d
circle = 2 * PI * r; cout << NEWLINE;

Trong thc t vic duy nht m trnh dch lm khi n tm thy mt ch th #define l thay th cc tn hng ti bt k ch no chng xut hin (nh trong v d trc, PI, NEWLINE hay WIDTH) bng gi tr m chng c nh ngha. V vy cc hng s #define c coi l cc hng s macro Ch th #define khng phi l mt lnh thc thi, n l ch th tin x l (preprocessor), l l do trnh dch coi c dng l mt ch th v dng khng cn kt thc bng du chm phy. Nu bn thm du chm phy vo cui dng, n s c coi l mt phn ca gi tr nh ngha hng.

Khai bo cc hng (const)


Vi tin t const bn c th khai bo cc hng vi mt kiu xc nh nh l bn lm vi mt bin
const int width = 100; const to char tab = '\t'; const zip = 12440;

Trang 11

Updatesofts.com

Ebooks Team

Trong trng hp kiu khng c ch r (nh trong v d cui) trnh dch s coi n l kiu int

Trang 12

Updatesofts.com

Ebooks Team

Cc ton t
Qua bi trc chng ta bit n s tn ti ca cc bin v cc hng. Trong C++, thao tc vi chng ta s dng cc ton t, l cc t kho v cc du khng c trong bng ch ci nhng li c trn hu ht cc bn phm trn th gii. Hiu bit v chng l rt quan trng v y l mt trong nhng thnh phn c bn ca ngn ng C++.
Ton t gn (=). Ton t gn dng gn mt gi tr no cho mt bin a = 5; gn gi tr nguyn 5 cho bin a. V tri bt buc phi l mt bin cn v phi c th l bt k hng, bin hay kt qu ca mt biu thc.

Cn phi nhn mnh rng ton t gn lun c thc hin t tri sang phi v khng bao gi o ngc
a = b; gn gi tr ca bin a bng gi tr ang cha trong bin b. Ch rng chng ta ch gn gi tr ca b cho a v s thay i ca b sau s khng nh hng n gi tr ca a.

Mt thuc tnh ca ton t gn trong C++ gp phn gip n vt ln cc ngn ng lp trnh khc l vic cho php v phi c th cha cc php gn khc. V d:
a = 2 + (b = 5); tng ng vi b = 5; a = 2 + b;

V vy biu thc sau cng hp l trong C++


a = b = c = 5; gn gi tr 5 cho c ba bin a, b v c Cc ton t s hc ( +, -, *, /, % ) Nm ton t s hc c h tr bi ngn ng l: + cng - tr * nhn / chia

Trang 13

Updatesofts.com

Ebooks Team

% ly phn d (trong php chia)

Th t thc hin cc ton t ny cng ging nh chng c thc hin trong ton hc. iu duy nht c v hi l i vi bn l php ly phn d, k hiu bng du phn trm (%). y chnh l php ton ly phn d trong php chia hai s nguyn vi nhau. V d, nu a = 11 % 3;, bin a s mang gi tr 2 v 11 = 3*3 +2.
Cc ton t gn phc hp (+=, -=, *=, /=, %=, >>=, <<=, &=, ^=, |=) Mt c tnh ca ngn ng C++ lm cho n ni ting l mt ngn ng sc tch chnh l cc ton t gn phc hp cho php chnh sa gi tr ca mt bin vi mt trong nhng ton t c bn sau: value += increase; tng ng vi value = value + increase; a -= 5; tng ng vi a = a - 5; a /= b; tng ng vi a = a / b; price *= units + 1; tng ng vi price = price * (units + 1); v tng t cho tt c cc ton t khc. Tng v gim. Mt v d khc ca vic tit kim khi vit m lnh l ton t tng (++) v gim (--). Chng tng hoc gim gi tr cha trong mt bin i 1. Chng tng ng vi +=1 hoc -=1. V vy, cc dng sau l tng ng: a++; a+=1; a=a+1;

Mt tnh cht ca ton t ny l n c th l tin t hoc hu t, c ngha l c th vit trc tn bin (++a) hoc sau (a++) v mc d trong hai biu thc rt n gin n c cng ngha nhng trong cc thao tc khc khi m kt qu ca vic tng hay gim c s dng trong mt biu thc th chng c th c mt khc bit quan trng v ngha: Trong trng hp ton t c s dng nh l mt tin t (++a) gi tr c tng trc khi biu thc c tnh v gi tr tng c s dng trong biu thc; trong trng hp ngc li (a++) gi tr trong bin a c tng sau khi tnh ton. Hy ch s khc bit :
V d 1 V d 2

B=3; B=3; A=++B; A=B++; // A is 4, B is 4 // A is 3, B is 4 Cc ton t quan h ( ==, !=, >, <, >=, <= ) c th so snh hai biu thc vi nhau chng ta c th s dng cc ton t quan h. Theo chun ANSI-C++ th gi tr ca thao tc quan h ch c th l gi tr logic - chng ch c th c gi tr true hoc false, tu theo biu thc kt qu l ng hay sai.

Trang 14

Updatesofts.com

Ebooks Team

Sau y l cc ton t quan h bn c th s dng trong C++ == Bng != Khc > Ln hn Nh hn > = Ln hn hoc bng < = Nh hn hoc bng <

V d:
(7 == 5) s tr gi tr false (6 >= 6) s tr gi tr true tt nhin thay v s dng cc s, chng ta c th s dng bt c biu thc no. Cho a=2, b=3 v c=6 (a*b >= c) s tr gi tr true. (b+4 < a*c) s tr gi tr false Cn ch rng = (mt du bng) lf hon ton khc vi == (hai du bng). Du u tin l mt ton t gn ( gn gi tr ca biu thc bn phi cho bin bn tri) v du cn li (==) l mt ton t quan h nhm so snh xem hai biu thc c bng nhau hay khng. Trong nhiu trnh dch c trc chun ANSI-C++ cng nh trong ngn ng C, cc ton t quan h khng tr v gi tr logic true hoc false m tr v gi tr int vi 0 tng ng vi false cn gi tr khc 0 (thng l 1) th tng ng vi true. Cc ton t logic ( !, &&, || ). Ton t ! tng ng vi ton t logic NOT, n ch c mt i s pha bn phi v vic duy nht m n lm l i ngc gi tr ca i s t true sang false hoc ngc li. V d: !(5 == 5) tr v false v biu thc bn phi (5 == 5) c gi trtrue. !(6 <= 4) tr v true v (6 <= 4)c gi tr false. !true !false tr v false. tr v true.

Ton t logic && v || c s dng khi tnh ton hai biu thc ly ra mt kt qu duy nht. Chng tng ng vi cc ton t logic AND v OR. Kt qu ca chng ph thuc vo mi quan h ca hai i s: i s th nht i s th hai Kt qu Kt qu a && b a || b a b true true false false V d: true false true false true false false false true true true false

Trang 15

Updatesofts.com

Ebooks Team

( (5 == 5) && (3 > 6) ) tr v false ( true && false ). ( (5 == 5) || (3 > 6)) tr v true ( true || false ). Ton t iu kin ( ? ). Ton t iu kin tnh ton mt biu thc v tr v mt gi tr khc tu thuc vo biu thc l ng hay sai. Cu trc ca n nh sau: condition ? result1 : result2 Nu condition l true th gi tr tr v s l result1, nu khng gi tr tr v l result2. 7==5 ? 4 : 3 tr v 3 v 7 khng bng 5. 7==5+2 ? 4 : 3 tr v 4 v 7 bng 5+2. 5>3 ? a : b tr v a, v 5 ln hn 3. a>b ? a : b tr v gi tr ln hn, a hoc b.

Cc ton t thao tc bit ( &, |, ^, ~, <<, >> ). Cc ton t thao tc bit thay i cc bit biu din mt bin, c ngha l thay i biu din nh phn ca chng ton t asm M t & | ^ ~ << >> AND Logical AND OR Logical OR XOR Logical exclusive OR NOT o ngc bit SHL Dch bit sang tri SHR Dch bit sang phi

Cc ton t chuyn i kiu Cc ton t chuyn i kiu cho php bn chuyn i d liu t kiu ny sang kiu khc. C vi cch lm vic ny trong C++, cch c bn nht c tha k t ngn ng C l t trc biu thc cn chuyn i tn kiu d liu c bc trong cp ngoc n (), v d: int i; float f = 3.14; i = (int) f; on m trn chuyn s thp phn 3.14 sang mt s nguyn (3). y, ton t chuyn i kiu l (int). Mt cch khc lm iu ny trong C++ l s dng cc constructors ( mt s sch thut ng ny c dch l cu t nhng ti thy n c v khng xui tai lm) thay v dng cc ton t : t trc biu thc cn chuyn i kiu tn kiu mi v bao bc biu thc gia mt cp ngoc n. i = int ( f );

Trang 16

Updatesofts.com

Ebooks Team

C hai cch chuyn i kiu u hp l trong C++. Thm vo ANSI-C++ cn c nhng ton t chuyn i kiu mi c trng cho lp trnh hng i tng. sizeof() Ton t ny c mt tham s, c th l mt kiu d liu hay l mt bin v tr v kch c bng byte ca kiu hay i tng . a = sizeof (char); a s mang gi tr 1 v kiu char lun c kch c 1 byte trn mi h thng. Gi tr tr v ca sizeof l mt hng s v vy n lun lun c tnh trc khi chng trnh thc hin. Cc ton t khc Trong C++ cn c mt s cc ton t khc, nh cc ton t lin quan n con tr hay lp trnh hng i tng. Chng s c ni n c th trong cc phn tng ng.

Th t u tin ca cc ton t
Khi vit cc biu thc phc tp vi nhiu ton hng cc bn c th t hi ton hng no c tnh trc, ton hng no c tnh sau. V d nh trong biu thc sau: a = 5 + 7 % 2 c th c hai cch hiu sau: a = 5 + (7 % 2) a = (5 + 7) % 2

vi kt qu l 6, hoc vi kt qu l 0

Cu tr li ng l biu thc u tin. V nguyn nhn ni trn, ngn ng C++ thit lp mt th t u tin gia cc ton t, khng ch ring cc ton t s hc m tt c cc ton t c th xut hin trong C++. Th t u tin ca chng c lit k trong bng sau theo th t t cao xung thp. Th t 1 2 Ton t :: () [ ] -> . sizeof ++ -~ 3 ! &* (type) +4 */% tng/gim o ngc bit NOT Ton t con tr Chuyn i kiu Dng hoc m Ton t s hc Tri Phi M t scope Associativity Tri Tri

Trang 17

Updatesofts.com

Ebooks Team

5 6 7 8 9 10 11 12 13

+<< >> < <= > >= == != &^| && || ?: = += -= *= /= %= >>= <<= &= ^= |= ,

Ton t s hc Dch bit Ton t quan h Ton t quan h Ton t thao tc bit Ton t logic

Tri Tri Tri Tri Tri Tri

Ton t iu kin Phi Ton t gn Du phy Phi Tri

Associativity nh ngha trong trng hp c mt vi ton t c cng th t u tin th ci no s c tnh trc, ton t pha xa nht bn phi hay l xa nht bn tri. Nu bn mun vit mt biu thc phc tp m li khng chc lm v th t u tin ca cc ton t th nn s dng cc ngoc n. Cc bn nn thc hin iu ny v n s gip chng trnh d c hn.

Trang 18

Updatesofts.com

Ebooks Team

Giao tip vi console.


Console l giao din c bn ca my tnh. Bn phm l thit b vo c bn cn mn hnh l thit b ra c bn. Trong th vin iostream ca C++, cc thao tc vo ra c bn ca mt chng trnh c h tr bi hai dng d liu : cin nhp d liu v cout xut. Thm vo , cn c cerr v clog l hai dng d liu dng hin th cc thng bo li trn thit b ra chun (thng l mn hnh) hoc ra mt file. Thng thng cout c gn vi mn hnh cn cin c gn vi bn phm. S dng hai dng d liu ny bn s c th giao tip vi ngi s dng v bn c th hin th cc thng bo ln mn hnh cng nh nhn d liu t bn phm.

Xut d liu (cout)


Dng cout c s dng vi ton t qu ti << (overloaded - bn s hiu r hn v thut ng ny trong phn lp trnh hng i tng)
cout << "Output sentence"; // Hin th Output sentence ln mn hnh cout << 120; // Hin th s 120 ln mn hnh cout << x; // Hin th ni dung bin x ln mn hnh

Ton t << c gi l ton t chn v n chn d liu i sau n vo dng d liu ng trc. Trong v d trn n chn chui "Output sentence", hng s 120 v bin x vo dng d liu ra cout.Ch rng dng u tin chng ta s dng du ngoc kp v l mt chui k t. Khi chng ta mun s dng cc hng xu k t ta phi t chng trong cp du ngoc kp chng c th c phn bit vi cc bin. V d, hai lnh sau y l hon ton khc nhau:
cout << "Hello"; cout << Hello; // Hin th Hello ln mn hnh // Hin th ni dung ca bin Hello ln mn hnh

Ton t chn (<<) c th c s dng nhiu ln trong mt cu lnh: Cu ln mn hnh. S tin li ca vic s dng lp li ton t chn (<<) th hin r khi chng ta mun hin th nhiu bin v hng hn l ch mt bin: Cn cu lnh sau :
cout << "Hello, I am " << age << " years old and my email address is " << email_add; phi nhn mnh rng cout khng nhy xung dng sau khi xut d liu, v vy hai cout << "Hello, " << "I am " << "a C++ sentence"; lnh trn s in thng bo Hello, I am a C++ sentence

cout << "This is a sentence."; cout << "This is another sentence.";

s c hin th trn mn hnh:


This is a sentence.This is another sentence.

Bi vy khi mun xung dng chng ta phi s dng k t xung dng, trong C++ l \n:

Trang 19

Updatesofts.com

Ebooks Team

cout << "First sentence.\n "; cout << "Second sentence.\nThird sentence.";

s vit ra mn hnh nh sau:


First sentence. Second sentence. Third sentence.

Thm vo , xung dng bn c th s dng tham s endl. V d


cout << "First sentence." << endl; cout << "Second sentence." << endl;

s in ra mn hnh:
First sentence. Second sentence.

Tham s endl c mt tc dng c bit khi n c dng vi cc dng d liu s dng b m: cc b m s c flushed ( chuyn ton b thng tin t b m ra dng d liu). Tuy nhin, theo mc nh cout khng s dng b m.

Nhp d liu (cin).


Thao tc vo chun trong C++ c thc hin bng cch s dng ton t qu ti >> vi dng cin. Theo sau ton t ny l bin s lu tr d liu c c vo. V d:
int age; cin >> age;

khai bo bin age c kiu int v i nhp d liu t cin (bn phm) lu tr n trong bin kiu nguyn ny.
cin

ch bt u s l d liu nhp t bn phm sau khi phm Enter c g. V vy d bn ch nhp mt k t th cin vn s kin nhn ch cho n khi bn g phm Enter.
Please enter an integer value: 702 The value you entered is 702 and its double is 1404.

// i/o example #include <iostream.h> int main () { int i; cout << "Please enter an integer value: "; cin >> i; cout << "The value you entered is " << i; cout << " and its double is " <<

Trang 20

Updatesofts.com

Ebooks Team

i*2 << ".\n"; return 0; }

Ngi s dng chng trnh c th l mt trong nhng nguyn nhn gy ra li trong mt chng trnh n gin s dng cin (nh chng trnh trn). Trong khi bn mun nhn mt s nguyn th ngi s dng li nhp vo tn ca h (l mt xu k t). Kt qu l chng trnh s chy sai v khng phi l nhng g m chng trnh mong i t ngi dng. Bi vy khi bn s dng d liu nhp vo t cin bn phi tin chc rng ngi dng s hon ton hp tc v rng anh ta s khng nhp tn ca mnh khi chng trnh yu cu nhp s nguyn. Sau ny, khi nghin cu vic s dng cc xu k t chng ta s xem xt cc gii php kh thi gii quyt cc li loi ny. Bn c th dng cin nhp mt lc nhiu d liu t ngi dng:
cin >> a >> b;

tng ng vi
cin >> a; cin >> b;

Trong c hai trng hp ngi s dng phi cung cp hai d liu, mt cho bin a v mt cho bin b v c ngn cch bi mt du trng hp l: mt du cch, du tab hay k t xung dng. Trong trng hp kiu khng c ch r (nh trong v d cui) trnh dch s coi n l kiu int.

Trang 21

Updatesofts.com

Ebooks Team

Cc cu trc iu khin.
Mt chng trnh thng khng ch bao gm cc lnh tun t ni tip nhau. Trong qu trnh chy n c th r nhnh hay lp li mt on m no . lm iu ny chng ta s dng cc cu trc iu khin. Cng vi vic gii thiu cc cu trc iu khin chng ta cng s phi bit ti mt khi nim mi: khi lnh, l mt nhm cc lnh c ngn cch bi du chm phy (;) nhng c gp trong mt khi gii hn bi mt cp ngoc nhn: { v }. Hu ht cc cu trc iu khin m chng ta s xem xt trong chng ny cho php s dng mt lnh n hay mt khi lnh lm tham s, tu thuc vo chng ta c t n trong cp ngoc nhn hay khng.

Cu trc iu kin: if v else


Cu trc ny c dng khi mt lnh hay mt khi lnh ch c thc hin khi mt iu kin no tho mn. Dng ca n nh sau:
if (condition) statement

trong condition l biu thc s c tnh ton. Nu iu kin l true, statement c thc hin. Nu khng statement b b qua (khng thc hin) v chng trnh tip tc thc hin lnh tip sau cu trc iu kin. V d, on m sau y s vit x is 100 ch khi bin x cha gi tr 100:
if (x == 100) cout << "x is 100";

Nu chng ta mun c hn mt lnh c thc hin trong trng hp condition l true chng ta c th ch nh mt khi lnh bng cch s dng mt cp ngoc nhn { }:
if (x == 100) { cout << "x is "; cout << x; }

Chng ta cng c th ch nh iu g s xy ra nu iu kin khng c tho mn bng cch su dng t kho else. N c s dng cng vi if nh sau:
if (condition) statement1 else statement2

V d:

Trang 22

Updatesofts.com

Ebooks Team

if (x == 100) cout << "x is 100"; else cout << "x is not 100";

Cu trc if + else c th c mc ni kim tra nhiu gi tr. V d sau y s kim tra xem gi tr cha trong bin x l dng, m hay bng khng.
if (x > 0) cout << "x else if (x < cout << "x else cout << "x is positive"; 0) is negative"; is 0";

Cc cu trc lp
Mc ch ca cc vng lp l lp li mt thao tc vi mt s ln nht nh hoc trong khi mt iu kin no cn tho mn. Vng lp while . Dng ca n nh sau:
while (expression) statement

v chc nng ca n n gin ch l lp li statement khi iu kin expression cn tho mn. V d, chng ta s vit mt chng trnh m ngc s dng vo lp while:
// custom countdown using while #include <iostream.h> int main () { int n; cout << "Enter the starting number > "; cin >> n; while (n>0) { cout << n << ", "; --n; } cout << "FIRE!"; return 0; } Enter the starting number > 8 8, 7, 6, 5, 4, 3, 2, 1, FIRE!

Khi chng trnh chy ngi s dng c yu cu nhp vo mt s m ngc. Sau , khi vng lp while bt u nu s m ngi dng nhp vo tho mn iu kin iu kin n>0 khi lnh s c thc hin mt s ln khng xc nh chng no iu kin (n>0) cn c tho mn.

Trang 23

Updatesofts.com

Ebooks Team

Chng ta cn phi nh rng vng lp phi kt thc mt im no , v vy bn trong vng lp chng ta phi cung cp mt phng thc no buc condition tr thnh sai nu khng th n s lp li mi mi. Trong v d trn vng lp phi c lnh --n; lm cho condition tr thnh sai sau mt s ln lp. Vng lp do-while Dng thc:
do statement while (condition);

Chc nng ca n l hon ton ging vng lp while ch tr c mt iu l iu kin iu khin vng lp c tnh ton sau khi statement c thc hin, v vy statement s c thc hin t nht mt ln ngay c khi condition khng bao gi c tho mn. V d, chng trnh di y s vit ra bt k s no m bn nhp vo cho n khi bn nhp s 0.
// number echoer #include <iostream.h> int main () { unsigned long n; do { cout << "Enter number (0 to end): "; cin >> n; cout << "You entered: " << n << "\n"; } while (n != 0); return 0; } Enter number You entered: Enter number You entered: Enter number You entered: (0 to end): 12345 12345 (0 to end): 160277 160277 (0 to end): 0 0

Vng lp do-while thng c dng khi iu kin kt thc vng lp nm trong vng lp, nh trong v d trn, s m ngi dng nhp vo l iu kin kim tra kt thc vng lp. Nu bn khng nhp s 0 trong v d trn th vng lp s khng bao gi chm dt. Vng lp for . Dng thc:
for (initialization; condition; increase) statement;

v chc nng chnh ca n l lp li statement chng no condition cn mang gi tr ng, nh trong vng lp while. Nhng thm vo , for cung cp ch dnh cho lnh khi to v lnh tng. V vy vng lp ny c thit k c bit lp li mt hnh ng vi mt s ln xc nh. Cch thc hot ng ca n nh sau:

Trang 24

Updatesofts.com

Ebooks Team

1, initialization c thc hin. Ni chung n t mt gi kh ban u cho bin iu khin. Lnh ny c thc hin ch mt ln. 2, condition c kim tra, nu n l ng vng lp tip tc cn nu khng vng lp kt thc v statement c b qua. 3, statement c thc hin. N c th l mt lnh n hoc l mt khi lnh c bao trong mt cp ngoc nhn. 4, Cui cng, increase c thc hin tng bin iu khin v vng lp quay tr li bc 2. Sau y l mt v d m ngc s dng vng for.
// countdown using a for loop #include <iostream.h> int main () { for (int n=10; n>0; n--) { cout << n << ", "; } cout << "FIRE!"; return 0; } 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, FIRE!

Phn khi to v lnh tng khng bt buc phi c. Chng c th c b qua nhng vn phi c du chm phy ngn cch gia cc phn. V vy, chng ta c th vit for (;n<10;) hoc for (;n<10;n++). Bng cch s dng du phy, chng ta c th dng nhiu lnh trong bt k trng no trong vng for, nh l trong phn khi to. V d chng ta c th khi to mt lc nhiu bin trong vng lp:
for ( n=0, i=100 ; n!=i ; n++, i-- ) { // ci g y cng c... }

Vng lp ny s thc hin 50 ln nu nh n v i khng b thay i trong thn vng lp:

Cc lnh r nhnh v lnh nhy


Lnh break. S dng break chng ta c th thot khi vng lp ngay c khi iu kin n kt thc cha c tho mn. Lnh ny c th c dng kt thc mt vng lp

Trang 25

Updatesofts.com

Ebooks Team

khng xc nh hay buc n phi kt thc gia chng thay v kt thc mt cch bnh thng. V d, chng ta s dng vic m ngc trc khi n kt thc:
// break loop example #include <iostream.h> int main () { int n; for (n=10; n>0; n--) { cout << n << ", "; if (n==3) { cout << "countdown aborted!"; break; } } return 0; } 10, 9, 8, 7, 6, 5, 4, countdown aborted!

Lnh continue. Lnh continue lm cho chng trnh b qua phn cn li ca vng lp v nhy sang ln lp tip theo. V d chng ta s b qua s 5 trong phn m ngc:
// break loop example #include <iostream.h> int main () { for (int n=10; n>0; n--) { if (n==5) continue; cout << n << ", "; } cout << "FIRE!"; return 0; } 10, 9, 8, 7, 6, 4, 3, 2, 1, FIRE!

Lnh goto. Lnh ny cho php nhy v iu kin ti bt k im no trong chng trnh. Ni chung bn nn trnh dng n trong chng trnh C++. Tuy nhin chng ta vn c mt v d dng lnh goto m ngc:
// goto loop example #include <iostream.h> int main () { int n=10; loop: ; cout << n << ", "; n--; if (n>0) goto loop; cout << "FIRE!"; return 0; } 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, FIRE!

Hm exit.

Trang 26

Updatesofts.com

Ebooks Team

Mc ch ca exit l kt thc chng trnh v tr v mt m xc nh. Dng thc ca n nh sau


void exit (int exit code); exit code c dng bi mt s h iu hnh hoc c th c dng bi cc chng trnh gi. Theo quy c, m tr v 0 c ngha l chng trnh kt thc bnh thng cn cc gi tr khc 0 c ngha l c li.

Cu trc la chn: switch.


C php ca lnh switch hi c bit mt cht. Mc ch ca n l kim tra mt vi gi tr hng cho mt biu thc, tng t vi nhng g chng ta lm u bi ny khi lin kt mt vi lnh if v else if vi nhau. Dng thc ca n nh sau:
switch (expression) { case constant1: block of instructions 1 break; case constant2: block of instructions 2 break; . . . default: default block of instructions }

N hot ng theo cch sau: switch tnh biu thc v kim tra xem n c bng hay khng, nu ng th n thc hin block of instructions 1 cho n khi tm thy t kho break, sau nhy n phn cui ca cu trc la chn switch. Cn nu khng, switch s kim tra xem biu thc c bng constant2 hay khng. Nu ng n s thc hin block of instructions 2 cho n khi tm thy t kho break. Cui cng, nu gi tr biu thc khng bng bt k hng no c ch nh trn (bn c th ch nh bao nhiu cu lnh case tu thch), chng trnh s thc hin cc lnh trong phn default: nu n tn ti v phn ny khng bt buc phi c.
constant1

Hai on m sau l tng ng: v d switch


switch (x) { case 1: cout << "x is 1"; break; case 2: cout << "x is 2"; break;

if-else tng ng
if (x == 1) { cout << "x is 1"; } else if (x == 2) { cout << "x is 2"; } else {

Trang 27

Updatesofts.com

Ebooks Team

default: cout << "value of x unknown"; }

cout << "value of x unknown"; }

Ti ni trn rng cu trc ca lnh switch hi c bit. Ch s tn ti ca lnh break cui mi khi lnh. iu ny l cn thit v nu khng th sau khi thc hin block of instructions 1 chng trnh s khng nhy n cui ca lnh switch m s thc hin cc khi lnh tip theo cho n khi n tm thy lnh break u tin. iu ny khin cho vic t cp ngoc nhn { } trong mi trng hp l khng cn thit v c th c dng khi bn mun thc hin mt khi lnh cho nhiu trng hp khc nhau, v d:
switch (x) { case 1: case 2: case 3: cout << "x is 1, 2 or 3"; break; default: cout << "x is not 1, 2 nor 3"; }

Ch rng lnh switch ch c th c dng so snh mt biu thc vi cc hng. V vy chng ta khng th t cc bin (case (n*2):) hay cc khong (case (1..3):) v chng khng phi l cc hng hp l. Nu bn cn kim tra cc khong hay nhiu gi tr khng phi l hng s hy kt hp cc lnh if v else if.

Trang 28

Updatesofts.com

Ebooks Team

Hm (I)
Hm l mt khi lnh c thc hin khi n c gi t mt im khc ca chng trnh. Dng thc ca n nh sau:
type name ( argument1, argument2, ...) statement

trong :
type l kiu d liu c tr v ca hm name l tn gi ca hm. arguments l cc tham s (c nhiu bao nhiu

cng c tu theo nhu cu). Mt tham s bao gm tn kiu d liu sau l tn ca tham s ging nh khi khai bo bin (v d int x) v ng vai tr bn trong hm nh bt k bin no khc. Chng dng truyn tham s cho hm khi n c gi. Cc tham s khc nhau c ngn cch bi cc du phy. statement l thn ca hm. N c th l mt lnh n hay mt khi lnh. Di y l v d u tin v hm:
// function example #include <iostream.h> int addition (int a, int b) { int r; r=a+b; return (r); } int main () { int z; z = addition (5,3); cout << "The result is " << z; return 0; } The result is 8

c th hiu c on m ny, trc ht hy nh li nhng iu ni bi u tin: mt chng trnh C++ lun bt u thc hin t hm main. V vy chng ta bt u t y. Chng ta c th thy hm main bt u bng vic khai bo bin z kiu int. Ngay sau l mt li gi ti hm addition. Nu chng ta s thy s tng t gia cu trc ca li gi hm vi khai bo ca hm:

Trang 29

Updatesofts.com

Ebooks Team

Cc tham s c vai tr tht r rng. Bn trong hm main chng ta gi hm addition v truyn hai gi tr: 5 v 3 tng ng vi hai tham s int a v int b c khai bo cho hm addition. Vo thi im hm c gi t main, quyn iu khin c chuyn sang cho hm addition. Gi tr ca c hai tham s (5 v 3) c copy sang hai bin cc b int a v int b bn trong hm. Dng lnh sau:
return (r);

kt thc hm addition, v tr li quyn iu khin cho hm no gi n (main) v tip tc chng trnh ci im m n b ngt bi li gi n addition. Nhng thm vo , gi tr c dng vi lnh return (r) chnh l gi tr c tr v ca hm.\

Gi tr tr v bi mt hm chnh l gi tr ca hm khi n c tnh ton. V vy bin z s c c gi tr c tr v bi addition (5, 3), l 8. Phm vi hot ng ca cc bin [nhc li] Bn cn nh rng phm vi hot ng ca cc bin khai bo trong mt hm hay bt k mt khi lnh no khc ch l hm hay khi lnh v khng th s dng bn ngoi chng. V d, trong chng trnh v d trn, bn khng th s dng trc tip cc bin a, b hay r trong hm main v chng l cc bin cc b ca hm addition. Thm vo bn cng khng th s dng bin z trc tip bn trong hm addition v n lm bin cc b ca hm main. Tuy nhin bn c th khai bo cc bin ton cc c th s dng chng bt k u, bn trong hay bn ngoi bt k hm no. lm vic ny bn cn khai bo chng bn ngoi mi hm hay cc khi lnh, c ngha l ngay trong thn chng trnh. y l mt v d khc v hm:
// function example #include <iostream.h> The first result is 5 The second result is 5

Trang 30

Updatesofts.com

Ebooks Team

int subtraction (int a, int b) { int r; r=a-b; return (r); } int main () { int x=5, y=3, z; z = subtraction (7,2); cout << "The first result is " << z << '\n'; cout << "The second result is " << subtraction (7,2) << '\n'; cout << "The third result is " << subtraction (x,y) << '\n'; z= 4 + subtraction (x,y); cout << "The fourth result is " << z << '\n'; return 0; }

The third result is 2 The fourth result is 6

Trong trng hp ny chng ta to ra hm subtraction. Chc nng ca hm ny l ly hiu ca hai tham s ri tr v kt qu. Tuy nhin, nu phn tch hm main cc bn s thy chng trnh vi ln gi n hm subtraction. Ti s dng vi cch gi khc nhau cc bn thy cc cch khc nhau m mt hm c th c gi. c hiu cn k v d ny bn cn nh rng mt li gi n mt hm c th hon ton c thay th bi gi tr ca n. V d trong lnh gi hm u tin :
z = subtraction (7,2); cout << "The first result is " << z;

Nu chng ta thay li gi hm bng gi tr ca n ( l 5), chng ta s c:


z = 5; cout << "The first result is " << z;

Tng t nh vy
cout << "The second result is " << subtraction (7,2);

cng cho kt qu ging nh hai dng lnh trn nhng trong trng hp ny chng ta gi hm subtraction trc tip nh l mt tham s ca cout. Chng ta cng c th vit:
cout << "The second result is " << 5;

Trang 31

Updatesofts.com

Ebooks Team

v 5 l kt qu ca subtraction (7,2). Cn vi lnh


cout << "The third result is " << subtraction (x,y);

iu mi m duy nht y l cc tham s ca subtraction l cc bin thay v cc hng. iu ny l hon ton hp l. Trong trng hp ny gi tr c truyn cho hm subtraction l gi tr ca x and y. Trng hp th t cng hon ton tng t. Thay v vit
z = 4 + subtraction (x,y);

chng ta c th vit:
z = subtraction (x,y) + 4;

cng hon ton cho kt qu tng ng. Ch rng du chm phy c t cui biu thc ch khng cn thit phi t ngay sau li gi hm.

Cc hm khng kiu. Cch s dng void.


Nu bn cn nh c php ca mt li khai bo hm:
type name ( argument1, argument2 ...) statement

bn s thy r rng rng n bt u vi mt tn kiu, l kiu d liu s c hm tr v bi lnh return. Nhng nu chng ta khng mun tr v gi tr no th sao ? Hy tng tng rng chng ta mun to ra mt hm ch hin th mt thng bo ln mn hnh. N khng cn tr v mt gi tr no c, hn na cng khng cn nhn tham s no ht. V vy ngi ta ngh ra kiu d liu void trong ngn ng C. Hy xem xt chng trnh sau:
// void function example #include <iostream.h> void dummyfunction (void) { cout << "I'm a function!"; } int main () { dummyfunction (); return 0; } I'm a function!

Trang 32

Updatesofts.com

Ebooks Team

T kho void trong phn danh sch tham s c ngha l hm ny khng nhn mt tham s no. Tuy nhin trong C++ khng cn thit phi s dng void lm iu ny. Bn ch n gin s dng cp ngoc n ( ) l xong. Bi v hm ca chng ta khng c mt tham s no, v vy li gi hm dummyfunction s l :
dummyfunction ();

Hai du ngoc n l cn thit cho trnh dch hiu l mt li gi hm ch khng phi l mt tn bin hay bt k du hiu no khc.

Trang 33

Updatesofts.com

Ebooks Team

Hm (II). Truyn tham s theo tham s gi tr hay tham s bin.


Cho n nay, trong tt c cc hm chng ta bit, tt c cc tham s truyn cho hm u c truyn theo gi tr. iu ny c ngha l khi chng ta gi hm vi cc tham s, nhng g chng ta truyn cho hm l cc gi tr ch khng phi bn thn cc bin. V d, gi s chng ta gi hm addition nh sau:
int x=5, y=3, z; z = addition ( x , y );

Trong trng hp ny khi chng ta gi hm addition th cc gi tr 5 and 3 c truyn cho hm, khng phi l bn thn cc bin.

n y cc bn c th hi ti: Nh vy th sao, c nh hng g u ? iu ng ni y l khi cc bn thay i gi tr ca cc bin a hay b bn trong hm th cc bin x v y vn khng thay i v chng u c c truyn cho hm ch c gi tr ca chng c truyn m thi. Hy xt trng hp bn cn thao tc vi mt bin ngoi bn trong mt hm. V vy bn s phi truyn tham s di dng tham s bin nh trong hm duplicate trong v d di y:
// passing parameters by reference #include <iostream.h> void duplicate (int& a, int& b, int& c) { a*=2; b*=2; c*=2; } int main () { int x=1, y=3, z=7; duplicate (x, y, z); cout << "x=" << x << ", y=" << y << ", z=" << z; return 0; } x=2, y=6, z=14

Trang 34

Updatesofts.com

Ebooks Team

iu u tin lm bn ch l trong khai bo ca duplicate theo sau tn kiu ca mi tham s u l du v (&), bo hiu rng cc tham s ny c truyn theo tham s bin ch khng phi tham s gi tr. Khi truyn tham s di dng tham s bin chng ta ang truyn bn thn bin v bt k s thay i no m chng ta thc hin vi tham s bn trong hm s nh hng trc tip n bin .

Trong v d trn, chng ta lin kt a, b v c vi cc tham s khi gi hm (x, y v z) v mi s thay i vi a bn trong hm s nh hng n gi tr ca x v hon ton tng t vi b v y, c v z. Kiu khai bo tham s theo dng tham s bin s dng du v (&) ch c trong C++. Trong ngn ng C chng ta phi s dng con tr lm vic tng t nh th. Truyn tham s di dng tham s bin cho php mt hm tr v nhiu hn mt gi tr. V d, y l mt hm tr v s lin trc v lin sau ca tham s u tin.
// more than one returning value #include <iostream.h> void prevnext (int x, int& prev, int& next) { prev = x-1; next = x+1; } int main () { int x=100, y, z; prevnext (x, y, z); cout << "Previous=" << y << ", Next=" << z; return 0; } Previous=99, Next=101

Gi tr mc nh ca tham s.
Khi nh ngha mt hm chng ta c th ch nh nhng gi tr mc nh s c truyn cho cc i s trong trng hp chng b b qua khi hm c gi. lm vic ny n gin ch cn gn mt gi tr cho i s khi khai bo hm. Nu gi tr ca tham s vn c ch nh khi gi hm th gi tr mc nh s b b qua. V d:
Trang 35

Updatesofts.com

Ebooks Team

// default values in functions #include <iostream.h> int divide (int a, int b=2) { int r; r=a/b; return (r); } int main () { cout << divide (12); cout << endl; cout << divide (20,4); return 0; }

6 5

Nhng chng ta thy trong thn chng trnh, c hai li gi hm divide. Trong lnh u tin:
divide (12)

chng ta ch dng mt tham s nhng hm divide cho php n hai. Bi vy hm s t cho tham s th hai gi tr bng 2 v l gi tr mc nh ca n (ch phn khai bo hm c kt thc bi int b=2). V vy kt qu s l 6 (12/2).
divide

Trong lnh th hai:


divide (20,4)

c hai tham s, bi vy gi tr mc nh s c b qua. Kt qu ca hm s l 5 (20/4).

Qu ti cc hm.
Hai hm c th c cng tn nu khai bo tham s ca chng khc nhau, iu ny c ngha l bn c th t cng mt tn cho nhiu hm nu chng c s tham s khc nhau hay kiu d liu ca cc tham s khc nhau (hay thm ch l kiu d liu tr v khc nhau). V d:
// overloaded function #include <iostream.h> int divide (int a, int b) { return (a/b); } float divide (float a, float b) { 2 2.5

Trang 36

Updatesofts.com

Ebooks Team

return (a/b); } int main () { int x=5,y=2; float n=5.0,m=2.0; cout << divide (x,y); cout << "\n"; cout << divide (n,m); return 0; }

Trong v d ny chng ta nh ngha hai hm c cng tn nhng mt hm dng hai tham s kiu int v hm cn li dng kiu float. Trnh bin dch s bit cn phi gi hm no bng cch phn tch kiu tham s khi hm c gi. n gin ti vit c hai hm u c m lnh nh nhau nhng iu ny khng bt buc. Bn c th xy dng hai hm c cng tn nhng hot ng hon ton khc nhau.

Cc hm inline.
Ch th inline c th c t trc khao bo ca mt hm ch r rng li gi hm s c thay th bng m lnh ca hm khi chng trnh c dch. Vic ny tng ng vi vic khai bo mt macro, li ch ca n ch th hin vi cc hm rt ngn, tc chy chng trnh s c ci thin v n khng phi gi mt th tc con. Cu trc ca n nh sau:
inline type name ( arguments ... ) { instructions ... }

li gi hm cng nh bt k mt hm no khc. Khng cn thit phi t t kho inline trong lnh gi, ch cn trong li khai bo hm l .

qui.
Cc hm c th gi chnh n. iu ny c th c ch vi mt s tc v nh l mt s phng php sp xp hay tnh giai tha ca mt s. V d, tnh giai tha ca mt s (n), cng thc ton hc ca n nh sau:
n! = n * (n-1) * (n-2) * (n-3) ... * 1

v mt hm qui tnh ton s nh sau:


// factorial calculator #include <iostream.h> long factorial (long a) Type a number: 9 !9 = 362880

Trang 37

Updatesofts.com

Ebooks Team

{ if (a > 1) return (a * factorial (a-1)); else return (1); } int main () { long l; cout << "Type a number: "; cin >> l; cout << "!" << l << " = " << factorial (l); return 0; }

Ch trong hm factorial chng ta c th lnh gi chnh n nhng ch khi tham s ln hn 1, nu khng th hm s thc hin mt vng lp v hn v sau khi n 0 n s tip tc nhn c nhng s m. Hm ny c mt hn ch l kiu d liu m n dng (long) khng cho php tnh giai tha qu 12!.

Khai bo mu cho hm.


Cho n gi chng ta hon ton phi nh ngha hm trc lnh gi u tin n n, m thng l trong main, v vy hm main lun phi nm cui chng trnh. Nu bn th lp li mt vi v d v hm trc y nhng th t hm main trc bt k mt hm c gi t n, bn gn nh chc chn s nhn c thng bo li. Nguyn nhn l mt hm phi c khai bo trc khi n c gi nh nhnggx g chng ta lm trng tt c cc v d. Nhng c mt cch khc trnh phi vit tt c m chng trnh trc khi chng c th c dng trong main hay bt k mt hm no khc. chnh l khai bo mu cho hm. Cch ny bao gm vic khai bo hm mt cch ngn gn nhng cho trnh dch c th bit cc tham s v kiu d liu tr v ca hm. Dng ca n nh sau:
type name ( argument_type1, argument_type2, ...);

y chnh l phn u ca nh ngha hm, ngoi tr:


N khng c bt k lnh no cho hm. iu ny c ngha l n khng bao gm thn hm vi tt c cc lnh thng c bc trong cp ngoc nhn { }. N kt thc bng du chm phy (;).

Trang 38

Updatesofts.com

Ebooks Team

Trong phn lit k cc tham s ch cn vit kiu ca chng l . Vic vit tn ca cc tham s trong phn khai bo mu l khng bt buc.

V d:
// prototyping #include <iostream.h> void odd (int a); void even (int a); int main () { int i; do { cout << "Type a number: (0 to exit)"; cin >> i; odd (i); } while (i!=0); return 0; } void odd (int a) { if ((a%2)!=0) cout << "Number is odd.\n"; else even (a); } void even (int a) { if ((a%2)==0) cout << "Number is even.\n"; else odd (a); } Type a Number Type a Number Type a Number Type a Number number (0 is odd. number (0 is even. number (0 is even. number (0 is even. to exit): 9 to exit): 6 to exit): 1030 to exit): 0

V d ny r rng khng phi l mt v d v s hiu qu. Ti chc chn rng cc bn c th nhn c kt qu nh trn ch vi mt na s dng lnh. Tuy nhin n gip cho chng ta thy c vic khai bo mu cc hm l nh th no. Hn na, trong v d ny vic khai bo mu t nht mt hm l bt buc. u tin chng ta thy khai bo mu ca hai hm odd v even:
void odd (int a); void even (int a);

cho php hai hm ny c th c s dng trc khi chng c nh ngha hon chnh. Tuy nhin l do c bit gii thch ti sao chng trnh ny li cn t nht mt hm phi c khi bo mu l trong odd c mt li gi n even v trong even c mt li gi n odd. V vy nu khng c hm no c khai bo trc th li chc chn s xy ra.

Trang 39

Updatesofts.com

Ebooks Team

Rt nhiu lp trnh vin kinh nghim khuyn rng tt c cc hm nn c khai bo mu. cng l li khuyn ca ti, nht l trong trng hp c nhiu hm hoc chng rt di, khi vic khai bo tt c cc hm cng mt ch cho php chng ta bit phi gi cc hm nh th no, v vy tit kim c thi gian.

Trang 40

Updatesofts.com

Ebooks Team

Mng
Mng l mt dy cc phn t c cng kiu c t lin tip trong b nh v c th truy xut n tng phn t bng cch thm mt ch s vo sau tn ca mng. iu ny c ngha l, v d, chng ta c th lu 5 gi tr kiu int m khng cn phi khai bo 5 bin khc nhau.V d, mt mng cha 5 gi tr nguyn kiu int c tn l billy c th c biu din nh sau:

trong mi mt trng biu din mt phn t ca mng, trong trng hp ny l cc gi tr nguyn kiu int. Chng c nh s t 0 n 4 v phn t u tin ca mng lun l 0 bt k di ca n l bao nhiu. Nh bt k bin no khc, mt mng phi c khai bo trc khi c th s dng. Mt khai bo in hnh cho mt mng trong C++ nh sau:
type name [elements];

trong type l mt kiu d liu hp l (int, float...), name l mt tn bin hp l v trng elements ch nh mng s cha bao nhiu phn t V vy, khai bo billy nh trnh by trn chng ta ch cn mt dng n gin nh sau:
int billy [5];

Ch : Trng elements bn trong cp ngoc [] phi l mt gi tr hng khi khai bo mt mng, v mng l mt khi nh tnh c kch c xc nh v trnh bin dch phi c kh nng xc nh xem cn bao nhiu b nh cp pht cho mng trc khi cc lnh c th c thc hin.

Khi to mt mng.
Khi khai bo mt mng vi tm hot ng a phng (trong mt hm), theo mc nh n s khng c khi to, v vy ni dung ca n l khng xc nh cho n khi chng ra lu cc gi tr ln . Nu chng ta khai bo mt mng ton cc (bn ngoi tt c cc hm) n s c khi to v tt c cc phn t c t bng 0. V vy nu chng ta khai bo mng ton cc:

Trang 41

Updatesofts.com

Ebooks Team

int billy [5];

mi phn t ca billy s c khi to l 0:

Nhng thm vo , khi chng ta khai bo mt mng, chng ta c th gn cc gi tr khi to cho tng phn t ca n. V d:

int billy [5] = { 16, 2, 77, 40, 12071 };

lnh trn s khai bo mt mng nh sau:

S phn t trong mng m chng ta khi to vi cp ngoc nhn { } phi bng s phn t ca mng c khai bo vi cp ngoc vung [ ]. Bi v iu ny c th c coi l mt s lp li khng cn thit nn C++ cho php trng gia cp ngoc vung, kch thc ca mng c xc nh bng s gi tr gia cp ngoc nhn.

Truy xut n cc phn t ca mng.


bt k im no ca chng trnh trong tm hot ng ca mng, chng ta c th truy xut tng phn t ca mng c hay chnh sa nh l i vi mt bin bnh thng. Cu trc ca n nh sau:
name[index]

Nh trong v d trc ta c mng billy gm 5 phn t c kiu int, chng ta c th truy xut n tng phn t ca mng nh sau:

V d, lu gi tr 75 vo phn t th ba ca billy ta vit nh sau:

Trang 42

Updatesofts.com

Ebooks Team

billy[2] = 75;

v, v d, gn gi tr ca phn t th 3 ca billy cho bin a, chng ta vit:


a = billy[2];

V vy, xt v mi phng din, biu thc billy[2] ging nh bt k mt bin kiu int. Ch rng phn t th ba ca billy l billy[2], v mng bt u t ch s 0. V vy, phn t cui cng s l billy[4]. V vy nu chng ta vit billy[5], chng ta s truy xut n phn t th 6 ca mng v vt qu gii hn ca mng. Trong C++, vic vt qu gii hn ch s ca mng l hon ton hp l, tuy nhin n c th gy ra nhng vn thc s kh pht hin bi v chng khng to ra nhng li trong qu trnh dch nhng chng c th to ra nhng kt qu khng mong mun trong qu trnh thc hin. Nguyn nhn ca vic ny s c ni n k hn khi chng ta bt u s dng con tr. Cn phi nhn mnh rng chng ta s dng cp ngoc vung cho hai tc v: u tin l t kch thc cho mng khi khai bo chng v th hai, ch nh ch s cho mt phn t c th ca mng khi xem xt n n.
int billy[5]; billy[2] = 75; mng. // khai bo mt mng mi. // truy xut n mt phn t ca

Mt vi thao tc hp l khc vi mng:


billy[0] = a; billy[a] = 75; b = billy [a+2]; billy[billy[a]] = billy[2] + 5; // v d v mng #include <iostream.h> int billy [] = {16, 2, 77, 40, 12071}; int n, result=0; int main () { for ( n=0 ; n<5 ; n++ ) { result += billy[n]; } cout << result; return 0; } 12206

Trang 43

Updatesofts.com

Ebooks Team

Mng nhiu chiu.


Mng nhiu chiu c th c coi nh mng ca mng, v d, mt mng hai chiu c th c tng tc nh l mt bng hai chiu gm cc phn t c kiu d liu c th v ging nhau.

jimmy

biu din mt mng hai chiu kch thc 3x5 c kiu int. Cch khai bo mng ny nh sau:
int jimmy [3][5];

v, v d, cch truy xut n phn t th hai theo chiu dc v th t theo chiu ngang trong mt biu thc nh sau:
jimmy[1][3]

(hy nh rng ch s ca mng lun bt u t 0). Mng nhiu chiu khng b gii hn bi hai ch s (hai chiu), Chng c th cha bao nhiu ch s ty thch mc d t kh cn phi dng n mng ln hn 3 chiu. Hy th xem xt lng b nh m mt mng c nhiu ch s cn n. V d:
char century [100][365][24][60][60];

gn mt gi tr char cho mi giy trong mt th k, phi cn n hn 3 t gi tr chars! Chng ta s phi cn khong 3GB RAM khai bo n. Mng nhiu chiu thc ra l mt khi nim tru tng v chng ta c th c kt qu tng t vi mng mt chiu bng mt thao tc n gin gia cc ch s ca n:
int jimmy [3][5]; tng ng vi int jimmy [15]; (3 * 5 = 15)

Trang 44

Updatesofts.com

Ebooks Team

Di y l hai v d vi cng mt kt qu nh nhau, mt s dng mng hai chiu v mt s dng mng mt chiu:
// multidimensional array #include <iostream.h> #define WIDTH 5 #define HEIGHT 3 int jimmy [HEIGHT][WIDTH]; int n,m; int main () { for (n=0;n<HEIGHT;n++) for (m=0;m<WIDTH;m++) { jimmy[n][m]=(n+1)*(m+1); } return 0; } // pseudo-multidimensional array #include <iostream.h> #define WIDTH 5 #define HEIGHT 3 int jimmy [HEIGHT * WIDTH]; int n,m; int main () { for (n=0;n<HEIGHT;n++) for (m=0;m<WIDTH;m++) { jimmy[n * WIDTH + m]=(n+1)*(m+1); } return 0; }

khng mt chng trnh no vit g ra mn hnh nhng c hai u gn gi tr vo khi nh c tn jimmy theo cch sau:

Chng ta nh ngha hng (#define) n gin ha nhng chnh sa sau ny ca chng trnh, v d, trong trng hp chng ta quyt nh tng kch thc ca mng vi chiu cao l 4 thay v l 3, chng ta ch cn thay i dng:
#define HEIGHT 3

thnh
#define HEIGHT 4

v khng phi c thm s thay i no na i vi chng trnh.

Dng mng lm tham s.


Vo mt lc no c th chng ta cn phi truyn mt mng ti mt hm nh l mt tham s. Trong C++, vic truyn theo tham s gi tr mt khi nh l khng hp l, ngay c khi n c t chc thnh mt mng. Tuy nhin chng ta li c php truyn a ch

Trang 45

Updatesofts.com

Ebooks Team

ca n, vic ny cng to ra kt qu thc t ging thao tc trn nhng li nhanh hn nhiu v hiu qu hn. c th nhn mng l tham s th iu duy nht chng ta phi lm khi khai bo hm l ch nh trong phn tham s kiu d liu c bn ca mng, tn mng v cp ngoc vung trng. V d, hm sau:
void procedure (int arg[])

nhn vo mt tham s c kiu "mng ca char" v c tn arg. truyn tham s cho hm ny mt mng c khai bo:
int myarray [40];

ch cn gi hm nh sau:
procedure (myarray);

Di y l mt v d c th
// arrays as parameters #include <iostream.h> void printarray (int arg[], int length) { for (int n=0; n<length; n++) cout << arg[n] << " "; cout << "\n"; } int main () { int firstarray[] = {5, 10, 15}; int secondarray[] = {2, 4, 6, 8, 10}; printarray (firstarray,3); printarray (secondarray,5); return 0; } 5 10 15 2 4 6 8 10

Nh bn c th thy, tham s u tin (int arg[]) chp nhn mi mng c kiu c bn l int, bt k di ca n l bao nhiu, v vy cn thit phi c tham s th hai bo cho hm ny bit di ca mng m chng ta truyn cho n. Trong phn khai bo hm chng ta cng c th dng tham s l cc mng nhiu chiu. Cu trc ca mng 3 chiu nh sau:
base_type[][depth][depth]

Trang 46

Updatesofts.com

Ebooks Team

v d, mt hm vi tham s l mng nhiu chiu c th nh sau:


void procedure (int myarray[][3][4])

ch rng cp ngoc vung u tin trng nhng cc cp ngoc sau th khng. Bn lun lun phi lm vy v trnh bin dch C++ phi c kh nng xc nh ln ca cc chiu thm vo ca mng. Mng, c mt chiu v nhiu chiu, khi truyn cho hm nh l mt tham s thng l nguyn nhn gy li cho nhng lp trnh vin thiu kinh nghim. Cc bn nn c bi 3.3. Con tr c th hiu r hn mng hot ng nh th no.

Trang 47

Updatesofts.com

Ebooks Team

Xu k t
Trong tt c cc chng trnh chng ta thy cho n gi, chng ta ch s dng cc bin kiu s, ch dng biu din cc s. Nhng bn cnh cc bin kiu s cn c cc xu k t, chng cho php chng ta biu din cc chui k t nh l cc t, cu, on vn bn... Cho n gi chng ta mi ch dng chng di dng hng ch cha quan tm n cc bin c th cha chng. Trong C++ khng c kiu d liu c bn lu cc xu k t. c th tha mn nhu cu ny, ngi ta s dng mng c kiu char. Hy nh rng kiu d liu ny (char) ch c th lu tr mt k t n, bi vy n c dng to ra xu ca cc k t n. V d, mng sau (hay l xu k t):
char jenny [20];

c th lu mt xu k t vi di cc i l 20 k t. Bn c th tng tng n nh sau:

Kch thc cc i ny khng cn phi lun lun dng n. V d, jenny c th lu xu V cc mng k t c th lu cc xu k t ngn hn di ca n, trong C++ c mt quy c kt thc mt ni dung ca mt xu k t bng mt k t null, c th c vit l '\0'.
"Hello" hay "Merry christmas".

Chng ta c th biu din jenny (mt mng c 20 phn t kiu char) khi lu tr xu k t "Hello" v "Merry Christmas" theo cch sau:

Ch rng sau ni dung ca xu, mt k t null ('\0') c dng bo hiu kt thc xu. Nhng mu xm biu din nhng gi tr khng xc nh.

Khi to cc xu k t.
V nhng xu k t l nhng mng bnh thng nn chng cng nh cc mng khc. V d, nu chng ta mun khi to mt xu k t vi nhng gi tr xc nh chng ta c th lm iu tng t nh vi cc mng khc:

Trang 48

Updatesofts.com

Ebooks Team

char mystring[] = { 'H', 'e', 'l', 'l', 'o', '\0' };

Tuy nhin, chng ta c th khi to gi tr cho mt xu k t bng cch khc: s dng cc hng xu k t. Trong cc biu thc chng ta s dng trong cc v d trong cc chng trc cc hng xu k t xut hin vi ln. Chng c biu din trong cp ngoc kp ("), v d:
"the result is: "

l mt hng xu k t chng ta s dng mt s ch. Khng ging nh du nhy n (') cho php biu din hng k t, cp ngoc kp (") l hng biu din mt chui k t lin tip, v cui chui mt k t null ('\0') lun c t ng thm vo. V vy chng ta c th khi to xu mystring theo mt trong hai cch sau y:
char mystring [] = { 'H', 'e', 'l', 'l', 'o', '\0' }; char mystring [] = "Hello";

Trong c hai trng hp mng (hay xu k t) mystring c khai bo vi kch thc 6 k t: 5 k t biu din Hello cng vi mt k t null. Trc khi tip tc, ti cn phi nhc nh bn rng vic gn nhiu hng nh vic s dng du ngoc kp (") ch hp l khi khi to mng, tc l lc khai bo mng. Cc biu thc trong chng trnh nh:
mystring = "Hello"; mystring[] = "Hello";

l khng hp l, c cu lnh di y cng vy:


mystring = { 'H', 'e', 'l', 'l', 'o', '\0' };

Vy hy nh: Chng ta ch c th "gn" nhiu hng cho mt mng vo lc khi to n. Nguyn nhn l mt thao tc gn (=) khng th nhn v tri l c mt mng m ch c th nhn mt trong nhng phn t ca n. Vo thi im khi to mng l mt trng hp c bit, v n khng thc s l mt lnh gn mc d n s dng du bng (=).

Gn gi tr cho xu k t
V v tri ca mt lnh gn ch c th l mt phn t ca mng ch khng th l c mng, chng ta c th gn mt xu k t cho mt mng kiu char s dng mt phng php nh sau:
mystring[0] = 'H'; mystring[1] = 'e';

Trang 49

Updatesofts.com

Ebooks Team

mystring[2] mystring[3] mystring[4] mystring[5]

= = = =

'l'; 'l'; 'o'; '\0';

Nhng r rng y khng phi l mt phng php thc t. gn gi tr cho mt xu k t, chng ta c th s dng lot hm kiu strcpy (string copy), hm ny c nh ngha trong string.h v c th c gi nh sau:
strcpy (string1, string2);

Lnh ny copy ni dung ca string2 sang string1. string2 c th l mt mng, con tr hay mt hng xu k t, bi vy lnh sau y l mt cch ng gn xu hng "Hello" cho mystring:
strcpy (mystring, "Hello");

V d:
// setting value to string #include <iostream.h> #include <string.h> int main () { char szMyName [20]; strcpy (szMyName,"J. Soulie"); cout << szMyName; return 0; } J. Soulie

rng chng ta phi include file <string.h> c th s dng hm strcpy. Mc d chng ta lun c th vit mt hm n gin nh hm setstring di y thc hin mt thao tc ging nh strcpy:
// setting value to string #include <iostream.h> void setstring (char szOut [], char szIn []) { int n=0; do { szOut[n] = szIn[n]; n++; } while (szIn[n] != 0); } int main () J. Soulie

Trang 50

Updatesofts.com

Ebooks Team

{ char szMyName [20]; setstring (szMyName,"J. Soulie"); cout << szMyName; return 0; }

Mt phng thc thng dng khc gn gi tr cho mt mng l s dng trc tip dng nhp d liu (cin). Trong trng hp ny gi tr ca xu k t c gn bi ngi dng trong qu trnh chng trnh thc hin. Khi cin c s dng vi cc xu k t n thng c dng vi phng thc getline ca n, phng thc ny c th c gi nh sau:
cin.getline ( char buffer[], int length, char delimiter = ' \n');

trong buffer (b m) l a ch ni s lu tr d liu vo (nh l mt mng chng hn), length l di cc i ca b m (kch thc ca mng) v delimiter l k t c dng kt thc vic nhp, mc nh - nu chng ta khng dng tham s ny - s l k t xung dng ('\n'). V d sau y lp li tt c nhng g bn g trn bn phm. N rt n gin nhng l mt v d cho thy bn c th s dng cin.getline vi cc xu k t nh th no:
// cin with strings #include <iostream.h> int main () { char mybuffer [100]; cout << "What's your name? "; cin.getline (mybuffer,100); cout << "Hello " << mybuffer << ".\n"; cout << "Which is your favourite team? "; cin.getline (mybuffer,100); cout << "I like " << mybuffer << " too.\n"; return 0; } What's your name? Juan Hello Juan. Which is your favourite team? Inter Milan I like Inter Milan too.

Ch trong c hai li gi cin.getline chng ta s dng cng mt bin xu (mybuffer). Nhng g chng trnh lm trong li gi th hai n gin l thay th ni dung ca buffer trong li gi c bng ni dung mi. Nu bn cn nh phn ni v giao tip vi, bn s nh rng chng ta s dng ton t >> nhn d liu trc tip t u vo chun. Phng thc ny c th c dng vi cc

Trang 51

Updatesofts.com

Ebooks Team

xu k t thay cho cin.getline. V d, trong chn trnh ca chng ta, khi chng ta mun nhn d liu t ngi dng chng ta c th vit:
cin >> mybuffer;

lnh ny s lm vic nh n c nhng hn ch sau m cin.getline khng c:

N ch c th nhn nhng t n (khng nhn c c cu) v phng thc ny s dng k t trng(bao gm c du cch, du tab v du xung dng) lm du hiu kt thc.. N khng cho php ch nh kch thc cho b m. Chng trnh ca bn c th chy khng n nh nu d liu vo ln hn kch c ca mng cha n.

V nhng nguyn nhn trn, khi mun nhp vo cc xu k t bn nn s dng cin.getline thay v cin >>.

Chuyn i xu k t sang cc kiu khc.


V mt xu k t c th biu din nhiu kiu d liu khc nh dng s nn vic chuyn i ni dung nh vy sang dng s l rt hu ch. V d, mt xu c th mang gi tr "1977"nhng l mt chui gm 5 k t (k c k t null) v khng d g chuyn thnh mt s nguyn. V vy th vin cstdlib (stdlib.h) cung cp 3 macro/hm hu ch sau:

atoi: chuyn xu thnh kiu int. atol: chuyn xu thnh kiu long. atof: chuyn xu thnh kiu float.

Tt c cc hm ny nhn mt tham s v tr v gi tr s (int, long hoc float). Cc hm ny khi kt hp vi phng thc getline ca cin l mt cch ng tin cy hn phng thc cin>> c in khi yu cu ngi s dng nhp vo mt s:
// cin and ato* functions #include <iostream.h> #include <stdlib.h> int main () { char mybuffer [100]; float price; int quantity; cout << "Enter price: "; cin.getline (mybuffer,100); price = atof (mybuffer); cout << "Enter quantity: "; cin.getline (mybuffer,100); quantity = atoi (mybuffer); cout << "Total price: " << price*quantity; Enter price: 2.75 Enter quantity: 21 Total price: 57.75

Trang 52

Updatesofts.com

Ebooks Team

return 0; }

Cc hm thao tc trn chui


Th vin cstring (string.h) khng ch c hm strcpy m cn c nhiu hm khc thao tc trn chui. Di y l gii thiu lt qua ca cc hm thng dng nht: strcat: char* strcat (char* dest, const char* src); Gn thm chui src vo pha cui ca dest. Tr v dest. strcmp: int strcmp (const char* string1, const char* string2); So snh hai xu string1 v string2. Tr v 0 nu hai xu l bng nhau. strcpy: char* strcpy (char* dest, const char* src); Copy ni dung ca src cho dest. Tr v dest. strlen: size_t strlen (const char* string); Tr v di ca string. Ch : char* hon ton tng ng vi char[]

Trang 53

Updatesofts.com

Ebooks Team

Con tr

Chng ta bit cc bin chnh l cc nh m chng ta c th truy xut di cc tn. Cc bin ny c lu tr ti nhng ch c th trong b nh. i vi chng trnh ca chng ta, b nh my tnh ch l mt dy gm cc nh 1 byte, mi c mt a ch xc nh. Mt s m hnh tt i vi b nh my tnh chnh l mt ph trong mt thnh ph. Trn mt ph tt c cc ngi nh u c nh s tun t vi mt ci tn duy nht nn nu chng ta ni n s 27 ph Trn Hng o th chng ta c th tm c ni m khng lm ln v ch c mt ngi nh vi s nh vy. Cng vi cch t chc tng t nh vic nh s cc ngi nh, h iu hnh t chc b nh thnh nhng s n nht, tun t, nn nu chng ta ni n v tr 1776 trong b nh chng ta bit chnh xc nh v ch c mt v tr vi a ch nh vy.

Ton t ly a ch (&).
Vo thi im m chng ta khai bo mt bin th n phi c lu tr trong mt v tr c th trong b nh. Ni chung chng ta khng quyt nh ni no bin c t - tht may mn rng iu c lm t ng bi trnh bin dch v h iu hnh, nhng mt khi h iu hnh gn mt a ch cho bin th chng ta c th mun bit bin c lu tr u. iu ny c th c thc hin bng cch t trc tn bin mt du v (&), c ngha l "a ch ca". V d:
ted = &andy;

s gn cho bin ted a ch ca bin andy, v khi t trc tn bin andy du v (&) chng ta khng cn ni n ni dung ca bin m ch ni n a ch ca n trong b nh. Gi s rng bin andy c t nh c a ch 1776 v chng ta vit nh sau:
andy = 25; fred = andy; ted = &andy;

kt qu s ging nh trong s di y:

Trang 54

Updatesofts.com

Ebooks Team

Chng ta gn cho fred ni dung ca bin andy nh chng ta lm rt ln nhiu khc trong nhng phn trc nhng vi bin ted chng ta gn a ch m h iu hnh lu gi tr ca bin andy, chng ta va gi s n l 1776. Nhng bin lu tr a ch ca mt bin khc (nh ted trong v d trc) c gi l con tr. Trong C++ con tr c rt nhiu u im v chng c s dng rt thng xuyn, Tip theo chng ta s thy cc bin kiu ny c khai bo nh th no.

Ton t tham chiu (*)


Bng cch s dng con tr chng ta c th truy xut trc tip n gi tr c lu tr trong bin c tr bi n bng cch trc tn bin con tr mt du sao (*) - y c th c dch l "gi tr c tr bi". V vy, nu chng ta vit:
beth = *ted;

(chng ta c th c n l: "beth bng gi tr c tr bi ted" beth s mang gi tr 25, v ted bng 1776 v gi tr tr bi 1776 l 25.

Bn phi phn bit c rng ted c gi tr 1776, nhng *ted (vi mt du sao ng trc) tr ti gi tr c lu tr trong a ch 1776, l 25. Hy ch s khc bit gia vic c hay khng c du sao tham chiu.
beth = ted; beth = *ted; // beth bng ted ( 1776 ) // beth bng gi tr c tr bi( 25 )

Ton t ly a ch (&)

Trang 55

Updatesofts.com

Ebooks Team

N c dng nh l mt tin t ca bin v c th c dch l "a ch ca", v vy &variable1 c th c c l "a ch ca variable1". Ton t tham chiu (*) N ch ra rng ci cn c tnh ton l ni dung c tr bi biu thc c coi nh l mt a ch. N c th c dch l "gi tr c tr bi".. *mypointer c c l "gi tr c tr bi mypointer". Vo lc ny, vi nhng v d vit trn
andy = 25; ted = &andy;

bn c th d dng nhn ra tt c cc biu thc sau l ng:


andy == 25 &andy == 1776 ted == 1776 *ted == 25

Khai bo bin kiu con tr


V con tr c kh nng tham chiu trc tip n gi tr m chng tr ti nn cn thit phi ch r kiu d liu no m mt bin con tr tr ti khai bo n. V vy, khai bo ca mt bin con tr s c mu sau:
type * pointer_name;

trong type l kiu d liu c tr ti, khng phi l kiu ca bn thn con tr. V d:
int * number; char * character; float * greatnumber;

l ba khai bo ca con tr. Mi bin u tr ti mt kiu d liu khc nhau nhng c ba u l con tr v chng u chim mt lng b nh nh nhau (kch thc ca mt bin con tr ty thuc vo h iu hnh). nhng d liu m chng tr ti khng chim lng b nh nh nhau, mt kiu int, mt kiu char v ci cn li kiu float. Ti phi nhn mnh li rng du sao (*) m chng ta t khi khai bo mt con tr ch c ngha rng: l mt con tr v hon ton khng lin quan n ton t tham chiu m chng ta xem xt trc . n gin ch l hai tc v khc nhau c biu din bi cng mt du.
// my first pointer #include <iostream.h> value1==10 / value2==20

Trang 56

Updatesofts.com

Ebooks Team

int main () { int value1 = 5, value2 = 15; int * mypointer; mypointer = &value1; *mypointer = 10; mypointer = &value2; *mypointer = 20; cout << "value1==" << value1 << "/ value2==" << value2; return 0; }

Ch rng gi tr ca value1 v value2 c thay i mt cch gin tip. u tin chng ta gn cho mypointer a ch ca value1 dng ton t ly a ch (&) v sau chng ta gn 10 cho gi tr c tr bi mypointer, l gi tr c tr bi value1 v vy chng ta sa bin value1 mt cch gin tip bn c th thy rng mt con tr c th mang mt vi gi tr trong cng mt chng trnh chng ta s lp li qu trnh vi value2 v vi cng mt con tr. y l mt v d phc tp hn mt cht:
// more pointers #include <iostream.h> int main () { int value1 = 5, value2 = 15; int *p1, *p2; p1 = &value1; // p1 = a ch ca value1 p2 = &value2; // p2 = a ch ca value2 *p1 = 10; // gi tr tr bi p1 = 10 *p2 = *p1; // gi tr tr bi p2 = gi tr tr bi p1 p1 = p2; // p1 = p2 (php gn con tr) *p1 = 20; // gi tr tr bi p1 = 20 cout << "value1==" << value1 << "/ value2==" << value2; return 0; } value1==10 / value2==20

Mt dng c th gy s ch ca bn l:

Trang 57

Updatesofts.com

Ebooks Team

int *p1, *p2;

dng ny khai bo hai con tr bng cch t du sao (*) trc mi con tr. Nguyn nhn l kiu d liu khai bo cho c dng l int v v theo th t t phi sang tri, du sao c tnh trc tn kiu. Chng ta ni n iu ny trong bi 1.3: Cc ton t.

Con tr v mng.
Trong thc t, tn ca mt mng tng ng vi a ch phn t u tin ca n, ging nh mt con tr tng ng vi a ch ca phn t u tin m n tr ti, v vy thc t chng hon ton nh nhau. V d, cho hai khai bo sau:
int numbers [20]; int * p;

lnh sau s hp l:
p = numbers;

y p v numbers l tng ng v chng c cng thuc tnh, s khc bit duy nht l chng ta c th gn mt gi tr khc cho con tr p trong khi numbers lun tr n phn t u tin trong s 20 phn t kiu int m n c nh ngha vi. V vy, khng ging nh p - l mt bin con tr bnh thng, numbers l mt con tr hng. Lnh gn sau y l khng hp l:
numbers = p;

bi v numbers l mt mng (con tr hng) v khng c gi tr no c th c gn cho cc hng. V con tr cng c mi tnh cht ca mt bin nn tt c cc biu thc c con tr trong v d di y l hon ton hp l:
// more pointers #include <iostream.h> int main () { int numbers[5]; int * p; p = numbers; *p = 10; p++; *p = 20; p = &numbers[2]; *p = 30; p = numbers + 3; *p = 40; p = numbers; *(p+4) = 50; for (int n=0; n<5; n++) cout << numbers[n] << ", "; return 0; 10, 20, 30, 40, 50,

Trang 58

Updatesofts.com

Ebooks Team

Trong bi "mng" chng ta dng du ngoc vung ch ra phn t ca mng m chng ta mun tr n. Cp ngoc vung ny c coi nh l ton t offset v ngha ca chng khng i khi c dng vi bin con tr. V d, hai biu thc sau y:
a[5] = 0; *(a+5) = 0; // a [offset of 5] = 0 // pointed by (a+5) = 0 tng ng v hp l bt k a l mng hay l

l hon ton

mt con tr.

Khi to con tr
Khi khai bo con tr c th chng ta s mun ch nh r rng chng s tr ti bin no,
int number; int *tommy = &number;

l tng ng vi:
int number; int *tommy; tommy = &number;

Trong mt php gn con tr chng ta phi lun lun gn a ch m n tr ti ch khng phi l gi tr m n tr ti. Bn cn phi nh rng khi khai bo mt bin con tr, du sao (*) c dng ch ra n l mt con tr, v hon ton khc vi ton t tham chiu. l hai ton t khc nhau mc d chng c vit vi cng mt du. V vy, cc cu lnh sau l khng hp l:
int number; int *tommy; *tommy = &number;

Nh i vi mng, trnh bin dch cho php chng ta khi to gi tr m con tr tr ti bng gi tr hng vo thi im khai bo bin con tr:
char * terry = "hello";

trong trng hp ny mt khi nh tnh c dnh cha "hello" v mt con tr tr ti k t u tin ca khi nh ny ( l k t h') c gn cho terry. Nu "hello" c lu ti a ch 1702, lnh khai bo trn c th c hnh dung nh th ny:

Trang 59

Updatesofts.com

Ebooks Team

cn phi nhc li rng terry mang gi tr 1702 ch khng phi l 'h' hay "hello". Bin con tr terry tr ti mt xu k t v n c th c s dng nh l i vi mt mng (hy nh rng mt mng ch n thun l mt con tr hng). V d, nu chng ta mun thay k t 'o' bng mt du chm than, chng ta c th thc hin vic bng hai cch:
terry[4] = '!'; *(terry+4) = '!';

hy nh rng vit terry[4] l hon ton ging vi vit *(terry+4) mc d biu thc thng dng nht l ci u tin. Vi mt trong hai lnh trn xu do terry tr n s c gi tr nh sau:

Cc php tnh s hc vi pointer


Vic thc hin cc php tnh s hc vi con tr hi khc so vi cc kiu d liu s nguyn khc. Trc ht, ch php cng v tr l c php dng. Nhng c cng v tr u cho kt qu ph thuc vo kch thc ca kiu d liu m bin con tr tr ti. Chng ta thy c nhiu kiu d liu khc nhau tn ti v chng c th chim ch nhiu hn hoc t hn cc kiu d liu khc. V d, trong cc kiu s nguyn, char chim 1 byte, short chim 2 byte v long chim 4 byte. Gi s chng ta c 3 con tr sau:
char *mychar; short *myshort; long *mylong;

v chng ln lt tr ti nh 1000, 2000 and 3000.

Trang 60

Updatesofts.com

Ebooks Team

Nu chng ta vit
mychar++; myshort++; mylong++; mychar - nh bn mong i - s mang gi tr 1001. Tuy nhin myshort s mang gi tr 2002 v mylong mang gi tr 3004. Nguyn nhn l khi cng thm 1 vo mt con tr th

n s tr ti phn t tip theo c cng kiu m n c nh ngha, v vy kch thc tnh bng byte ca kiu d liu n tr ti s c cng thm vo bin con tr.

iu ny ng vi c hai php ton cng v tr i vi con tr. Chng ta cng hon ton thu c kt qu nh trn nu vit:
mychar = mychar + 1; myshort = myshort + 1; mylong = mylong + 1;

Cn phi cnh bo bn rng c hai ton t tng (++) v gim (--) u c quyn u tin ln hn ton t tham chiu (*), v vy biu thc sau y c th dn ti kt qu sai:
*p++; *p++ = *q++;

Lnh u tin tng ng vi *(p++) iu m n thc hin l tng p (a ch nh m n tr ti ch khng phi l gi tr tr ti). Lnh th hai, c hai ton t tng (++) u c thc hin sau khi gi tr ca *q c gn cho *p v sau c q v p u tng ln 1. Lnh ny tng ng vi:
*p = *q; p++; q++;

Trang 61

Updatesofts.com

Ebooks Team

Nh ni trong cc bi trc, ti khuyn cc bn nn dng cc cp ngoc n trnh nhng kt qu khng mong mun.

Con tr tr ti con tr
C++ cho php s dng cc con tr tr ti cc con tr khc ging nh l tr ti d liu. lm vic chng ta ch cn thm mt du sao (*) cho mi mc tham chiu.
char a; char * b; char ** c; a = 'z'; b = &a; c = &b;

gi s rng a,b,c c lu cc nh 7230, 8092 and 10502, ta c th m t on m trn nh sau:

im mi trong v d ny l bin c, chng ta c th ni v n theo 3 cch khc nhau, mi cch s tng ng vi mt gi tr khc nhau:
c l mt bin c kiu (char **) mang gi tr 8092 *c l mt bin c kiu (char*) mang gi tr 7230 **c l mt bin c kiu (char) mang gi tr 'z'

Con tr khng kiu


Con tr khng kiu l mt loi con tr c bit. N c th tr ti bt k loi d liu no, t gi tr nguyn hoc thc cho ti mt xu k t. Hn ch duy nht ca n l d liu c tr ti khng th c tham chiu ti mt cch trc tip (chng ta khng th dng ton t tham chiu * vi chng) v di ca n l khng xc nh v v vy chng ta phi dng n ton t chuyn kiu d liu hay php gn chuyn con tr khng kiu thnh mt con tr tr ti mt loi d liu c th. Mt trong nhng tin ch ca n l cho php truyn tham s cho hm m khng cn ch r kiu
// integer increaser #include <iostream.h> void increase (void* data, int 6, 10, 13

Trang 62

Updatesofts.com

Ebooks Team

type) { switch (type) { case sizeof(char) : (*((char*)data))++; break; case sizeof(short): (*((short*)data))++; break; case sizeof(long) : (*((long*)data))++; break; } } int main () { char a = 5; short b = 9; long c = 12; increase (&a,sizeof(a)); increase (&b,sizeof(b)); increase (&c,sizeof(c)); cout << (int) a << ", " << b << ", " << c; return 0; }

l mt ton t ca ngn ng C++, n tr v mt gi tr hng l kch thc tnh bng byte ca tham s truyn cho n, v d sizeof(char) bng 1 v kch thc ca char l 1 byte.
sizeof

Con tr hm
C++ cho php thao tc vi cc con tr hm. Tin ch tuyt vi ny cho php truyn mt hm nh l mt tham s n mt hm khc. c th khai bo mt con tr tr ti mt hm chng ta phi khai bo n nh l khai bo mu ca mt hm nhng phi bao trong mt cp ngoc n () tn ca hm v chn du sao (*) ng trc.
// pointer to functions #include <iostream.h> int addition (int a, int b) { return (a+b); } int subtraction (int a, int b) { return (a-b); } int (*minus)(int,int) = subtraction; int operation (int x, int y, int (*functocall)(int,int)) { int g; 8

Trang 63

Updatesofts.com

Ebooks Team

g = (*functocall)(x,y); return (g); } int main () { int m,n; m = operation (7, 5, &addition); n = operation (20, m, minus); cout <<n; return 0; }

Trong v d ny, minus l mt con tr ton cc tr ti mt hm c hai tham s kiu int, con tr ny c gm tr ti hm subtraction, tt c u trn mt dng:
int (* minus)(int,int) = subtraction;

Trang 64

Updatesofts.com

Ebooks Team

B nh ng

Cho n nay, trong cc chng trnh ca chng ta, tt c nhng phn b nh chng ta c th s dng l cc bin cc mng v cc i tng khc m chng ta khai bo. Kch c ca chng l c nh v khng th thay i trong thi gian chng trnh chy. Nhng nu chng ta cn mt lng b nh m kch c ca n ch c th c xc nh khi chng trnh chy, v d nh trong trng hp chng ta nhn thng tin t ngi dng xc nh lng b nh cn thit. Gii php y chnh l b nh ng, C++ tch hp hai ton t new v delete thc hin vic ny Hai ton t new v delete ch c trong C++. phn sau ca bi chng ta s bit nhng thao tc tng ng vi cc ton t ny trong C. Ton t new v new[ ] c th c c b nh ng chng ta c th dng ton t new. Theo sau ton t ny l tn kiu d liu v c th l s phn t cn thit c t trong cp ngoc vung. N tr v mt con tr tr ti u ca khi nh va c cp pht. Dng thc ca ton t ny nh sau:
pointer = new type

hoc
pointer = new type [elements]

Biu thc u tien c dng cp pht b nh cha mt phn t c kiu type. Lnh th hai c dng cp pht mt khi nh (mt mng) gm cc phn t kiu type. V d:
int * bobby; bobby = new int [5];

trong trng hp ny, h iu hnh dnh ch cho 5 phn t kiu int trong b nh v tr v mt con tr tr n u ca khi nh. V vy lc ny bobby tr n mt khi nh hp l gm 5 phn t int.

Bn c th hi ti l c g khc nhau gia vic khai bo mt mng vi vic cp pht b nh cho mt con tr nh chng ta va lm. iu quan trng nht l kch thc ca mt
Trang 65

Updatesofts.com

Ebooks Team

mng phi l mt hng, iu ny gii hn kch thc ca mng n kch thc m chng ta chn khi thit k chng trnh trong khi cp pht b nh ng cho php cp pht b nh trong qu trnh chy vi kch thc bt k. B nh ng ni chung c qun l bi h iu hnh v trong cc mi trng a nhim c th chy mt lc vi chng trnh c mt kh nng c th xy ra l ht b nh cp pht. Nu iu ny xy ra v h iu hnh khng th cp pht b nh nh chng ta yu cu vi ton t new, mt con tr null (zero) s c tr v. V vy cc bn nn kim tra xem con tr tr v bi ton t new c bng null hay khng:
int * bobby; bobby = new int [5]; if (bobby == NULL) { // error assigning memory. Take measures. };

Ton t delete. V b nh ng ch cn thit trong mt khong thi gian nht nh, khi n khng cn dng n na th n s c gii phng c th cp pht cho cc nhu cu khc trong tng lai. thc hin vic ny ta dng ton t delete, dng thc ca n nh sau:
delete pointer;

hoc
delete [] pointer;

Biu thc u tin nn c dng gii phng b nh c cp pht cho mt phn t v lnh th hai dng gii phng mt khi nh gm nhiu phn t (mng). Trong hu ht cc trnh dch c hai biu thc l tng ng mc d chng l r rng l hai ton t khc nhau.
// rememb-o-matic #include <iostream.h> #include <stdlib.h> int main () { char input [100]; int i,n; long * l, total = 0; cout << "How many numbers do you want to type in? "; cin.getline (input,100); i=atoi (input); l= new long[i]; if (l == NULL) exit (1); for (n=0; n<i; n++) { cout << "Enter number: "; cin.getline (input,100); l[n]=atol (input); } How many numbers do you want to type in? 5 Enter number : 75 Enter number : 436 Enter number : 1067 Enter number : 8 Enter number : 32 You have entered: 75, 436, 1067, 8, 32,

Trang 66

Updatesofts.com

Ebooks Team

cout << "You have entered: "; for (n=0; n<i; n++) cout << l[n] << ", "; delete[] l; return 0; }

NULL

l mt hng s c nh ngha trong th vin C++ dng biu th con tr null. Trong trng hp hng s ny cha nh ngha bn c th t nh ngha n:

#define NULL 0

Dng 0 hay NULL khi kim tra con tr l nh nhau nhng vic dng NULL vi con tr c s dng rt rng ri v iu ny c khuyn khch gip cho chng trnh d c hn.

B nh ng trong ANSI-C
Ton t new v delete l c quyn C++ v chng khng c trong ngn ng C. Trong ngn ng C, c th s dng b nh ng chng ta phi s dng th vin stdlib.h. Chng ta s xem xt cch ny v n cng hp l trong C++ v n vn cn c s dng trong mt s chng trnh. Hm malloc y l mt hm tng qut cp pht b nh ng cho con tr. Cu trc ca n nh sau:
void * malloc (size_t nbytes);

trong nbytes l s byte chng ta mun gn cho con tr. Hm ny tr v mt con tr kiu void*, v vy chng ta phi chuyn i kiu sang kiu ca con tr ch, v d:
char * ronny; ronny = (char *) malloc (10);

on m ny cp pht cho con tr ronny mt khi nh 10 byte. Khi chng ta mun cp pht mt khi d liu c kiu khc char (ln hn 1 byte) chng ta phi nhn s phn t mong mun vi kch thc ca chng. Tht may mn l chng ta c ton t sizeof, ton t ny tr v kch thc ca mt kiu d liu c th.
int * bobby; bobby = (int *) malloc (5 * sizeof(int));

on m ny cp pht cho bobby mt khi nh gm 5 s nguyn kiu int, kch c ca kiu d liu ny c th bng 2, 4 hay hn ty thuc vo h thng m chng trnh c dch.

Trang 67

Updatesofts.com

Ebooks Team

Hm calloc. calloc hot ng rt ging vi malloc, s khc nhau ch yu l khai bo mu ca n:


void * calloc (size_t nelements, size_t size);

n s dng hai tham s thay v mt. Hai tham s ny c nhn vi nhau c c kch thc tng cng ca khi nh cn cp pht. Thng thng tham s u tin (nelements) l s phn t v tham s thc hai (size) l kch thc ca mi phn t. V d, chng ta c th nh ngha bobby vi calloc nh sau:
int * bobby; bobby = (int *) calloc (5, sizeof(int));

Mt im khc nhau na gia malloc v calloc l calloc khi to tt c cc phn t ca n v 0. Hm realloc. N thay i kch thc ca khi nh c cp pht cho mt con tr.
void * realloc (void * pointer, size_t size);

tham s pointer nhn vo mt con tr c cp pht b nh hay mt con tr null, v size ch nh kch thc ca khi nh mi. Hm ny s cp pht size byte b nh cho con tr. N c th phi thay i v v tr ca khi nh c th ch cho kch thc mi ca khi nh, trong trng hp ny ni dung hin thi ca khi nh c copy ti v tr mi m bo d liu khng b mt. Con tr mi tr ti khi nh c hm tr v. Nu khng th thay i kch thc ca khi nh th hm s tr v mt con tr null nhng tham s pointer v ni dung ca n s khng b thay i. Hm free. Hm ny gii phng mt khi nh ng c cp pht bi malloc, calloc hoc realloc.
void free (void * pointer);

calloc

Hm ny ch c dng gii phng b nh c cp pht bi cc hm malloc, and realloc.

Trang 68

Updatesofts.com

Ebooks Team

Cc cu trc Cc cu trc d liu.


Mt cu trc d liu l mt tp hp ca nhng kiu d liu khc nhau c gp li vi mt ci tn duy nht. Dng thc ca n nh sau:
struct model_name { type1 element1; type2 element2; type3 element3; . . } object_name; trong model_name l tn

ca mu kiu d liu v tham s ty chn object_name mt tn hp l cho i tng. Bn trong cp ngoc nhn l tn cc phn t ca cu trc v kiu ca chng.

Nu nh ngha ca cu trc bao gm tham s model_name (tu chn), tham s ny tr thnh mt tn kiu hp l tng ng vi cu trc. V d:
struct products { char name [30]; float price; } ; products apple; products orange, melon;

Chng ta nh ngha cu trc products vi hai trng: name v price, mi trng c mt kiu khc nhau. Chng ta cng s dng tn ca kiu cu trc (products) khai bo ba i tng c kiu : apple, orange v melon. Sau khi c khai bo, products tr thnh mt tn kiu hp l ging cc kiu c bn nh int, char hay short. Trng tu chn object_name c th nm cui ca phn khai bo cu trc dng khai bo trc tip i tng c kiu cu trc. V d, khai bo cc i tng apple, orange v melon nh lm phn trc chng ta cng c th lm theo cch sau:
struct products { char name [30]; float price; } apple, orange, melon;

Hn na, trong trng hp ny tham s model_name tr thnh tu chn. Mc d nu model_name khng c s dng th chng ta s khng th khai bo thm cc i tng c kiu mu ny.

Trang 69

Updatesofts.com

Ebooks Team

Mt iu quan trng l cn phn bit r rng u l kiu mu cu trc, u l i tng cu trc. Nu dng cc thut ng chng ta s dng vi cc bin, kiu mu l tn kiu d liu cn i tng l cc bin. Sau khi khai bo ba i tng c kiu l mt mu cu trc xc nh (apple, orange and melon) chng ta c th thao tc vi cc trng to nn chng. lm vic ny chng ta s dng mt du chm (.) chn gia tn i tng v tn trng. V d, chng ta c th thao tc vi bt k phn t no ca cu trc nh l i vi cc bin chun :
apple.name apple.price orange.name orange.price melon.name melon.price

mi trng c kiu d liu tng ng: apple.name, orange.name v melon.name c kiu char[30], v apple.price, orange.price v melon.price c kiu float. Chng ta tm bit apples, oranges v melons n vi mt v d v cc b phim:
// example about structures #include <iostream.h> #include <string.h> #include <stdlib.h> struct movies_t { char title [50]; int year; } mine, yours; void printmovie (movies_t movie); int main () { char buffer [50]; strcpy (mine.title, "2001 A Space Odyssey"); mine.year = 1968; cout << "Enter title: "; cin.getline (yours.title,50); cout << "Enter year: "; cin.getline (buffer,50); yours.year = atoi (buffer); cout << "My favourite movie is:\n "; printmovie (mine); cout << "And yours:\n "; printmovie (yours); Enter title: Alien Enter year: 1979 My favourite movie is: 2001 A Space Odyssey (1968) And yours: Alien (1979)

Trang 70

Updatesofts.com

Ebooks Team

return 0; } void printmovie (movies_t movie) { cout << movie.title; cout << " (" << movie.year << ")\n"; }

V d ny cho chng ta thy cch s dng cc phn t ca mt cu trc v bn thn cu trc nh l cc bin thng thng. V d, yours.year l mt bin hp l c kiu int cng nh mine.title l mt mng hp l vi 50 phn t kiu chars. Ch rng c mine and yours u c coi l cc bin hp l kiu movie_t khi c truyn cho hm printmovie().Hn na mt li th quan trng ca cu trc l chng ta c th xt cc phn t ca chng mt cch ring bit hoc ton b cu trc nh l mt khi. Cc cu trc c s dng rt nhiu xy dng c s d liu c bit nu chng ta xt n kh nng xy dng cc mng ca chng.
// array of structures #include <iostream.h> #include <stdlib.h> #define N_MOVIES 5 struct movies_t { char title [50]; int year; } films [N_MOVIES]; void printmovie (movies_t movie); int main () { char buffer [50]; int n; for (n=0; n<N_MOVIES; n++) { cout << "Enter title: "; cin.getline (films[n].title,50); cout << "Enter year: "; cin.getline (buffer,50); films[n].year = atoi (buffer); } cout << "\nYou have entered these movies:\n"; Enter Enter Enter Enter Enter Enter Enter Enter Enter Enter title: Alien year: 1979 title: Blade Runner year: 1982 title: Matrix year: 1999 title: Rear Window year: 1954 title: Taxi Driver year: 1975

You have entered these movies: Alien (1979) Blade Runner (1982) Matrix (1999) Rear Window (1954) Taxi Driver (1975)

Trang 71

Updatesofts.com

Ebooks Team

for (n=0; n<N_MOVIES; n++) printmovie (films[n]); return 0; } void printmovie (movies_t movie) { cout << movie.title; cout << " (" << movie.year << ")\n"; }

Con tr tr n cu trc
Nh bt k cc kiu d liu no khc, cc cu trc c th c tr n bi con tr. Quy tc hon ton ging nh i vi bt k kiu d liu c bn no:
struct movies_t { char title [50]; int year; }; movies_t amovie; movies_t * pmovie; y amovie l mt i tng c kiu movies_t v pmovie l mt con tr tr ti i tng movies_t. OK, by gi chng ta s n vi mt v d khc, n s gii thiu mt

ton t mi:
// pointers to structures #include <iostream.h> #include <stdlib.h> struct movies_t { char title [50]; int year; }; Enter title: Matrix Enter year: 1999 You have entered: Matrix (1999)

int main () { char buffer[50]; movies_t amovie; movies_t * pmovie; pmovie = & amovie; cout << "Enter title: "; cin.getline (pmovie->title,50); cout << "Enter year: "; cin.getline (buffer,50); pmovie->year = atoi (buffer); cout << "\nYou have entered:\n";

Trang 72

Updatesofts.com

Ebooks Team

cout << pmovie->title; cout << " (" << pmovie->year << ")\n"; return 0; }

on m trn gii thiu mt iu quan trng: ton t ->. y l mt ton t tham chiu ch dng tr ti cc cu trc v cc lp (class). N cho php chng ta khng phi dng ngoc mi khi tham chiu n mt phn t ca cu trc. Trong v d ny chng ta s dng:
movies->title

n c th c dch thnh:
(*movies).title

c hai biu thc movies->title v (*movies).title u hp l v chng u dng tham chiu n phn t title ca cu trc c tr bi movies. Bn cn phn bit r rng vi:
*movies.title

n tng ng vi
*(movies.title)

lnh ny dng tnh ton gi tr c tr bi phn t title ca cu trc movies, trong trng hp ny (title khng phi l mt con tr) n chng c ngha g nhiu. Bn di y tng kt tt c cc kt hp c th c gia con tr v cu trc: Biu thc
movies.title movies->title *movies.title

M t Phn t title ca cu trc movies Phn t title ca cu trc c tr bi movies Gi tr c tr bi phn t title ca cu trc
movies

Tng ng vi

(*movies).title *(movies.title)

Cc cu trc lng nhau


Cc cu trc c th c t lng nhau v vy mt phn t hp l ca mt cu trc c th l mt cu trc khc.
struct movies_t { char title [50];

Trang 73

Updatesofts.com

Ebooks Team

int year; } struct friends_t { char name [50]; char email [50]; movies_t favourite_movie; } charlie, maria; friends_t * pfriends = &charlie;

V vy, sau phn khai bo trn chng ta c th s dng cc biu thc sau:
charlie.name maria.favourite_movie.title charlie.favourite_movie.year pfriends->favourite_movie.year

(trong hai biu thc cui cng l tng ng). Cc khi nim c bn v cu trc c cp n trong phn ny l hon ton ging vi ngn ng C, tuy nhin trong C++, cu trc c m rng thm cc chc nng ca mt lp vi tnh cht c trng l tt c cc phn t ca n u l cng cng (public). Bn s c thm cc thng tin chi tit trong phn

Trang 74

Updatesofts.com

Ebooks Team

Cc kiu d liu t nh ngha.

Trong bi trc chng ta xem xt mt loi d liu c nh ngha bi ngi dng (ngi lp trnh): cu trc. Nhng c cn nhiu kiu d liu t nh ngha khc:

T nh ngha cc kiu d liu (typedef).


C++ cho php chng ta nh ngha cc kiu d liu ca ring mnh da trn cc kiu d liu c. c th lm vic chng ta s s dng t kho typedef, dng thc nh sau:
typedef existing_type new_type_name ;

trong existing_type l mt kiu d liu c bn hay bt k mt kiu d liu nh ngha v new_type_name l tn ca kiu d liu mi. V d
typedef typedef typedef typedef char C; unsigned int WORD; char * string_t; char field [50];

Trong trng hp ny chng ta nh ngha bn kiu d liu mi: C, WORD, string_t v field kiu char, unsigned int, char* kiu char[50], chng ta hon ton c th s dng chng nh l cc kiu d liu hp l:
C achar, anotherchar, *ptchar1; WORD myword; string_t ptchar2; field name; typedef c th hu dng khi bn mun

nh ngha mt kiu d liu c dng lp i lp li trong chng trnh hoc kiu d liu bn mun dng c tn qu di v bn mun n c tn ngn hn.

Union
Union cho php mt phn b nh c th c truy xut di dng nhiu kiu d liu khc nhau mc d tt c chng u nm cng mt v tr trong b nh. Phn khai bo v s dng n tng t vi cu trc nhng chc nng th khc hon ton:
union model_name { type1 element1; type2 element2; type3 element3; . . } object_name;

Trang 75

Updatesofts.com

Ebooks Team

Tt c cc phn t ca union u chim cng mt ch trong b nh. Kch thc ca n l kch thc ca phn t ln nht. V d:
union mytypes_t { char c; int i; float f; } mytypes;

nh ngha ba phn t
mytypes.c mytypes.i mytypes.f

mi phn t c mt kiu d liu khc nhau. Nhng v tt c chng u nm cng mt ch trong b nh nn bt k s thay i no i vi mt phn t s nh hng ti tt c cc thnh phn cn li. Mt trong nhng cng dng ca union l dng kt hp mt kiu d liu c bn vi mt mng hay cc cu trc gm cc phn t nh hn. V d:
union mix_t{ long l; struct { short hi; short lo; } s; char c[4]; } mix;

nh ngha ba phn t cho php chng ta truy xut n cng mt nhm 4 byte: mix.l, mix.s v mix.c m chng ta c th s dng tu theo vic chng ta mun truy xut n nhm 4 byte ny nh th no. Ti dng nhiu kiu d liu khc nhau, mng v cu trc trong union bn c th thy cc cch khc nhau m chng ta c th truy xut d liu.

Cc unions v danh
Trong C++ chng ta c th s dng cc unions v danh. Nu chng ta t mt union trong mt cu trc m khng tn (phn i sau cp ngoc nhn { }) union s tr thnh v danh v chng ta c th truy xut trc tip n cc phn t ca n m khng cn n tn ca union (c cn cng khng c). V d, hy xem xt s khc bit gia hai phn khai bo sau y: union union v danh

Trang 76

Updatesofts.com

Ebooks Team

struct { char title[50]; char author[50]; union { float dollars; int yens; } price; } book;

struct { char title[50]; char author[50]; union { float dollars; int yens; }; } book;

S khc bit duy nht gia hai on m ny l trong on m u tin chng ta t tn cho union (price) cn trong ci th hai th khng. Khi truy nhp vo cc phn t dollars v yens, trong trng hp th nht chng ta vit:
book.price.dollars book.price.yens

cn trong trng hp th hai:


book.dollars book.yens

Mt ln na ti nhc li rng v n l mt union, hai trng dollars v yens u chim cng mt ch trong b nh nn chng khng th gi hai gi tr khc nhau.

Kiu lit k (enum)


Kiu d liu lit k dng to ra cc kiu d liu cha mt ci g hi c bit mt cht, khng phi kiu s hay kiu k t hoc cc hng true v false. Dng thc ca n nh sau:
enum model_name { value1, value2, value3, . . } object_name;

V d, chng ta c th to ra mt kiu d liu mi c tn color lu tr cc mu vi phn khai bo nh sau:


enum colors_t {black, blue, green, cyan, red, purple, yellow, white};

Ch rng chng ta khng s dng bt k mt kiu d liu c bn no trong phn khai bo. Chng ta to ra mt kiu d liu mi m khng da trn bt k kiu d liu no c sn: kiu color_t, nhng gi tr c th ca kiu color_t c vit trong cp ngoc nhn {}. V d, sau khi khai bo kiu lit k, biu thc sau s l hp l:
colors_t mycolor; mycolor = blue; if (mycolor == green) mycolor = red;

Trang 77

Updatesofts.com

Ebooks Team

Trn thc t kiu d liu lit k c dch l mt s nguyn v cc gi tr ca n l cc hng s nguyn c ch nh. Nu iu ny khng oc ch nh, gi tr nguyn tng ng vi phn t u tin l 0 v cc gi tr tip theo c th tng ln 1, V vy, trong kiu d liu colors_t m chng ta nh ngha trn, white tng ng vi 0, blue tng ng vi 1, green tng ng vi 2 v c tip tc nh th. Nu chng ta ch nh mt gi tr nguyn cho mt gi tr no ca kiu d liu lit k (trong v d ny l phn t u tin) cc gi tr tip theo s l cc gi tr nguyn tip theo, v d:
enum months_t { january=1, february, march, april, may, june, july, august, september, october, november, december} y2k; trong trng hp ny, bin y2k c kiu d liu lit k months_t c th cha mt trong 12 gi tr t january n december v tng ng vi cc gi tr nguyn t 1 n 12, khng phi 0 n 11 v chng ta t january bng 1.

Trang 78

You might also like