You are on page 1of 79

Updatesofts.

com

Ebooks Team

C++ Cn b n v nng cao


M c l c: I. C b n v C++ (2) I. C u trc c a m t trng trnh C++ (2) II. Cc bi n ki u v h ng s (5) III. Cc ton t (13) IV. Giao ti p v i Console (19) II. Cc c u trc i u khi n v Hm (22) I. C u trc d li u i u khi n (22) II. Hm I (29) III. Hm II (34) III. D li u nng cao (41) I. M ng (41) II. Su k t (48) III. Con tr (54) IV. B nh ng (65) V. Cc c u trc (69) VI. Cc ki u d li u do ng i dng nh ngha. (typedef, union, enum) (75)

Trang 1

Updatesofts.com

Ebooks Team

C u trc c a m t chng trnh C++

C l m t trong nh ng cch t t nh t b t u h c m t ngn ng l p trnh l b ng m t chng trnh. V y y l chng trnh u tin c a 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 h u h t nh ng ng i h c ngh l p trnh vi t u tin v k t qu c a n l vi t cu "Hello, World" ln mn hnh. y l m t trong nh ng chng trnh n gi n nh t c th vi t b ng C++ nhng n bao g m nh ng ph n c b n m m i chng trnh C++ c. Hy cng xem xt t ng dng m t :
// my first program in C++

y l dng ch thch. T t c cc dng b t u b ng hai d u s (//) c coi l cht thch m chng khng c b t k m t nh h ng no n ho t ng c a chng trnh. Chng c th c cc l p trnh vin dng gi i thch hay bnh ph m bn trong m ngu n c a chng trnh. Trong tr ng h p ny, dng ch thch l m t gi i thch ng n g n nh ng g m chng trnh chng ta lm.
#include <iostream.h>

Cc cu b t u b ng d u (#) c dng cho preprocessor (ai d ch h ti t ny v i). Chng khng ph i l nh ng dng m th c hi n nhng c dng bo hi u cho trnh d ch. y cu l nh #include <iostream.h> bo cho trnh d ch bi t c n ph i "include" th vi n iostream. y l m t th vi n vo ra c b n trong C++ v n ph i c "include" v n s c dng trong chng trnh. y l cch c i n s d ng th vi n iostream
int main ()

Dng ny tng ng v i ph n b t u khai bo hm main. Hm main l i m m t t c cc chng trnh C++ b t u th c hi n. N khng ph thu c vo v tr c a hm ny ( u, cu i hay gi a c a m ngu n) m n i dung c a n lun c th c hi n u tin khi chng trnh b t u. Thm vo , do nguyn nhn ni trn, m i chng trnh C++ u ph i t n t i m t hm main. Theo sau main l m t c p ngo c n b i v n l m t hm. Trong C++, t t c cc hm m sau l m t c p ngo c n () th c ngha l n c th c ho c khng c tham s
Trang 2

Updatesofts.com

Ebooks Team

(khng b t bu c). N i dung c a hm main ti p ngay sau ph n khai bo chnh th c c bao trong cc ngo c nh n ( { } ) nh trong v d c a chng ta
cout << "Hello World";

Dng l nh ny lm vi c quan tr ng nh t c a chng trnh. cout l m t dng (stream) output chu n trong C++ c nh ngha trong th vi n iostream v nh ng g m dng l nh ny lm l g i chu i k t "Hello World" ra mn hnh. Ch r ng dng ny k t thc b ng d u ch m ph y ( ; ). K t ny c dng k t thc m t l nh v b t bu c ph i c sau m i l nh trong chng trnh C++ c a b n (m t trong nh ng l i ph bi n nh t c a nh ng l p trnh vin C++ l qun m t d u ch m ph y).
return 0;

L nh return k t thc hm main v tr v m i sau n, trong tr ng h p ny l 0. y l m t k t thc bnh th ng c a m t chng trnh khng c m t l i no trong qu trnh th c hi n. Nh b n s th y trong cc v d ti p theo, y l m t cch ph bi n nh t k t thc m t chng trnh C++. Chng trnh c c u trc thnh nh ng dng khc nhau n tr nn d c hn nhng hon ton khng ph i b t bu c ph i lm v y. V d , thay v vi t
int main () { cout << " Hello World "; return 0; }

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

cng cho m t k t qu chnh xc nh nhau. Trong C++, cc dng l nh c phn cch b ng d u ch m ph y ( ;). Vi c chia chng trnh thnh cc dng ch nh m cho n d c hn m thi.

Cc ch thch.
Cc ch thch c cc l p trnh vin s d ng ghi ch hay m t trong cc ph n c a chng trnh. Trong C++ c hai cch ch thch
// Ch thch theo dng /* Ch thch theo kh i */

Ch thch theo dng b t u t c p d u x (//) cho n cu i dng. Ch thch theo kh i b t u b ng /* v k t thc b ng */ v c th bao g m nhi u 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; }

N u b n vi t cc ch thch trong chng trnh m khng s d ng cc d u //, /* hay */, trnh d ch s coi chng nh l cc l nh C++ v s hi n th cc l i.

Trang 4

Updatesofts.com

Ebooks Team

Cc bi n, ki u v h ng s
Identifiers
M t tn (indentifiers) h p l l m t chu i g m cc ch ci, ch s ho c k t g ch d i. Chi u di c a m t tn l khng gi i h n. K t tr ng, cc k t nh d u u khng th c m t trong m t tn. Ch c ch ci, ch s v k t g ch d i l c cho php. Thm vo , m t tn bi n lun ph i b t u b ng m t ch ci. Chng cng c th b t u b ng k t g ch d i ( _ ) nhng k t ny th ng c dnh cho cc lin k t bn ngoi (external link). Khng bao gi chng b t u b ng m t ch s . M t lu t n a m b n ph i quan tm n khi t o ra cc tn c a ring mnh l chng khng c trng v i b t k t kho no c a ngn ng hay c a trnh d ch, v d cc tn sau y lun lun c coi l t kho theo chu n ANSI-C++ v do v y 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 , m t s bi u di n khc c a cc ton t (operator) cng khng c dng lm tn v chng l nh ng t c dnh ring trong m t s tr ng h p.
and, and_eq, bitand, bitor, compl, not, not_eq, or, or_eq, xor, xor_eq

Trnh d ch c a b n c th thm m t t dnh ring c trng khc. V d , r t nhi u trnh d ch 16 bit (nh cc trnh d ch cho DOS) cn c th cc t kho far, huge v near. Ch : Ngn ng C++ l "case sensitive" c ngha l phn bi t ch hoa ch th ng. Do v y bi n RESULT khc v i result cng nh Result.

Cc ki u d li u
Khi l p trnh, chng ta lu tr cc bi n trong b nh c a my tnh nhng my tnh ph i bi t chng ta mu n lu tr g trong chng v cc ki u d li u khc nhau s c n l ng b nh khc nhau.

Trang 5

Updatesofts.com

Ebooks Team

B nh c a my tnh chng ta c t ch c thnh cc byte. M t byte l l ng b nh nh nh t m chng ta c th qu n l. M t byte c th dng lu tr m t lo i d li u nh nh l ki u s nguyn t 0 n 255 hay m t k t . Nhng my tnh c th x l cc ki u d li u ph c t p hn b ng cch g p nhi u byte l i v i nhau, nh s nguyn di hay s th p phn. Ti p theo b n s c m t danh sch cc ki u d li u c b n trong C++ cng nh mi n gi tr m chng c th bi u di n Tn char short long S byte 1 2 4 M t K t hay ki u s nguyn 8-bit ki u s nguyn 16-bit ki u s nguyn 32-bit S nguyn. di c a n ph thu c vo h th ng, nh trong MS-DOS n l 16-bit, trn Windows 9x/2000/NT l 32 bit... D ng d u ph y ng D ng d u ph y ng v i chnh xc g p i D ng d u ph y ng v i chnh xc hn n a Gi tr logic. N m i c thm vo chu n ANSI-C++. B i v y khng ph i t t c cc trnh d ch u h tr n. Mi n gi tr c d u: -128 to 127 khng d u: 0 to 255 c d u: -32763 to 32762 khng d u: 0 to 65535 c d u:-2147483648 to 2147483647 khng d u: 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

ho c false

Ngoi cc ki u d li u c b n ni trn cn t n t i cc con tr v cc tham s khng ki u (void) m chng ta s xem xt sau.

Khai bo m t bi n
c th s d ng m t bi n trong C++, u tin chng ta ph i khai bo n, ghi r n l ki u d li u no. Chng ta ch c n vi t tn ki u (nh int, short, float...) ti p theo sau l m t tn bi n h p l . V d
int a; float mynumber;

Dng u tin khai bo m t bi n ki u int v i tn l a. Dng th hai khai bo m t bi n ki u float v i tn mynumber. Sau khi c khai bo, cc bi n trn c th c dng trong ph m vi c a chng trong chng trnh.

Trang 6

Updatesofts.com

Ebooks Team

N u b n mu n khai bo m t vi bi n c cng m t ki u v b n mu n ti t ki m cng s c vi t b n c th khai bo chng trn m t dng, ngn cch cc tn b ng d u ph y. V d


int a, b, c;

khai bo ba bi n ki u int (a,b v c) v hon ton tng ng v i :


int a; int b; int c;

Cc ki u s nguyn (char, short, long and int) c th l s c d u hay khng d u tu theo mi n gi tr m chng ta c n bi u di n. V v y khi xc nh m t ki u s nguyn chng ta t t kho signed ho c unsigned tr c tn ki u d li u. V d :
unsigned short NumberOfSons; signed int MyAccountBalance;

N u ta khng ch r signed or unsigned n s c coi l c d u, v v y trong khai bo th hai chng ta c th vi t :


int MyAccountBalance

cng hon ton tng ng v i dng khai bo trn. Trong th c t , r t t khi ng i ta dng n t kho signed. Ngo i l duy nh t c a lu t ny ki u char. Trong chu n ANSIC++ n l ki u d li u khc v i signed char v unsigned char. c th th y r hn vi c khai bo trong chng trnh, chng ta s xem xt m t o n 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 l ng n u nh vi c khai bo c v hi l lng v i b n. B n s th y ph n chi ti t cn l i trong ph n ti p theo

Kh i t o cc bi n
Khi khai bo m t bi n, gi tr c a n m c nhin l khng xc nh. Nhng c th b n s mu n n mang m t gi tr xc nh khi c khai bo. lm i u , b n ch c n vi t d u b ng v gi tr b n mu n bi n s mang:
type identifier = initial_value ;

V d , n u chng ta mu n khai bo m t bi n int l a ch a gi tr 0 ngay t khi kh i t o, chng ta s vi t :


int a = 0;

B xung vo cch kh i t o ki u C ny, C++ cn c thm m t cch m i kh i t o bi n b ng cch b c m t c p ngo c n sau gi tr kh i t o. V d :


int a (0);

C hai cch u h p l trong C++.

Ph m vi ho t ng c a cc bi n
T t c cc bi n m chng ta s s d ng u ph i c khai bo tr c. M t i m khc bi t gi a Cv C++ l trong C++ chng ta c th khai bo bi n b t k ni no trong chng trnh, th m ch l ngay gi a cc l nh th c hi n ch khng ch l u kh i l nh nh trong C. M c d v y chng ta v n nn theo cch c a ngn ng C khi khai bo cc bi n b i v n s r t h u d ng khi c n s a ch a m t chng trnh c t t c cc ph n khai bo c g p l i v i nhau. B i v y, cch thng d ng nh t khai bo bi n l t n trong ph n b t u c a m i hm (bi n c c b ) hay tr c ti p trong thn chng trnh, ngoi t t c cc hm (bi n ton c c). Global variables (bi n ton c c) c th c s d ng ngay sau khi n c khai bo. b t k u trong chng trnh,

T m ho t ng c a local variables (bi n c c b ) b gi i h n trong ph n m m n c khai bo. N u chng c khai bo u m t hm (nh hm main), t m ho t ng s l ton b hm main. i u c ngha l trong v d trn, cc bi n c khai bo trong

Trang 8

Updatesofts.com

Ebooks Team

hm main() ch c th c dng trong hm , khng c dng

b t k u khc.

Thm vo cc bi n ton c c v c c b , cn c cc bi n ngoi (external). Cc bi n ny khng nh ng c dng trong m t file m ngu n m cn trong t t c cc file c lin k t trong chng trnh. Trong C++ t m ho t ng c a m t bi n chnh l kh i l nh m n c khai bo (m t kh i l nh l m t t p h p cc l nh c g p l i trong m t b ng cc ngo c nh n { } ). N u n c khai bo trong m t hm t m ho t ng s l hm , cn n u c khai bo trong vng l p th t m ho t ng s ch l vng l p ....

Cc h ng s
M t h ng s l b t k m t bi u th c no mang m t gi tr c nh, nh: Cc s nguyn
1776 707 -273

chng l cc h ng mang gi tr s . Ch r ng khi bi u di n m t h ng ki u s chng ta khng c n vi t d u ngo c kp hay b t k d u hi u no khc. Thm vo nh ng s h c s 10 ( ci m t t c chng ta u bi t) C++ cn cho php s d ng cc h ng s c s 8 v 16. bi u di n m t s h c s 8 chng ta t tr c n k t 0, bi u di n s h c s 16 chng ta t tr c n hai k t 0x. V d :
75 0113 0x4b // C s 10 // c s 8 // c s 16

Cc s th p phn (d ng d u ph y ng) Chng bi u di n cc s v i ph n th p phn v/ho c s m. Chng c th bao g m ph n th p phn, k t e (bi u di n 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 t n t i cc h ng khng ph i ki u s nh:


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

Trang 9

Updatesofts.com

Ebooks Team

Hai bi u th c u tin bi u di n cc k t n, cc k t c t trong d u nhy n ('), hai bi u th c ti p theo bi u th c cc xu k t c t trong d u nhy kp ("). Khi vi t cc k t n hay cc xu k t c n ph i chng trong cc d u nhy phn bi t v i cc tn bi n hay cc t kho. Ch :
x 'x'

x tr n bi n x trong khi 'x' l k t h ng 'x'. Cc k t n v cc xu k t c m t tnh ch t ring bi t l cc m i u khi n. Chng l nh ng k t c bi t m khng th c vi t b t k u khc trong chng trnh nh l m xu ng dng (\n) hay tab (\t). T t c u b t u b ng d u x ng c (\). Sau y l danh sch cc m i u khi n :
\n \r \t \v \b \f \a \' \" \ \\

xu ng dng li v u dng k t tab cn th ng theo chi u d c backspace sang trang Ku bp d u nhy n d u nhy kp d uh i k t x ng c

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

Thm vo , bi u di n m t m ASCII b n c n s d ng k t x ng c (\) ti p theo l m ASCII vi t trong h c s 8 hay c s 16. Trong tr ng h p u m ASCII c vi t ngay sau d u s ng c, trong tr ng h p th hai, s d ng s trong h c s 16 b n c n vi t k t x tr c s (v d \x20 hay \x4A). Cc h ng chu i k t c th c vi t trn nhi u dng n u m i dng c k t thc b ng m t d u s ng c (\):

Trang 10

Updatesofts.com

Ebooks Team

"string expressed in \ two lines"

B n c th n i m t vi h ng xu k t ngn cch b ng m t hay vi d u tr ng, k t tab, xu ng dng hay b t k k t tr ng no khc.


"we form" "a unique" "string" "of characters"

nh ngha cc h ng (#define)
B n c th nh ngha cc h ng v i tn m b n mu n c th s d ng th ng xuyn m khng m t ti nguyn cho cc bi n b ng cch s d ng ch th #define. y l d ng c a n:
#define identifier value

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

chng nh ngha ba h ng s m i. Sau khi khai bo b n c th s d ng chng nh b t k cc h ng s no khc, v d


circle = 2 * PI * r; cout << NEWLINE;

Trong th c t vi c duy nh t m trnh d ch lm khi n tm th y m t ch th #define l thay th cc tn h ng t i b t k ch no chng xu t hi n (nh trong v d tr c, PI, NEWLINE hay WIDTH) b ng gi tr m chng c nh ngha. V v y cc h ng s #define c coi l cc h ng s macro Ch th #define khng ph i l m t l nh th c thi, n l ch th ti n x l (preprocessor), l l do trnh d ch coi c dng l m t ch th v dng khng c n k t thc b ng d u ch m ph y. N u b n thm d u ch m ph y vo cu i dng, n s c coi l m t ph n c a gi tr nh ngha h ng.

Khai bo cc h ng (const)
V i ti n t const b n c th khai bo cc h ng v i m t ki u xc nh nh l b n lm v i m t bi n
const int width = 100; const to char tab = '\t'; const zip = 12440;

Trang 11

Updatesofts.com

Ebooks Team

Trong tr ng h p ki u khng c ch r (nh trong v d cu i) trnh d ch s coi n l ki u int

Trang 12

Updatesofts.com

Ebooks Team

Cc ton t
Qua bi tr c chng ta bi t n s t n t i c a cc bi n v cc h ng. Trong C++, thao tc v i chng ta s d ng cc ton t , l cc t kho v cc d u khng c trong b ng ch ci nhng l i c trn h u h t cc bn phm trn th gi i. Hi u bi t v chng l r t quan tr ng v y l m t trong nh ng thnh ph n c b n c a ngn ng C++.
Ton t gn (=). Ton t gn dng gn m t gi tr no cho m t bi n a = 5; gn gi tr nguyn 5 cho bi n a. V tri b t bu c ph i l m t bi n cn v ph i c th l b t k h ng, bi n hay k t qu c a m t bi u th c.

C n ph i nh n m nh r ng ton t gn lun c th c hi n t tri sang ph i v khng bao gi o ng c


a = b; gn gi tr c a bi n a b ng gi tr ang ch a trong bi n b. Ch r ng chng ta ch gn gi tr c a b cho a v s thay i c a b sau s khng nh h ng n gi tr c a a.

M t thu c tnh c a ton t gn trong C++ gp ph n gip n v t ln cc ngn ng l p trnh khc l vi c cho php v ph i c th ch a cc php gn khc. V d :
a = 2 + (b = 5); tng ng v i b = 5; a = 2 + b;

V v y bi u th c sau cng h p l trong C++


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

l:

Trang 13

Updatesofts.com

Ebooks Team

% l y ph n d (trong php chia)

Th t th c hi n cc ton t ny cng gi ng nh chng c th c hi n trong ton h c. i u duy nh t c v hi l i v i b n l php l y ph n d, k hi u b ng d u ph n trm (%). y chnh l php ton l y ph n d trong php chia hai s nguyn v i nhau. V d , n u a = 11 % 3;, bi n a s mang gi tr 2 v 11 = 3*3 +2.
Cc ton t gn ph c h p (+=, -=, *=, M t c tnh c a ngn ng C++ lm tch chnh l cc ton t gn ph c h bi n v i m t trong nh ng ton t c /=, %=, >>=, <<=, &=, ^=, |=) cho n n i ti ng l m t ngn ng sc p cho php ch nh s a gi tr c a m t b n sau:

value += increase; tng ng v i value = value + increase; a -= 5; tng ng v i a = a - 5; a /= b; tng ng v i a = a / b; price *= units + 1; tng ng v i price = price * (units + 1); v tng t cho t t c cc ton t khc. Tng v gi m. M t v d khc c a vi c ti t ki m khi vi t m l nh l ton t tng (++) v gi m (--). Chng tng ho c gi m gi tr ch a trong m t bi n i 1. Chng tng ng v i +=1 ho c -=1. V v y, cc dng sau l tng ng: a++; a+=1; a=a+1;

M t tnh ch t c a ton t ny l n c th l ti n t ho c h u t , c ngha l c th vi t tr c tn bi n (++a) ho c sau (a++) v m c d trong hai bi u th c r t n gi n n c cng ngha nhng trong cc thao tc khc khi m k t qu c a vi c tng hay gi m c s d ng trong m t bi u th c th chng c th c m t khc bi t quan tr ng v ngha: Trong tr ng h p ton t c s d ng nh l m t ti n t (++a) gi tr c tng tr c khi bi u th c c tnh v gi tr tng c s d ng trong bi u th c; trong tr ng h p ng c l i (a++) gi tr trong bi n a c tng sau khi tnh ton. Hy ch s khc bi t :
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 bi u th c v i nhau chng ta c th s d ng cc ton t quan h . Theo chu n ANSI-C++ th gi tr c a thao tc quan h ch c th l gi tr logic - chng ch c th c gi tr true ho c false, tu theo bi u th c k t qu l ng hay sai.

Trang 14

Updatesofts.com

Ebooks Team

Sau y l cc ton t == B ng != Khc > L n hn

quan h b n c th s

d ng trong C++

Nh hn > = L n hn ho c b ng < = Nh hn ho c b ng <

V d :
(7 == 5) s tr gi tr false (6 >= 6) s tr gi tr true t t nhin thay v s d ng cc s , chng ta c th s th c 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 C n ch r ng = (m t d u b ng) lf hon ton khc v i == (hai d u b ng). D u u tin l m t ton t gn ( gn gi tr c a bi u th c bn ph i cho bi n bn tri) v d u cn l i (==) l m t ton t quan h nh m so snh xem hai bi u th c c b ng nhau hay khng. Trong nhi u trnh d ch c tr c chu n ANSI-C++ cng nh trong ngn ng C, cc ton t quan h khng tr v gi tr logic true ho c false m tr v gi tr int v i 0 tng ng v i false cn gi tr khc 0 (th ng l 1) th tng ng v i true. Cc ton t logic ( !, &&, || ). Ton t ! tng ng v i ton t logic NOT, n ch c m t i s pha bn ph i v vi c duy nh t m n lm l i ng c gi tr c a i s t true sang false ho c ng c l i. V d : !(5 == 5) tr v false v bi u th c bn ph i (5 == 5) c gi tr true. !(6 <= 4) tr v true v (6 <= 4)c gi tr false. !true !false tr v false. tr v true. d ng b t c bi u

Ton t logic && v || c s d ng khi tnh ton hai bi u th c l y ra m t k t qu duy nh t. Chng tng ng v i cc ton t logic AND v OR. K t qu c a chng ph thu c vo m i quan h c a hai i s : i s th a true true false false V d : nh t i s th b true false true false hai K t qu K t qu a && b a || b 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 i u ki n ( ? ). Ton t i u ki n tnh ton m t bi u th c v tr v m t gi tr khc tu thu c vo bi u th c l ng hay sai. C u trc c a n nh sau: condition ? result1 : result2 N u condition l true th gi tr tr v s l result1, n u khng gi tr tr v l result2. 7==5 ? 4 : 3 tr v 3 v 7 khng b ng 5. 7==5+2 ? 4 : 3 tr v 4 v 7 b ng 5+2. 5>3 ? a : b tr v a, v 5 l n hn 3. a>b ? a : b tr v gi tr l n hn, a ho c b.

Cc ton t thao tc bit ( &, |, ^, ~, <<, >> ). Cc ton t thao tc bit thay i cc bit bi u di n m t bi n, c ngha l thay i bi u di n nh phn c a chng ton t & | ^ ~ << >> asm M t AND Logical AND OR Logical OR XOR Logical exclusive OR NOT o ng c bit SHL D ch bit sang tri SHR D ch bit sang ph i

Cc ton t chuy n i ki u Cc ton t chuy n i ki u cho php b n chuy n i d li u t ki u ny sang ki u khc. C vi cch lm vi c ny trong C++, cch c b n nh t c th a k t ngn ng C l t tr c bi u th c c n chuy n i tn ki u d li u c b c trong c p ngo c n (), v d : int i; float f = 3.14; i = (int) f; o n m trn chuy n s th p phn 3.14 sang m t s nguyn (3). y, ton t chuy n i ki u l (int). M t cch khc lm i u ny trong C++ l s d ng cc constructors ( m t s sch thu t ng ny c d ch l c u t nhng ti th y n c v khng xui tai l m) thay v dng cc ton t : t tr c bi u th c c n chuy n i ki u tn ki u m i v bao b c bi u th c gi a m t c p ngo c n. i = int ( f );

Trang 16

Updatesofts.com

Ebooks Team

C hai cch chuy n i ki u u h p l trong C++. Thm vo ANSI-C++ cn c nh ng ton t chuy n i ki u m i c trng cho l p trnh h ng i t ng. sizeof() Ton t ny c m t tham s , c th l m t ki u d tr v kch c b ng byte c a ki u hay i t ng . a = sizeof (char); a s mang gi tr 1 v ki u char lun c kch c 1 byte trn m i h th ng. Gi tr tr v c a sizeof l m t h ng s v v y n lun lun c tnh tr c khi chng trnh th c hi n. Cc ton t khc Trong C++ cn c m t s cc ton t khc, nh cc ton t lin quan n con tr hay l p trnh h ng i t ng. Chng s c ni n c th trong cc ph n tng ng.

li u hay l m t bi n v

Th t u tin c a cc ton t
Khi vi t cc bi u th c ph c t p v i nhi u ton h ng cc b n c th t h i ton h ng no c tnh tr c, ton h ng no c tnh sau. V d nh trong bi u th c sau: a = 5 + 7 % 2 c th c hai cch hi u sau: a = 5 + (7 % 2) a = (5 + 7) % 2

v i k t qu l 6, ho c v i k t qu l 0

Cu tr l i ng l bi u th c u tin. V nguyn nhn ni trn, ngn ng C++ thi t l p m t th t u tin gi a cc ton t , khng ch ring cc ton t s h c m t t c cc ton t c th xu t hi n trong C++. Th t u tin c a chng c li t k trong b ng sau theo th t t cao xu ng th p. Th t 1 2 Ton t :: () [ ] -> . sizeof ++ -~ 3 ! &* (type) +4 */% tng/gi m o ng c bit NOT Ton t con tr Chuy n i ki u Dng ho c m Ton t s h c Tri Ph i M t scope Associativity Tri Tri

Trang 17

Updatesofts.com

Ebooks Team

5 6 7 8 9 10 11 12 13

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

Ton t D ch bit Ton t Ton t Ton t bit Ton t Ton t Ton t

s h c quan h quan h thao tc logic

Tri Tri Tri Tri Tri Tri

i u ki n Ph i gn Ph i Tri

D u ph y

Associativity nh ngha trong tr ng h p c m t vi ton t c cng th t u tin th ci no s c tnh tr c, ton t pha xa nh t bn ph i hay l xa nh t bn tri. N u b n mu n vi t m t bi u th c ph c t p m l i khng ch c l m v th t u tin c a cc ton t th nn s d ng cc ngo c n. Cc b n nn th c hi n i u ny v n s gip chng trnh d c hn.

Trang 18

Updatesofts.com

Ebooks Team

Giao ti p v i console.
Console l giao di n c b n c a my tnh. Bn phm l thi t b vo c b n cn mn hnh l thi t b ra c b n. Trong th vi n iostream c a C++, cc thao tc vo ra c b n c a m t chng trnh c h tr b i hai dng d li u : cin nh p d li u v cout xu t. Thm vo , cn c cerr v clog l hai dng d li u dng hi n th cc thng bo l i trn thi t b ra chu n (th ng l mn hnh) ho c ra m t file. Thng th ng cout c gn v i mn hnh cn cin c gn v i bn phm. S d ng hai dng d li u ny b n s c th giao ti p v i ng i s d ng v b n c th hi n th cc thng bo ln mn hnh cng nh nh n d li u t bn phm.

Xu t d li u (cout)
Dng cout c s d ng v i ton t qu t i << (overloaded - b n s hi u r hn v thu t ng ny trong ph n l p trnh h ng i t ng)
cout << "Output sentence"; // Hi n th Output sentence ln mn hnh cout << 120; // Hi n th s 120 ln mn hnh cout << x; // Hi n th n i dung bi n x ln mn hnh

Ton t << c g i l ton t chn v n chn d li u i sau n vo dng d li u ng tr c. Trong v d trn n chn chu i "Output sentence", h ng s 120 v bi n x vo dng d li u ra cout.Ch r ng dng u tin chng ta s d ng d u ngo c kp v l m t chu i k t . Khi chng ta mu n s d ng cc h ng xu k t ta ph i t chng trong c p d u ngo c kp chng c th c phn bi t v i cc bi n. V d , hai l nh sau y l hon ton khc nhau:
cout << "Hello"; cout << Hello; // Hi n th Hello ln mn hnh // Hi n th n i dung c a bi n Hello ln mn hnh

Ton t chn (<<) c th c s d ng nhi u l n trong m t cu l nh: Cu l ln mn hnh. S ti n l i c a vi c s d ng l p l i ton t chn (<<) th hi n r khi chng ta mu n hi n th nhi u bi n v h ng hn l ch m t bi n: C n cu l nh sau :
cout << "Hello, I am " << age << " years old and my email address is " << email_add; ph i nh n m nh r ng cout khng nh y xu ng dng sau khi xu t d li u, v v cout << "Hello, " << "I am " << "a C++ sentence"; nh trn s in thng bo Hello, I am a C++ sentence

y hai

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

s c hi n th trn mn hnh:
This is a sentence.This is another sentence.

B i v y khi mu n xu ng dng chng ta ph i s d ng k t xu ng dng, trong C++ l \n:

Trang 19

Updatesofts.com

Ebooks Team

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

s vi t ra mn hnh nh sau:
First sentence. Second sentence. Third sentence.

Thm vo , xu ng dng b n c th s d ng 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 m t tc d ng c bi t khi n c dng v i cc dng d li u s d ng b m: cc b m s c flushed ( chuy n ton b thng tin t b m ra dng d li u). Tuy nhin, theo m c nh cout khng s d ng b m.

Nh p d li u (cin).
Thao tc vo chu n trong C++ c th c hi n b ng cch s d ng ton t qu t i >> v i dng cin. Theo sau ton t ny l bi n s lu tr d li u c c vo. V d :
int age; cin >> age;

khai bo bi n age c ki u int v i nh p d li u t cin (bn phm) lu tr n trong bi n ki u nguyn ny.


cin

ch b t u s l d li u nh p t bn phm sau khi phm Enter c g. V v y d b n ch nh p m t k t th cin v n s kin nh n ch cho n khi b n 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; }

Ng i s d ng chng trnh c th l m t trong nh ng nguyn nhn gy ra l i trong m t chng trnh n gi n s d ng cin (nh chng trnh trn). Trong khi b n mu n nh n m t s nguyn th ng i s d ng l i nh p vo tn c a h (l m t xu k t ). K t qu l chng trnh s ch y sai v khng ph i l nh ng g m chng trnh mong i t ng i dng. B i v y khi b n s d ng d li u nh p vo t cin b n ph i tin ch c r ng ng i dng s hon ton h p tc v r ng anh ta s khng nh p tn c a mnh khi chng trnh yu c u nh p s nguyn. Sau ny, khi nghin c u vi c s d ng cc xu k t chng ta s xem xt cc gi i php kh thi gi i quy t cc l i lo i ny. B n c th dng cin nh p m t lc nhi u d li u t ng i dng:
cin >> a >> b;

tng ng v i
cin >> a; cin >> b;

Trong c hai tr ng h p ng i s d ng ph i cung c p hai d li u, m t cho bi n a v m t cho bi n b v c ngn cch b i m t d u tr ng h p l : m t d u cch, d u tab hay k t xu ng dng. Trong tr ng h p ki u khng c ch r (nh trong v d cu i) trnh d ch s coi n l ki u int.

Trang 21

Updatesofts.com

Ebooks Team

Cc c u trc i u khi n.
M t chng trnh th ng khng ch bao g m cc l nh tu n t n i ti p nhau. Trong qu trnh ch y n c th r nhnh hay l p l i m t o n m no . lm i u ny chng ta s d ng cc c u trc i u khi n. Cng v i vi c gi i thi u cc c u trc i u khi n chng ta cng s ph i bi t t i m t khi ni m m i: kh i l nh, l m t nhm cc l nh c ngn cch b i d u ch m ph y (;) nhng c g p trong m t kh i gi i h n b i m t c p ngo c nh n: { v }. H u h t cc c u trc i u khi n m chng ta s xem xt trong chng ny cho php s d ng m t l nh n hay m t kh i l nh lm tham s , tu thu c vo chng ta c t n trong c p ngo c nh n hay khng.

C u trc i u ki n: if v else
C u trc ny c dng khi m t l nh hay m t kh i l nh ch c th c hi n khi m t i u ki n no tho mn. D ng c a n nh sau:
if (condition) statement

trong condition l bi u th c s c tnh ton. N u i u ki n l true, statement c th c hi n. N u khng statement b b qua (khng th c hi n) v chng trnh ti p t c th c hi n l nh ti p sau c u trc i u ki n. V d , o n m sau y s vi t x is 100 ch khi bi n x ch a gi tr 100:
if (x == 100) cout << "x is 100";

N u chng ta mu n c hn m t l nh c th c hi n trong tr ng h p condition l true chng ta c th ch nh m t kh i l nh b ng cch s d ng m t c p ngo c nh n { }:


if (x == 100) { cout << "x is "; cout << x; }

Chng ta cng c th ch nh i u g s x y ra n u i u ki n khng c tho mn b ng cch s u d ng t kho else. N c s d ng cng v i 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";

C u trc if + else c th c mc n i ki m tra nhi u gi tr . V d sau y s ki m tra xem gi tr ch a trong bi n x l dng, m hay b ng khng.
if (x > 0) cout << "x else if (x < cout << "x else cout << "x is positive"; 0) is negative"; is 0";

Cc c u trc l p
M c ch c a cc vng l p l l p l i m t thao tc v i m t s l n nh t nh ho c trong khi m t i u ki n no cn tho mn. Vng l p while . D ng c a n nh sau:
while (expression) statement

v ch c nng c a n n gi n ch l l p l i statement khi i u ki n expression cn tho mn. V d , chng ta s vi t m t chng trnh m ng c s d ng vo l p 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 ch y ng i s d ng c yu c u nh p vo m t s m ng c. Sau , khi vng l p while b t u n u s m ng i dng nh p vo tho mn i u ki n i u ki n n>0 kh i l nh s c th c hi n m t s l n khng xc nh ch ng no i u ki n (n>0) cn c tho mn.

Trang 23

Updatesofts.com

Ebooks Team

Chng ta c n ph i nh r ng vng l p ph i k t thc m t i m no , v v y bn trong vng l p chng ta ph i cung c p m t phng th c no bu c condition tr thnh sai n u khng th n s l p l i mi mi. Trong v d trn vng l p ph i c l nh --n; lm cho condition tr thnh sai sau m t s l n l p. Vng l p do-while D ng th c:
do statement while (condition);

Ch c nng c a n l hon ton gi ng vng l p while ch tr c m t i u l i u ki n i u khi n vng l p c tnh ton sau khi statement c th c hi n, v v y statement s c th c hi n t nh t m t l n ngay c khi condition khng bao gi c tho mn. V d , chng trnh d i y s vi t ra b t k s no m b n nh p vo cho n khi b n nh p 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 l p do-while th ng c dng khi i u ki n k t thc vng l p n m trong vng l p, nh trong v d trn, s m ng i dng nh p vo l i u ki n ki m tra k t thc vng l p. N u b n khng nh p s 0 trong v d trn th vng l p s khng bao gi ch m d t. Vng l p for . D ng th c:
for (initialization; condition; increase) statement;

v ch c nng chnh c a n l l p l i statement ch ng no condition cn mang gi tr ng, nh trong vng l p while. Nhng thm vo , for cung c p ch dnh cho l nh kh i t o v l nh tng. V v y vng l p ny c thi t k c bi t l p l i m t hnh ng v i m t s l n xc nh. Cch th c ho t ng c a n nh sau:

Trang 24

Updatesofts.com

Ebooks Team

1, initialization c th c hi n. Ni chung n t m t gi kh ban u cho bi n i u khi n. L nh ny c th c hi n ch m t l n. 2, condition c ki m tra, n u n l ng vng l p ti p t c cn n u khng vng l p k t thc v statement c b qua. 3, statement c th c hi n. N c th l m t l nh n ho c l m t kh i l nh c bao trong m t c p ngo c nh n. 4, Cu i cng, increase c th c hi n tng bi n i u khi n v vng l p quay tr l i b c 2. Sau y l m t v d m ng c s d ng 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!

Ph n kh i t o v l nh tng khng b t bu c ph i c. Chng c th c b qua nhng v n ph i c d u ch m ph y ngn cch gi a cc ph n. V v y, chng ta c th vi t for (;n<10;) ho c for (;n<10;n++). B ng cch s d ng d u ph y, chng ta c th dng nhi u l nh trong b t k tr ng no trong vng for, nh l trong ph n kh i t o. V d chng ta c th kh i t o m t lc nhi u bi n trong vng l p:
for ( n=0, i=100 ; n!=i ; n++, i-- ) { // ci g y cng c... }

Vng l p ny s th c hi n 50 l n n u nh n v i khng b thay i trong thn vng l p:

Cc l nh r nhnh v l nh nh y
L nh break. S d ng break chng ta c th thot kh i vng l p ngay c khi i u ki n n k t thc cha c tho mn. L nh ny c th c dng k t thc m t vng l p

Trang 25

Updatesofts.com

Ebooks Team

khng xc nh hay bu c n ph i k t thc gi a ch ng thay v k t thc m t cch bnh th ng. V d , chng ta s d ng vi c m ng c tr c khi n k t 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!

L nh continue. L nh continue lm cho chng trnh b qua ph n cn l i c a vng l p v nh y sang l n l p ti p theo. V d chng ta s b qua s 5 trong ph n m ng c:
// 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!

L nh goto. L nh ny cho php nh y v i u ki n t i b t k i m no trong chng trnh. Ni chung b n nn trnh dng n trong chng trnh C++. Tuy nhin chng ta v n c m t v d dng l nh goto m ng c:
// 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

M c ch c a exit l k t thc chng trnh v tr v m t m xc nh. D ng th c c a n nh sau


void exit (int exit code); exit code c dng b i m t s h i u hnh ho c c th c dng b i cc chng trnh g i. Theo quy c, m tr v 0 c ngha l chng trnh k t thc bnh th ng cn cc gi tr khc 0 c ngha l c l i.

C u trc l a ch n: switch.
C php c a l nh switch hi c bi t m t cht. M c ch c a n l ki m tra m t vi gi tr h ng cho m t bi u th c, tng t v i nh ng g chng ta lm u bi ny khi lin k t m t vi l nh if v else if v i nhau. D ng th c c a 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 ho t ng theo cch sau: switch tnh bi u th c v ki m tra xem n c b ng hay khng, n u ng th n th c hi n block of instructions 1 cho n khi tm th y t kho break, sau nh y n ph n cu i c a c u trc l a ch n switch. Cn n u khng, switch s ki m tra xem bi u th c c b ng constant2 hay khng. N u ng n s th c hi n block of instructions 2 cho n khi tm th y t kho break. Cu i cng, n u gi tr bi u th c khng b ng b t k h ng no c ch nh trn (b n c th ch nh bao nhiu cu l nh case tu thch), chng trnh s th c hi n cc l nh trong ph n default: n u n t n t i v ph n ny khng b t bu c ph i c.
constant1

Hai o n 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 r ng c u trc c a l nh switch hi c bi t. Ch s t n t i c a l nh break cu i m i kh i l nh. i u ny l c n thi t v n u khng th sau khi th c hi n block of instructions 1 chng trnh s khng nh y n cu i c a l nh switch m s th c hi n cc kh i l nh ti p theo cho n khi n tm th y l nh break u tin. i u ny khi n cho vi c t c p ngo c nh n { } trong m i tr ng h p l khng c n thi t v c th c dng khi b n mu n th c hi n m t kh i l nh cho nhi u tr ng h p 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 r ng l nh switch ch c th c dng so snh m t bi u th c v i cc h ng. V v y chng ta khng th t cc bi n (case (n*2):) hay cc kho ng (case (1..3):) v chng khng ph i l cc h ng h p l . N u b n c n ki m tra cc kho ng hay nhi u gi tr khng ph i l h ng s hy k t h p cc l nh if v else if.

Trang 28

Updatesofts.com

Ebooks Team

Hm (I)
Hm l m t kh i l nh c th c hi n khi n c g i t m t i m khc c a chng trnh. D ng th c c a n nh sau:
type name ( argument1, argument2, ...) statement

trong :
type l ki u d li u c tr v c name l tn g i c a hm. arguments l cc tham s (c nhi

a hm

u bao nhiu cng c tu theo nhu c u). M t tham s bao g m tn ki u d li u sau l tn c a tham s gi ng nh khi khai bo bi n (v d int x) v ng vai tr bn trong hm nh b t k bi n no khc. Chng dng truy n tham s cho hm khi n c g i. Cc tham s khc nhau c ngn cch b i cc d u ph y. statement l thn c a hm. N c th l m t l nh n hay m t kh i l nh. D i 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 hi u c o n m ny, tr c h t hy nh l i nh ng i u ni bi u tin: m t chng trnh C++ lun b t u th c hi n t hm main. V v y chng ta b t u t y. Chng ta c th th y hm main b t u b ng vi c khai bo bi n z ki u int. Ngay sau l m t l i g i t i hm addition. N u chng ta s th y s tng t gi a c u trc c a l i g i hm v i khai bo c a hm:

Trang 29

Updatesofts.com

Ebooks Team

Cc tham s c vai tr th t r rng. Bn trong hm main chng ta g i hm addition v truy n hai gi tr : 5 v 3 tng ng v i hai tham s int a v int b c khai bo cho hm addition. Vo th i i m hm c g i t main, quy n i addition. Gi tr c a c hai tham s (5 v 3) int b bn trong hm. Dng l nh sau:
return (r);

u khi n c chuy n sang cho hm c copy sang hai bi n c c b int a v

k t thc hm addition, v tr l i quy n i u khi n cho hm no g i n (main) v ti p t c chng trnh ci i m m n b ng t b i l i g i n addition. Nhng thm vo , gi tr c dng v i l nh return (r) chnh l gi tr c tr v c a hm.\

Gi tr tr v b i m t hm chnh l gi tr c a hm khi n c tnh ton. V v y bi n z s c c gi tr c tr v b i addition (5, 3), l 8. Ph m vi ho t ng c a cc bi n [nh c l i] B n c n nh r ng ph m vi ho t ng c a cc bi n khai bo trong m t hm hay b t k m t kh i l nh no khc ch l hm hay kh i l nh v khng th s d ng bn ngoi chng. V d , trong chng trnh v d trn, b n khng th s d ng tr c ti p cc bi n a, b hay r trong hm main v chng l cc bi n c c b c a hm addition. Thm vo b n cng khng th s d ng bi n z tr c ti p bn trong hm addition v n lm bi n c c b c a hm main. Tuy nhin b n c th khai bo cc bi n ton c c c th s d ng chng b t k u, bn trong hay bn ngoi b t k hm no. lm vi c ny b n c n khai bo chng bn ngoi m i hm hay cc kh i l nh, c ngha l ngay trong thn chng trnh. y l m t 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 tr ng h p ny chng ta t o ra hm subtraction. Ch c nng c a hm ny l l y hi u c a hai tham s r i tr v k t qu . Tuy nhin, n u phn tch hm main cc b n s th y chng trnh vi l n g i n hm subtraction. Ti s d ng vi cch g i khc nhau cc b n th y cc cch khc nhau m m t hm c th c g i. c hi u c n k v d ny b n c n nh r ng m t l i g i n m t hm c th hon ton c thay th b i gi tr c a n. V d trong l nh g i hm u tin :
z = subtraction (7,2); cout << "The first result is " << z;

N u chng ta thay l i g i hm b ng gi tr c a n ( l 5), chng ta s c:


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

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

cng cho k t qu gi ng nh hai dng l nh trn nhng trong tr ng h p ny chng ta g i hm subtraction tr c ti p nh l m t tham s c a cout. Chng ta cng c th vi t:
cout << "The second result is " << 5;

Trang 31

Updatesofts.com

Ebooks Team

v 5 l k t qu c a subtraction (7,2). Cn v i l nh
cout << "The third result is " << subtraction (x,y);

i u m i m duy nh t y l cc tham s c a subtraction l cc bi n thay v cc h ng. i u ny l hon ton h p l . Trong tr ng h p ny gi tr c truy n cho hm subtraction l gi tr c a x and y. Tr ng h p th t cng hon ton tng t . Thay v vi t
z = 4 + subtraction (x,y);

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

cng hon ton cho k t qu tng ng. Ch r ng d u ch m ph y c t bi u th c ch khng c n thi t ph i t ngay sau l i g i hm.

cu i

Cc hm khng ki u. Cch s d ng void.


N u b n cn nh c php c a m t l i khai bo hm:
type name ( argument1, argument2 ...) statement

b n s th y r rng r ng n b t u v i m t tn ki u, l ki u d li u s c hm tr v b i l nh return. Nhng n u chng ta khng mu n tr v gi tr no th sao ? Hy t ng t ng r ng chng ta mu n t o ra m t hm ch hi n th m t thng bo ln mn hnh. N khng c n tr v m t gi tr no c , hn n a cng khng c n nh n tham s no h t. V v y ng i ta ngh ra ki u d li u 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 ph n danh sch tham s c ngha l hm ny khng nh n m t tham s no. Tuy nhin trong C++ khng c n thi t ph i s d ng void lm i u ny. B n ch n gi n s d ng c p ngo c n ( ) l xong. B i v hm c a chng ta khng c m t tham s no, v v y l i g i hm dummyfunction s l :
dummyfunction ();

Hai d u ngo c n l c n thi t cho trnh d ch hi u l m t l i g i hm ch khng ph i l m t tn bi n hay b t k d u hi u no khc.

Trang 33

Updatesofts.com

Ebooks Team

Hm (II). Truy n tham s theo tham s gi tr hay tham s bi n.


Cho n nay, trong t t c cc hm chng ta bi t, t t c cc tham s truy n cho hm u c truy n theo gi tr . i u ny c ngha l khi chng ta g i hm v i cc tham s , nh ng g chng ta truy n cho hm l cc gi tr ch khng ph i b n thn cc bi n. V d , gi s chng ta g i hm addition nh sau:
int x=5, y=3, z; z = addition ( x , y );

Trong tr ng h p ny khi chng ta g i hm addition th cc gi tr 5 and 3 c truy n cho hm, khng ph i l b n thn cc bi n.

n y cc b n c th h i ti: Nh v y th sao, c nh h ng g u ? i u ng ni y l khi cc b n thay i gi tr c a cc bi n a hay b bn trong hm th cc bi n x v y v n khng thay i v chng u c c truy n cho hm ch c gi tr c a chng c truy n m thi. Hy xt tr ng h p b n c n thao tc v i m t bi n ngoi bn trong m t hm. V v y b n s ph i truy n tham s d i d ng tham s bi n nh trong hm duplicate trong v d d i 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

i u u tin lm b n ch l trong khai bo c a duplicate theo sau tn ki u c a m i tham s u l d u v (&), bo hi u r ng cc tham s ny c truy n theo tham s bi n ch khng ph i tham s gi tr . Khi truy n tham s d i d ng tham s bi n chng ta ang truy n b n thn bi n v b t k s thay i no m chng ta th c hi n v i tham s bn trong hm s nh h ng tr c ti p n bi n .

Trong v d trn, chng ta lin k t a, b v c v i cc tham s khi g i hm (x, y v z) v m i s thay i v i a bn trong hm s nh h ng n gi tr c a x v hon ton tng t v i b v y, c v z. Ki u khai bo tham s theo d ng tham s bi n s d ng d u v (&) ch c trong C++. Trong ngn ng C chng ta ph i s d ng con tr lm vi c tng t nh th . Truy n tham s d i d ng tham s bi n cho php m t hm tr v nhi u hn m t gi tr . V d , y l m t hm tr v s li n tr c v li n sau c a 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 m c nh c a tham s .
Khi nh ngha m t hm chng ta c th ch nh nh ng gi tr m c nh s c truy n cho cc i s trong tr ng h p chng b b qua khi hm c g i. lm vi c ny n gi n ch c n gn m t gi tr cho i s khi khai bo hm. N u gi tr c a tham s v n c ch nh khi g i hm th gi tr m c 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 th y trong thn chng trnh, c hai l i g i hm divide. Trong l nh u tin:
divide (12)

chng ta ch dng m t tham s nhng hm divide cho php n hai. B i v y hm s t cho tham s th hai gi tr b ng 2 v l gi tr m c nh c a n (ch ph n khai bo hm c k t thc b i int b=2). V v y k t qu s l 6 (12/2).
divide

Trong l nh th hai:
divide (20,4)

c hai tham s , b i v y gi tr m c nh s c b qua. K t qu c a hm s l 5 (20/4).

Qu t i cc hm.
Hai hm c th c cng tn n u khai bo tham s c a chng khc nhau, i u ny c ngha l b n c th t cng m t tn cho nhi u hm n u chng c s tham s khc nhau hay ki u d li u c a cc tham s khc nhau (hay th m ch l ki u d li u 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 m t hm dng hai tham s ki u int v hm cn l i dng ki u float. Trnh bin d ch s bi t c n ph i g i hm no b ng cch phn tch ki u tham s khi hm c g i. n gi n ti vi t c hai hm u c m l nh nh nhau nhng i u ny khng b t bu c. B n c th xy d ng hai hm c cng tn nhng ho t ng hon ton khc nhau.

Cc hm inline.
Ch th inline c th c t tr c khao bo c a m t hm ch r r ng l i g i hm s c thay th b ng m l nh c a hm khi chng trnh c d ch. Vi c ny tng ng v i vi c khai bo m t macro, l i ch c a n ch th hi n v i cc hm r t ng n, t c ch y chng trnh s c c i thi n v n khng ph i g i m t th t c con. C u trc c a n nh sau:
inline type name ( arguments ... ) { instructions ... }

l i g i hm cng nh b t k m t hm no khc. Khng c n thi t ph i t t kho inline trong l nh g i, ch c n trong l i khai bo hm l .

qui.
Cc hm c th g i chnh n. i u ny c th c ch v i m t s tc v nh l m t s phng php s p x p hay tnh giai th a c a m t s . V d , tnh giai th a c a m t s (n), cng th c ton h c c a n nh sau:
n! = n * (n-1) * (n-2) * (n-3) ... * 1

v m t 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 l nh g i chnh n nhng ch khi tham s l n hn 1, n u khng th hm s th c hi n m t vng l p v h n v sau khi n 0 n s ti p t c nhn c nh ng s m. Hm ny c m t h n ch l ki u d li u m n dng (long) khng cho php tnh giai th a qu 12!.

Khai bo m u cho hm.


Cho n gi chng ta hon ton ph i nh ngha hm tr c l nh g i u tin n n, m th ng l trong main, v v y hm main lun ph i n m cu i chng trnh. N u b n th l p l i m t vi v d v hm tr c y nhng th t hm main tr c b t k m t hm c g i t n, b n g n nh ch c ch n s nh n c thng bo l i. Nguyn nhn l m t hm ph i c khai bo tr c khi n c g i nh nhnggx g chng ta lm trng t t c cc v d . Nhng c m t cch khc trnh ph i vi t t t c m chng trnh tr c khi chng c th c dng trong main hay b t k m t hm no khc. chnh l khai bo m u cho hm. Cch ny bao g m vi c khai bo hm m t cch ng n g n nhng cho trnh d ch c th bi t cc tham s v ki u d li u tr v c a hm. D ng c a n nh sau:
type name ( argument_type1, argument_type2, ...);

y chnh l ph n u c a nh ngha hm, ngo i tr :


N khng c b t k l nh no cho hm. i u ny c ngha l n khng bao g m thn hm v i t t c cc l nh th ng c b c trong c p ngo c nh n { }. N k t thc b ng d u ch m ph y (;).

Trang 38

Updatesofts.com

Ebooks Team

Trong ph n li t k cc tham s ch c n vi t ki u c a chng l . Vi c vi t tn c a cc tham s trong ph n khai bo m u l khng b t bu c.

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 ph i l m t v d v s hi u qu . Ti ch c ch n r ng cc b n c th nh n c k t qu nh trn ch v i m t n a s dng l nh. Tuy nhin n gip cho chng ta th y c vi c khai bo m u cc hm l nh th no. Hn n a, trong v d ny vi c khai bo m u t nh t m t hm l b t bu c. u tin chng ta th y khai bo m u c a hai hm odd v even:
void odd (int a); void even (int a);

cho php hai hm ny c th c s d ng tr c khi chng c nh ngha hon ch nh. Tuy nhin l do c bi t gi i thch t i sao chng trnh ny l i c n t nh t m t hm ph i c khi bo m u l trong odd c m t l i g i n even v trong even c m t l i g i n odd. V v y n u khng c hm no c khai bo tr c th l i ch c ch n s x y ra.

Trang 39

Updatesofts.com

Ebooks Team

R t nhi u l p trnh vin kinh nghi m khuyn r ng t t c cc hm nn c khai bo m u. cng l l i khuyn c a ti, nh t l trong tr ng h p c nhi u hm ho c chng r t di, khi vi c khai bo t t c cc hm cng m t ch cho php chng ta bi t ph i g i cc hm nh th no, v v y ti t ki m c th i gian.

Trang 40

Updatesofts.com

Ebooks Team

M ng
M ng l m t dy cc ph n t c cng ki u c t lin ti p trong b nh v c th truy xu t n t ng ph n t b ng cch thm m t ch s vo sau tn c a m ng. i u ny c ngha l, v d , chng ta c th lu 5 gi tr ki u int m khng c n ph i khai bo 5 bi n khc nhau.V d , m t m ng ch a 5 gi tr nguyn ki u int c tn l billy c th c bi u di n nh sau:

trong m i m t tr ng bi u di n m t ph n t c a m ng, trong tr ng h p ny l cc gi tr nguyn ki u int. Chng c nh s t 0 n 4 v ph n t u tin c a m ng lun l 0 b t k di c a n l bao nhiu. Nh b t k bi n no khc, m t m ng ph i c khai bo tr c khi c th s d ng. M t khai bo i n hnh cho m t m ng trong C++ nh sau:
type name [elements];

trong type l m t ki u d li u h p l (int, float...), name l m t tn bi n h p l v tr ng elements ch nh m ng s ch a bao nhiu ph n t V v y, khai bo billy nh trnh by trn chng ta ch c n m t dng n gi n nh sau:
int billy [5];

Ch : Tr ng elements bn trong c p ngo c [] ph i l m t gi tr h ng khi khai bo m t m ng, v m ng l m t kh i nh tnh c kch c xc nh v trnh bin d ch ph i c kh nng xc nh xem c n bao nhiu b nh c p pht cho m ng tr c khi cc l nh c th c th c hi n.

Kh i t o m t m ng.
Khi khai bo m t m ng v i t m ho t ng a phng (trong m t hm), theo m c nh n s khng c kh i t o, v v y n i dung c a n l khng xc nh cho n khi chng ra lu cc gi tr ln . N u chng ta khai bo m t m ng ton c c (bn ngoi t t c cc hm) n s c kh i t o v t t c cc ph n t c t b ng 0. V v y n u chng ta khai bo m ng ton c c:

Trang 41

Updatesofts.com

Ebooks Team

int billy [5];

m i ph n t c a billy s c kh i t o l 0:

Nhng thm vo , khi chng ta khai bo m t m ng, chng ta c th gn cc gi tr kh i t o cho t ng ph n t c a n. V d :

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

l nh trn s khai bo m t m ng nh sau:

S ph n t trong m ng m chng ta kh i t o v i c p ngo c nh n { } ph i b ng s ph n t c a m ng c khai bo v i c p ngo c vung [ ]. B i v i u ny c th c coi l m t s l p l i khng c n thi t nn C++ cho php tr ng gi a c p ngo c vung, kch th c c a m ng c xc nh b ng s gi tr gi a c p ngo c nh n.

Truy xu t n cc ph n t c a m ng.
b t k i m no c a chng trnh trong t m ho t ng c a m ng, chng ta c th truy xu t t ng ph n t c a m ng c hay ch nh s a nh l i v i m t bi n bnh th ng. C u trc c a n nh sau:
name[index]

Nh trong v d tr c ta c m ng billy g m 5 ph n t c ki u int, chng ta c th truy xu t n t ng ph n t c a m ng nh sau:

V d , lu gi tr 75 vo ph n t th ba c a billy ta vi t nh sau:

Trang 42

Updatesofts.com

Ebooks Team

billy[2] = 75;

v, v d , gn gi tr c a ph n t th 3 c a billy cho bi n a, chng ta vi t:


a = billy[2];

V v y, xt v m i phng di n, bi u th c billy[2] gi ng nh b t k m t bi n ki u int. Ch r ng ph n t th ba c a billy l billy[2], v m ng b t u t ch s 0. V v y, ph n t cu i cng s l billy[4]. V v y n u chng ta vi t billy[5], chng ta s truy xu t n ph n t th 6 c a m ng v v t qu gi i h n c a m ng. Trong C++, vi c v t qu gi i h n ch s c a m ng l hon ton h p l , tuy nhin n c th gy ra nh ng v n th c s kh pht hi n b i v chng khng t o ra nh ng l i trong qu trnh d ch nhng chng c th t o ra nh ng k t qu khng mong mu n trong qu trnh th c hi n. Nguyn nhn c a vi c ny s c ni n k hn khi chng ta b t u s d ng con tr . C n ph i nh n m nh r ng chng ta s d ng c p ngo c vung cho hai tc v : u tin l t kch th c cho m ng khi khai bo chng v th hai, ch nh ch s cho m t ph n t c th c a m ng khi xem xt n n.
int billy[5]; billy[2] = 75; m ng. // khai bo m t m ng m i. // truy xu t n m t ph n t c a

M t vi thao tc h p l khc v i m ng:


billy[0] = a; billy[a] = 75; b = billy [a+2]; billy[billy[a]] = billy[2] + 5; // v d v m ng #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

M ng nhi u chi u.
M ng nhi u chi u c th c coi nh m ng c a m ng, v d , m t m ng hai chi u c th c t ng t c nh l m t b ng hai chi u g m cc ph n t c ki u d li u c th v gi ng nhau.

jimmy

bi u di n m t m ng hai chi u kch th c 3x5 c ki u int. Cch khai bo m ng ny nh sau:


int jimmy [3][5];

v, v d , cch truy xu t n ph n t th hai theo chi u d c v th t theo chi u ngang trong m t bi u th c nh sau:
jimmy[1][3]

(hy nh r ng ch s c a m ng lun b t u t 0). M ng nhi u chi u khng b gi i h n b i hai ch s (hai chi u), Chng c th ch a bao nhi u ch s ty thch m c d t kh c n ph i dng n m ng l n hn 3 chi u. Hy th xem xt l ng b nh m m t m ng c nhi u ch s c n n. V d :
char century [100][365][24][60][60];

gn m t gi tr char cho m i giy trong m t th k , ph i c n n hn 3 t gi tr chars! Chng ta s ph i c n kho ng 3GB RAM khai bo n. M ng nhi u chi u th c ra l m t khi ni m tr u t ng v chng ta c th c k t qu tng t v i m ng m t chi u b ng m t thao tc n gi n gi a cc ch s c a n:
int jimmy [3][5]; tng ng v int jimmy [15]; (3 * 5 = 15)

Trang 44

Updatesofts.com

Ebooks Team

D i y l hai v d v i cng m t k t qu nh nhau, m t s d ng m ng hai chi u v m t s d ng m ng m t chi u:


// 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 m t chng trnh no vi t g ra mn hnh nhng c hai u gn gi tr vo kh i nh c tn jimmy theo cch sau:

Chng ta nh ngha h ng (#define) n gi n ha nh ng ch nh s a sau ny c a chng trnh, v d , trong tr ng h p chng ta quy t nh tng kch th c c a m ng v i chi u cao l 4 thay v l 3, chng ta ch c n thay i dng:
#define HEIGHT 3

thnh
#define HEIGHT 4

v khng ph i c thm s thay i no n a i v i chng trnh.

Dng m ng lm tham s .
Vo m t lc no c th chng ta c n ph i truy n m t m ng t i m t hm nh l m t tham s . Trong C++, vi c truy n theo tham s gi tr m t kh i nh l khng h p l , ngay c khi n c t ch c thnh m t m ng. Tuy nhin chng ta l i c php truy n a ch

Trang 45

Updatesofts.com

Ebooks Team

c a n, vi c ny cng t o ra k t qu th c t gi ng thao tc nhi u v hi u qu hn.

trn nhng l i nhanh hn

c th nh n m ng l tham s th i u duy nh t chng ta ph i lm khi khai bo hm l ch nh trong ph n tham s ki u d li u c b n c a m ng, tn m ng v c p ngo c vung tr ng. V d , hm sau:
void procedure (int arg[])

nh n vo m t tham s c ki u "m ng c a char" v c tn arg. truy n tham s cho hm ny m t m ng c khai bo:


int myarray [40];

ch c n g i hm nh sau:
procedure (myarray);

D i y l m t 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 b n c th th y, tham s u tin (int arg[]) ch p nh n m i m ng c ki u c b n l int, b t k di c a n l bao nhiu, v v y c n thi t ph i c tham s th hai bo cho hm ny bi t di c a m ng m chng ta truy n cho n. Trong ph n khai bo hm chng ta cng c th dng tham s l cc m ng nhi u chi u. C u trc c a m ng 3 chi u nh sau:
base_type[][depth][depth]

Trang 46

Updatesofts.com

Ebooks Team

v d , m t hm v i tham s l m ng nhi u chi u c th nh sau:


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

ch r ng c p ngo c vung u tin tr ng nhng cc c p ngo c sau th khng. B n lun lun ph i lm v y v trnh bin d ch C++ ph i c kh nng xc nh l n c a cc chi u thm vo c a m ng. M ng, c m t chi u v nhi u chi u, khi truy n cho hm nh l m t tham s th ng l nguyn nhn gy l i cho nh ng l p trnh vin thi u kinh nghi m. Cc b n nn c bi 3.3. Con tr c th hi u r hn m ng ho t ng nh th no.

Trang 47

Updatesofts.com

Ebooks Team

Xu k t
Trong t t c cc chng trnh chng ta th y cho n gi , chng ta ch s d ng cc bi n ki u s , ch dng bi u di n cc s . Nhng bn c nh cc bi n ki u s cn c cc xu k t , chng cho php chng ta bi u di n cc chu i k t nh l cc t , cu, o n vn b n... Cho n gi chng ta m i ch dng chng d i d ng h ng ch ch a quan tm n cc bi n c th ch a chng. Trong C++ khng c ki u d li u c b n lu cc xu k t . c th th a mn nhu c u ny, ng i ta s d ng m ng c ki u char. Hy nh r ng ki u d li u ny (char) ch c th lu tr m t k t n, b i v y n c dng t o ra xu c a cc k t n. V d , m ng sau (hay l xu k t ):
char jenny [20];

c th lu m t xu k t v i di c c i l 20 k t . B n c th t ng t ng n nh sau:

Kch th c c c i ny khng c n ph i lun lun dng n. V d , jenny c th lu xu V cc m ng k t c th lu cc xu k t ng n hn di c a n, trong C++ c m t quy c k t thc m t n i dung c a m t xu k t b ng m t k t null, c th c vi t l '\0'.
"Hello" hay "Merry christmas".

Chng ta c th bi u di n jenny (m t m ng c 20 ph n t ki u char) khi lu tr xu k t "Hello" v "Merry Christmas" theo cch sau:

Ch r ng sau n i dung c a xu, m t k t null ('\0') c dng bo hi u k t thc xu. Nh ng mu xm bi u di n nh ng gi tr khng xc nh.

Kh i t o cc xu k t .
V nh ng xu k t l nh ng m ng bnh th ng nn chng cng nh cc m ng khc. V d , n u chng ta mu n kh i t o m t xu k t v i nh ng gi tr xc nh chng ta c th lm i u tng t nh v i cc m ng khc:

Trang 48

Updatesofts.com

Ebooks Team

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

Tuy nhin, chng ta c th kh i t o gi tr cho m t xu k t b ng cch khc: s d ng cc h ng xu k t . Trong cc bi u th c chng ta s d ng trong cc v d trong cc chng tr c cc h ng xu k t xu t hi n vi l n. Chng c bi u di n trong c p ngo c kp ("), v d :
"the result is: "

l m t h ng xu k t chng ta s d ng

m t s ch .

Khng gi ng nh d u nhy n (') cho php bi u di n h ng k t , c p ngo c kp (") l h ng bi u di n m t chu i k t lin ti p, v cu i chu i m t k t null ('\0') lun c t ng thm vo. V v y chng ta c th kh i t o xu mystring theo m t trong hai cch sau y:
char mystring [] = { 'H', 'e', 'l', 'l', 'o', '\0' }; char mystring [] = "Hello";

Trong c hai tr ng h p m ng (hay xu k t ) mystring c khai bo v i kch th c 6 k t : 5 k t bi u di n Hello c ng v i m t k t null. Tr c khi ti p t c, ti c n ph i nh c nh b n r ng vi c gn nhi u h ng nh vi c s d ng d u ngo c kp (") ch h p l khi kh i t o m ng, t c l lc khai bo m ng. Cc bi u th c trong chng trnh nh:
mystring = "Hello"; mystring[] = "Hello";

l khng h p l , c cu l nh d i y cng v y:
mystring = { 'H', 'e', 'l', 'l', 'o', '\0' };

V y hy nh : Chng ta ch c th "gn" nhi u h ng cho m t m ng vo lc kh i t o n. Nguyn nhn l m t thao tc gn (=) khng th nh n v tri l c m t m ng m ch c th nh n m t trong nh ng ph n t c a n. Vo th i i m kh i t o m ng l m t tr ng h p c bi t, v n khng th c s l m t l nh gn m c d n s d ng d u b ng (=).

Gn gi tr cho xu k t
V v tri c a m t l nh gn ch c th l m t ph n t c a m ng ch khng th l c m ng, chng ta c th gn m t xu k t cho m t m ng ki u char s d ng m t 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 ph i l m t phng php th c t . gn gi tr cho m t xu k t , chng ta c th s d ng lo t hm ki u strcpy (string copy), hm ny c nh ngha trong string.h v c th c g i nh sau:
strcpy (string1, string2);

L nh ny copy n i dung c a string2 sang string1. string2 c th l m t m ng, con tr hay m t h ng xu k t , b i v y l nh sau y l m t cch ng gn xu h ng "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

r ng chng ta ph i include file <string.h> c th s d ng hm strcpy. M c d chng ta lun c th vi t m t hm n gi n nh hm setstring d i y th c hi n m t thao tc gi ng 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; }

M t phng th c th ng dng khc gn gi tr cho m t m ng l s d ng tr c ti p dng nh p d li u (cin). Trong tr ng h p ny gi tr c a xu k t c gn b i ng i dng trong qu trnh chng trnh th c hi n. Khi cin c s d ng v i cc xu k t n th ng c dng v i phng th c getline c a n, phng th c ny c th c g i nh sau:
cin.getline ( char buffer[], int length, char delimiter = ' \n');

trong buffer (b m) l a ch ni s lu tr d li u vo (nh l m t m ng ch ng h n), length l di c c i c a b m (kch th c c a m ng) v delimiter l k t c dng k t thc vi c nh p, m c nh - n u chng ta khng dng tham s ny - s l k t xu ng dng ('\n'). V d sau y l p l i t t c nh ng g b n g trn bn phm. N r t n gi n nhng l m t v d cho th y b n c th s d ng cin.getline v i 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 l i g i cin.getline chng ta s d ng cng m t bi n xu (mybuffer). Nh ng g chng trnh lm trong l i g i th hai n gi n l thay th n i dung c a buffer trong l i g i c b ng n i dung m i. N u b n cn nh ph n ni v giao ti p v i, b n s nh r ng chng ta s d ng ton t >> nh n d li u tr c ti p t u vo chu n. Phng th c ny c th c dng v i cc

Trang 51

Updatesofts.com

Ebooks Team

xu k t thay cho cin.getline. V d , trong chn trnh c a chng ta, khi chng ta mu n nh n d li u t ng i dng chng ta c th vi t:
cin >> mybuffer;

l nh ny s lm vi c nh n c nh ng h n ch sau m cin.getline khng c:

N ch c th nh n nh ng t n (khng nh n c c cu) v phng th c ny s d ng k t tr ng(bao g m c d u cch, d u tab v d u xu ng dng) lm d u hi u k t thc.. N khng cho php ch nh kch th c cho b m. Chng trnh c a b n c th ch y khng n nh n u d li u vo l n hn kch c c a m ng ch a n.

V nh ng nguyn nhn trn, khi mu n nh p vo cc xu k t b n nn s d ng cin.getline thay v cin >>.

Chuy n i xu k t sang cc ki u khc.


V m t xu k t c th bi u di n nhi u ki u d li u khc nh d ng s nn vi c chuy n i n i dung nh v y sang d ng s l r t h u ch. V d , m t xu c th mang gi tr "1977"nhng l m t chu i g m 5 k t (k c k t null) v khng d g chuy n thnh m t s nguyn. V v y th vi n cstdlib (stdlib.h) cung c p 3 macro/hm h u ch sau:

atoi: chuy n xu thnh ki u int. atol: chuy n xu thnh ki u long. atof: chuy n xu thnh ki u float.

T t c cc hm ny nh n m t tham s v tr v gi tr s (int, long ho c float). Cc hm ny khi k t h p v i phng th c getline c a cin l m t cch ng tin c y hn phng th c cin>> c i n khi yu c u ng i s d ng nh p vo m t 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 chu i


Th vi n cstring (string.h) khng ch c hm strcpy m cn c nhi u hm khc thao tc trn chu i. D i y l gi i thi u l t qua c a cc hm thng d ng nh t: strcat: char* strcat (char* dest, const char* src); G n thm chu i src vo pha cu i c a dest. Tr v dest. strcmp: int strcmp (const char* string1, const char* string2); So snh hai xu string1 v string2. Tr v 0 n u hai xu l b ng nhau. strcpy: char* strcpy (char* dest, const char* src); Copy n i dung c a src cho dest. Tr v dest. strlen: size_t strlen (const char* string); Tr v di c a string. Ch : char* hon ton tng ng v i char[]

Trang 53

Updatesofts.com

Ebooks Team

Con tr

Chng ta bi t cc bi n chnh l cc nh m chng ta c th truy xu t d i cc tn. Cc bi n ny c lu tr t i nh ng ch c th trong b nh . i v i chng trnh c a chng ta, b nh my tnh ch l m t dy g m cc nh 1 byte, m i c m t a ch xc nh. M t s m hnh t t i v i b nh my tnh chnh l m t ph trong m t thnh ph . Trn m t ph t t c cc ngi nh u c nh s tu n t v i m t ci tn duy nh t nn n u chng ta ni n s 27 ph Tr n Hng o th chng ta c th tm c ni m khng l m l n v ch c m t ngi nh v i s nh v y. Cng v i cch t ch c tng t nh vi c nh s cc ngi nh, h i u hnh t ch c b nh thnh nh ng s n nh t, tu n t , nn n u chng ta ni n v tr 1776 trong b nh chng ta bi t chnh xc nh v ch c m t v tr v i a ch nh v y.

Ton t l y a ch (&).
Vo th i i m m chng ta khai bo m t bi n th n ph i c lu tr trong m t v tr c th trong b nh . Ni chung chng ta khng quy t nh ni no bi n c t - th t may m n r ng i u c lm t ng b i trnh bin d ch v h i u hnh, nhng m t khi h i u hnh gn m t a ch cho bi n th chng ta c th mu n bi t bi n c lu tr u. i u ny c th c th c hi n b ng cch t tr c tn bi n m t d u v (&), c ngha l " a ch c a". V d :
ted = &andy;

s gn cho bi n ted a ch c a bi n andy, v khi t tr c tn bi n andy d u v (&) chng ta khng cn ni n n i dung c a bi n m ch ni n a ch c a n trong b nh . Gi s r ng bi n andy c t
andy = 25; fred = andy; ted = &andy;

nh c a ch 1776 v chng ta vi t nh sau:

k t qu s gi ng nh trong s d i y:

Trang 54

Updatesofts.com

Ebooks Team

Chng ta gn cho fred n i dung c a bi n andy nh chng ta lm r t l n nhi u khc trong nh ng ph n tr c nhng v i bi n ted chng ta gn a ch m h i u hnh lu gi tr c a bi n andy, chng ta v a gi s n l 1776. Nh ng bi n lu tr a ch c a m t bi n khc (nh ted trong v d tr c) c g i l con tr . Trong C++ con tr c r t nhi u u i m v chng c s d ng r t th ng xuyn, Ti p theo chng ta s th y cc bi n ki u ny c khai bo nh th no.

Ton t tham chi u (*)


B ng cch s d ng con tr chng ta c th truy xu t tr c ti p n gi tr c lu tr trong bi n c tr b i n b ng cch tr c tn bi n con tr m t d u sao (*) - y c th c d ch l "gi tr c tr b i". V v y, n u chng ta vi t:
beth = *ted;

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

B n ph i phn bi t c r ng ted c gi tr 1776, nhng *ted (v i m t d u sao ng tr c) tr t i gi tr c lu tr trong a ch 1776, l 25. Hy ch s khc bi t gi a vi c c hay khng c d u sao tham chi u.
beth = ted; beth = *ted; // beth b ng ted ( 1776 ) // beth b ng gi tr c tr b i( 25 )

Ton t l y a ch (&)

Trang 55

Updatesofts.com

Ebooks Team

N c dng nh l m t ti n t c a bi n v c th c d ch l " a ch c a", v v y &variable1 c th c c l " a ch c a variable1". Ton t tham chi u (*) N ch ra r ng ci c n c tnh ton l n i dung c tr b i bi u th c c coi nh l m t a ch . N c th c d ch l "gi tr c tr b i".. *mypointer c c l "gi tr c tr b i mypointer". Vo lc ny, v i nh ng v d vi t
andy = 25; ted = &andy;

trn

b n c th d dng nh n ra t t c cc bi u th c sau l ng:


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

Khai bo bi n ki u con tr
V con tr c kh nng tham chi u tr c ti p n gi tr m chng tr t i nn c n thi t ph i ch r ki u d li u no m m t bi n con tr tr t i khai bo n. V v y, khai bo c a m t bi n con tr s c m u sau:
type * pointer_name;

trong type l ki u d li u c tr t i, khng ph i l ki u c a b n thn con tr . V d :


int * number; char * character; float * greatnumber;

l ba khai bo c a con tr . M i bi n u tr t i m t ki u d li u khc nhau nhng c ba u l con tr v chng u chi m m t l ng b nh nh nhau (kch th c c a m t bi n con tr ty thu c vo h i u hnh). nhng d li u m chng tr t i khng chi m l ng b nh nh nhau, m t ki u int, m t ki u char v ci cn l i ki u float. Ti ph i nh n m nh l i r ng d u sao (*) m chng ta t khi khai bo m t con tr ch c ngha r ng: l m t con tr v hon ton khng lin quan n ton t tham chi u m chng ta xem xt tr c . n gi n ch l hai tc v khc nhau c bi u di n b i cng m t d u.
// 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 r ng gi tr c a value1 v value2 c thay i m t cch gin ti p. u tin chng ta gn cho mypointer a ch c a value1 dng ton t l y a ch (&) v sau chng ta gn 10 cho gi tr c tr b i mypointer, l gi tr c tr b i value1 v v y chng ta s a bi n value1 m t cch gin ti p b n c th th y r ng m t con tr c th mang m t vi gi tr trong cng m t chng trnh chng ta s l p l i qu trnh v i value2 v v i cng m t con tr . y l m t v d ph c t p hn m t cht:
// more pointers #include <iostream.h> int main () { int value1 = 5, value2 = 15; int *p1, *p2; p1 = &value1; // p1 = a ch c a value1 p2 = &value2; // p2 = a ch c a value2 *p1 = 10; // gi tr tr b i p1 = 10 *p2 = *p1; // gi tr tr b i p2 = gi tr tr b i p1 p1 = p2; // p1 = p2 (php gn con tr ) *p1 = 20; // gi tr tr b i p1 = 20 cout << "value1==" << value1 << "/ value2==" << value2; return 0; } value1==10 / value2==20

M t dng c th gy s ch c a b n l:

Trang 57

Updatesofts.com

Ebooks Team

int *p1, *p2;

dng ny khai bo hai con tr b ng cch t d u sao (*) tr c m i con tr . Nguyn nhn l ki u d li u khai bo cho c dng l int v v theo th t t ph i sang tri, d u sao c tnh tr c tn ki u. Chng ta ni n i u ny trong bi 1.3: Cc ton t .

Con tr v m ng.
Trong th c t , tn c a m t m ng tng ng v i a ch ph n t u tin c a n, gi ng nh m t con tr tng ng v i a ch c a ph n t u tin m n tr t i, v v y th c t chng hon ton nh nhau. V d , cho hai khai bo sau:
int numbers [20]; int * p;

l nh sau s h p l :
p = numbers;

y p v numbers l tng ng v chng c cng thu c tnh, s khc bi t duy nh t l chng ta c th gn m t gi tr khc cho con tr p trong khi numbers lun tr n ph n t u tin trong s 20 ph n t ki u int m n c nh ngha v i. V v y, khng gi ng nh p - l m t bi n con tr bnh th ng, numbers l m t con tr h ng. L nh gn sau y l khng h p l :
numbers = p;

b i v numbers l m t m ng (con tr h ng) v khng c gi tr no c th c gn cho cc h ng. V con tr cng c m i tnh ch t c a m t bi n nn t t c cc bi u th c c con tr trong v d d i y l hon ton h p 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 "m ng" chng ta dng d u ngo c vung ch ra ph n t c a m ng m chng ta mu n tr n. C p ngo c vung ny c coi nh l ton t offset v ngha c a chng khng i khi c dng v i bi n con tr . V d , hai bi u th c sau y:
a[5] = 0; *(a+5) = 0; // a [offset of 5] = 0 // pointed by (a+5) = 0 tng ng v h p l b t k a l m

l hon ton

ng hay l m t con tr .

Kh i t o con tr
Khi khai bo con tr c th chng ta s mu n ch nh r rng chng s tr t i bi n no,
int number; int *tommy = &number;

l tng ng v i:
int number; int *tommy; tommy = &number;

Trong m t php gn con tr chng ta ph i lun lun gn a ch m n tr t i ch khng ph i l gi tr m n tr t i. B n c n ph i nh r ng khi khai bo m t bi n con tr , d u sao (*) c dng ch ra n l m t con tr , v hon ton khc v i ton t tham chi u. l hai ton t khc nhau m c d chng c vi t v i cng m t d u. V v y, cc cu l nh sau l khng h p l :
int number; int *tommy; *tommy = &number;

Nh i v i m ng, trnh bin d ch cho php chng ta kh i t o gi tr m con tr tr t i b ng gi tr h ng vo th i i m khai bo bi n con tr :


char * terry = "hello";

trong tr ng h p ny m t kh i nh tnh c dnh ch a "hello" v m t con tr tr t i k t u tin c a kh i nh ny ( l k t h') c gn cho terry. N u "hello" c lu t i a ch 1702, l nh khai bo trn c th c hnh dung nh th ny:

Trang 59

Updatesofts.com

Ebooks Team

c n ph i nh c l i r ng terry mang gi tr 1702 ch khng ph i l 'h' hay "hello". Bi n con tr terry tr t i m t xu k t v n c th c s d ng nh l i v i m t m ng (hy nh r ng m t m ng ch n thu n l m t con tr h ng). V d , n u chng ta mu n thay k t 'o' b ng m t d u ch m than, chng ta c th th c hi n vi c b ng hai cch:
terry[4] = '!'; *(terry+4) = '!';

hy nh r ng vi t terry[4] l hon ton gi ng v i vi t *(terry+4) m c d bi u th c thng d ng nh t l ci u tin. V i m t trong hai l nh trn xu do terry tr n s c gi tr nh sau:

Cc php tnh s h c v i pointer


Vi c th c hi n cc php tnh s h c v i con tr hi khc so v i cc ki u d li u s nguyn khc. Tr c h t, ch php c ng v tr l c php dng. Nhng c c ng v tr u cho k t qu ph thu c vo kch th c c a ki u d li u m bi n con tr tr t i. Chng ta th y c nhi u ki u d li u khc nhau t n t i v chng c th chi m ch nhi u hn ho c t hn cc ki u d li u khc. V d , trong cc ki u s nguyn, char chi m 1 byte, short chi m 2 byte v long chi m 4 byte. Gi s chng ta c 3 con tr sau:
char *mychar; short *myshort; long *mylong;

v chng l n l t tr t i nh 1000, 2000 and 3000.

Trang 60

Updatesofts.com

Ebooks Team

N u chng ta vi t
mychar++; myshort++; mylong++; mychar - nh b n 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 c ng thm 1 vo m t con tr th

n s tr t i ph n t ti p theo c cng ki u m n c nh ngha, v v y kch th c tnh b ng byte c a ki u d li u n tr t i s c c ng thm vo bi n con tr .

i u ny ng v i c hai php ton c ng v tr i v i con tr . Chng ta cng hon ton thu c k t qu nh trn n u vi t:
mychar = mychar + 1; myshort = myshort + 1; mylong = mylong + 1;

C n ph i c nh bo b n r ng c hai ton t tng (++) v gi m (--) u c quy n u tin l n hn ton t tham chi u (*), v v y bi u th c sau y c th d n t i k t qu sai:
*p++; *p++ = *q++;

L nh u tin tng ng v i *(p++) i u m n th c hi n l tng p ( a ch nh m n tr t i ch khng ph i l gi tr tr t i). L nh th hai, c hai ton t tng (++) u c th c hi n sau khi gi tr c a *q c gn cho *p v sau c q v p u tng ln 1. L nh ny tng ng v i:
*p = *q; p++; q++;

Trang 61

Updatesofts.com

Ebooks Team

Nh ni trong cc bi tr c, ti khuyn cc b n nn dng cc c p ngo c n trnh nh ng k t qu khng mong mu n.

Con tr tr t i con tr
C++ cho php s d ng cc con tr tr t i cc con tr khc gi ng nh l tr t i d li u. lm vi c chng ta ch c n thm m t d u sao (*) cho m i m c tham chi u.
char a; char * b; char ** c; a = 'z'; b = &a; c = &b;

gi s r ng a,b,c c lu trn nh sau:

cc nh 7230, 8092 and 10502, ta c th m t o n m

i m m i trong v d ny l bi n c, chng ta c th ni v n theo 3 cch khc nhau, m i cch s tng ng v i m t gi tr khc nhau:
c l m t bi n c ki u (char **) mang gi tr 8092 *c l m t bi n c ki u (char*) mang gi tr 7230 **c l m t bi n c ki u (char) mang gi tr 'z'

Con tr khng ki u
Con tr khng ki u l m t lo i con tr c bi t. N c th tr t i b t k lo i d li u no, t gi tr nguyn ho c th c cho t i m t xu k t . H n ch duy nh t c a n l d li u c tr t i khng th c tham chi u t i m t cch tr c ti p (chng ta khng th dng ton t tham chi u * v i chng) v di c a n l khng xc nh v v v y chng ta ph i dng n ton t chuy n ki u d li u hay php gn chuy n con tr khng ki u thnh m t con tr tr t i m t lo i d li u c th . M t trong nh ng ti n ch c a n l cho php truy n tham s cho hm m khng c n ch r ki u
// 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 m t ton t c a ngn ng C++, n tr v m t gi tr h ng l kch th c tnh b ng byte c a tham s truy n cho n, v d sizeof(char) b ng 1 v kch th c c a char l 1 byte.
sizeof

Con tr hm
C++ cho php thao tc v i cc con tr hm. Ti n ch tuy t v i ny cho php truy n m t hm nh l m t tham s n m t hm khc. c th khai bo m t con tr tr t i m t hm chng ta ph i khai bo n nh l khai bo m u c a m t hm nhng ph i bao trong m t c p ngo c n () tn c a hm v chn d u sao (*) ng tr c.
// 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 m t con tr ton c c tr t i m t hm c hai tham s ki u int, con tr ny c gm tr t i hm subtraction, t t c u trn m t dng:
int (* minus)(int,int) = subtraction;

Trang 64

Updatesofts.com

Ebooks Team

B nh ng

Cho n nay, trong cc chng trnh c a chng ta, t t c nh ng ph n b nh chng ta c th s d ng l cc bi n cc m ng v cc i t ng khc m chng ta khai bo. Kch c c a chng l c nh v khng th thay i trong th i gian chng trnh ch y. Nhng n u chng ta c n m t l ng b nh m kch c c a n ch c th c xc nh khi chng trnh ch y, v d nh trong tr ng h p chng ta nh n thng tin t ng i dng xc nh l ng b nh c n thi t. Gi i php y chnh l b nh ng, C++ tch h p hai ton t new v delete th c hi n vi c ny Hai ton t new v delete ch c trong C++. ph n sau c a bi chng ta s bi t nh ng thao tc tng ng v i 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 ki u d li u v c th l s ph n t c n thi t c t trong c p ngo c vung. N tr v m t con tr tr t i u c a kh i nh v a c c p pht. D ng th c c a ton t ny nh sau:
pointer = new type

ho c
pointer = new type [elements]

Bi u th c u tien c dng c p pht b nh ch a m t ph n t c ki u type. L nh th hai c dng c p pht m t kh i nh (m t m ng) g m cc ph n t ki u type. V d :


int * bobby; bobby = new int [5];

trong tr ng h p ny, h i u hnh dnh ch cho 5 ph n t ki u int trong b nh v tr v m t con tr tr n u c a kh i nh . V v y lc ny bobby tr n m t kh i nh h p l g m 5 ph n t int.

B n c th h i ti l c g khc nhau gi a vi c khai bo m t m ng v i vi c c p pht b nh cho m t con tr nh chng ta v a lm. i u quan tr ng nh t l kch th c c a m t
Trang 65

Updatesofts.com

Ebooks Team

m ng ph i l m t h ng, i u ny gi i h n kch th c c a m ng n kch th c m chng ta ch n khi thi t k chng trnh trong khi c p pht b nh ng cho php c p pht b nh trong qu trnh ch y v i kch th c b t k. B nh ng ni chung c qu n l b i h i u hnh v trong cc mi tr ng a nhi m c th ch y m t lc vi chng trnh c m t kh nng c th x y ra l h t b nh c p pht. N u i u ny x y ra v h i u hnh khng th c p pht b nh nh chng ta yu c u v i ton t new, m t con tr null (zero) s c tr v . V v y cc b n nn ki m tra xem con tr tr v b i ton t new c b ng 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 c n thi t trong m t kho ng th i gian nh t nh, khi n khng c n dng n n a th n s c gi i phng c th c p pht cho cc nhu c u khc trong tng lai. th c hi n vi c ny ta dng ton t delete, d ng th c c a n nh sau:
delete pointer;

ho c
delete [] pointer;

Bi u th c u tin nn c dng gi i phng b nh c c p pht cho m t ph n t v l nh th hai dng gi i phng m t kh i nh g m nhi u ph n t (m ng). Trong h u h t cc trnh d ch c hai bi u th c l tng ng m c 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 m t h ng s c nh ngha trong th vi n C++ dng bi u th con tr null. Trong tr ng h p h ng s ny cha nh ngha b n c th t nh ngha n:

#define NULL 0

Dng 0 hay NULL khi ki m tra con tr l nh nhau nhng vi c dng NULL v i con tr c s d ng r t r ng ri v i u ny c khuy n khch gip cho chng trnh d c hn.

B nh ng trong ANSI-C
Ton t new v delete l c quy n C++ v chng khng c trong ngn ng C. Trong ngn ng C, c th s d ng b nh ng chng ta ph i s d ng th vi n stdlib.h. Chng ta s xem xt cch ny v n cng h p l trong C++ v n v n cn c s d ng trong m t s chng trnh. Hm malloc y l m t hm t ng qut c p pht b nh ng cho con tr . C u trc c a n nh sau:
void * malloc (size_t nbytes);

trong nbytes l s byte chng ta mu n gn cho con tr . Hm ny tr v m t con tr ki u void*, v v y chng ta ph i chuy n i ki u sang ki u c a con tr ch, v d :
char * ronny; ronny = (char *) malloc (10);

o n m ny c p pht cho con tr ronny m t kh i nh 10 byte. Khi chng ta mu n c p pht m t kh i d li u c ki u khc char (l n hn 1 byte) chng ta ph i nhn s ph n t mong mu n v i kch th c c a chng. Th t may m n l chng ta c ton t sizeof, ton t ny tr v kch th c c a m t ki u d li u c th .
int * bobby; bobby = (int *) malloc (5 * sizeof(int));

o n m ny c p pht cho bobby m t kh i nh g m 5 s nguyn ki u int, kch c c a ki u d li u ny c th b ng 2, 4 hay hn ty thu c vo h th ng m chng trnh c d ch.

Trang 67

Updatesofts.com

Ebooks Team

Hm calloc. calloc ho t ng r t gi ng v i malloc, s khc nhau ch y u l khai bo m u c a n:


void * calloc (size_t nelements, size_t size);

n s d ng hai tham s thay v m t. Hai tham s ny c nhn v i nhau c c kch th c t ng c ng c a kh i nh c n c p pht. Thng th ng tham s u tin (nelements) l s ph n t v tham s th c hai (size) l kch th c c a m i ph n t . V d , chng ta c th nh ngha bobby v i calloc nh sau:
int * bobby; bobby = (int *) calloc (5, sizeof(int));

M t i m khc nhau n a gi a malloc v calloc l calloc kh i t o t t c cc ph n t c a n v 0. Hm realloc. N thay i kch th c c a kh i nh c c p pht cho m t con tr .
void * realloc (void * pointer, size_t size);

tham s pointer nh n vo m t con tr c c p pht b nh hay m t con tr null, v size ch nh kch th c c a kh i nh m i. Hm ny s c p pht size byte b nh cho con tr . N c th ph i thay i v v tr c a kh i nh c th ch cho kch th c m i c a kh i nh , trong tr ng h p ny n i dung hi n th i c a kh i nh c copy t i v tr m i m b o d li u khng b m t. Con tr m i tr t i kh i nh c hm tr v . N u khng th thay i kch th c c a kh i nh th hm s tr v m t con tr null nhng tham s pointer v n i dung c a n s khng b thay i. Hm free. Hm ny gi i phng m t kh i nh ng c c p pht b i malloc, calloc ho c realloc.
void free (void * pointer);

calloc

Hm ny ch c dng gi i phng b nh c c p pht b i cc hm malloc, and realloc.

Trang 68

Updatesofts.com

Ebooks Team

Cc c u trc Cc c u trc d li u.
M t c u trc d li u l m t t p h p c a nh ng ki u d li u khc nhau c g p l i v i m t ci tn duy nh t. D ng th c c a n nh sau:
struct model_name { type1 element1; type2 element2; type3 element3; . . } object_name; trong model_name l tn

c a m u ki u d li u v tham s ty ch n object_name m t tn h p l cho i t ng. Bn trong c p ngo c nh n l tn cc ph n t c a c u trc v ki u c a chng.

N u nh ngha c a c u trc bao g m tham s model_name (tu ch n), tham s ny tr thnh m t tn ki u h p l tng ng v i c u trc. V d :
struct products { char name [30]; float price; } ; products apple; products orange, melon;

Chng ta nh ngha c u trc products v i hai tr ng: name v price, m i tr ng c m t ki u khc nhau. Chng ta cng s d ng tn c a ki u c u trc (products) khai bo ba i t ng c ki u : apple, orange v melon. Sau khi c khai bo, products tr thnh m t tn ki u h p l gi ng cc ki u c b n nh int, char hay short. Tr ng tu ch n object_name c th n m cu i c a ph n khai bo c u trc dng khai bo tr c ti p i t ng c ki u c u trc. V d , khai bo cc i t ng apple, orange v melon nh lm ph n tr c chng ta cng c th lm theo cch sau:
struct products { char name [30]; float price; } apple, orange, melon;

Hn n a, trong tr ng h p ny tham s model_name tr thnh tu ch n. M c d n u model_name khng c s d ng th chng ta s khng th khai bo thm cc i t ng c ki u m u ny.

Trang 69

Updatesofts.com

Ebooks Team

M t i u quan tr ng l c n phn bi t r rng u l ki u m u c u trc, u l i t ng c u trc. N u dng cc thu t ng chng ta s d ng v i cc bi n, ki u m u l tn ki u d li u cn i t ng l cc bi n. Sau khi khai bo ba i t ng c ki u l m t m u c u trc xc nh (apple, orange and melon) chng ta c th thao tc v i cc tr ng t o nn chng. lm vi c ny chng ta s d ng m t d u ch m (.) chn gi a tn i t ng v tn tr ng. V d , chng ta c th thao tc v i b t k ph n t no c a c u trc nh l i v i cc bi n chu n :
apple.name apple.price orange.name orange.price melon.name melon.price

m i tr ng c ki u d li u tng ng: apple.name, orange.name v melon.name c ki u char[30], v apple.price, orange.price v melon.price c ki u float. Chng ta t m bi t apples, oranges v melons n v i m t 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 th y cch s d ng cc ph n t c a m t c u trc v b n thn c u trc nh l cc bi n thng th ng. V d , yours.year l m t bi n h p l c ki u int cng nh mine.title l m t m ng h p l v i 50 ph n t ki u chars. Ch r ng c mine and yours u c coi l cc bi n h p l ki u movie_t khi c truy n cho hm printmovie().Hn n a m t l i th quan tr ng c a c u trc l chng ta c th xt cc ph n t c a chng m t cch ring bi t ho c ton b c u trc nh l m t kh i. Cc c u trc c s d ng r t nhi u xy d ng c s d li u c bi t n u chng ta xt n kh nng xy d ng cc m ng c a 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 c u trc
Nh b t k cc ki u d li u no khc, cc c u trc c th c tr n b i con tr . Quy t c hon ton gi ng nh i v i b t k ki u d li u c b n no:
struct movies_t { char title [50]; int year; }; movies_t amovie; movies_t * pmovie; y amovie l m t i t ng c ki u movies_t v pmovie l m t ng movies_t. OK, by gi chng ta s n v i m t v d khc,

t con tr tr t i i n s gi i thi u m t

ton t m i:
// 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; }

o n m trn gi i thi u m t i u quan tr ng: ton t ->. y l m t ton t tham chi u ch dng tr t i cc c u trc v cc l p (class). N cho php chng ta khng ph i dng ngo c m i khi tham chi u n m t ph n t c a c u trc. Trong v d ny chng ta s d ng:
movies->title

n c th c d ch thnh:
(*movies).title

c hai bi u th c movies->title v (*movies).title u h p l v chng u dng tham chi u n ph n t title c a c u trc c tr b i movies. B n c n phn bi t r rng v i:
*movies.title

n tng ng v i
*(movies.title)

l nh ny dng tnh ton gi tr c tr b i ph n t title c a c u trc movies, trong tr ng h p ny (title khng ph i l m t con tr ) n ch ng c ngha g nhi u. B n d i y t ng k t t t c cc k t h p c th c gi a con tr v c u trc: Bi u th c
movies.title movies->title *movies.title

M t Ph n t title c a c u trc movies Ph n t title c a c u trc c tr b i movies Gi tr c tr b i ph n t title c a c u trc


movies

Tng ng v i

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

Cc c u trc l ng nhau
Cc c u trc c th c t l ng nhau v v y m t ph n t h p l c a m t c u trc c th l m t c u 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 v y, sau ph n khai bo trn chng ta c th s d ng cc bi u th c sau:


charlie.name maria.favourite_movie.title charlie.favourite_movie.year pfriends->favourite_movie.year

(trong hai bi u th c cu i cng l tng ng). Cc khi ni m c b n v c u trc c c p n trong ph n ny l hon ton gi ng v i ngn ng C, tuy nhin trong C++, c u trc c m r ng thm cc ch c nng c a m t l p v i tnh ch t c trng l t t c cc ph n t c a n u l cng c ng (public). B n s c thm cc thng tin chi ti t trong ph n

Trang 74

Updatesofts.com

Ebooks Team

Cc ki u d li u t nh ngha.

Trong bi tr c chng ta xem xt m t lo i d li u c nh ngha b i ng i dng (ng i l p trnh): c u trc. Nhng c cn nhi u ki u d li u t nh ngha khc:

T nh ngha cc ki u d li u (typedef).
C++ cho php chng ta nh ngha cc ki u d li u c a ring mnh d a trn cc ki u d li u c. c th lm vi c chng ta s s d ng t kho typedef, d ng th c nh sau:
typedef existing_type new_type_name ;

trong existing_type l m t ki u d li u c b n hay b t k m t ki u d li u nh ngha v new_type_name l tn c a ki u d li u m i. V d


typedef typedef typedef typedef char C; unsigned int WORD; char * string_t; char field [50];

Trong tr ng h p ny chng ta nh ngha b n ki u d li u m i: C, WORD, string_t v field ki u char, unsigned int, char* ki u char[50], chng ta hon ton c th s d ng chng nh l cc ki u d li u h p l :
C achar, anotherchar, *ptchar1; WORD myword; string_t ptchar2; field name; typedef c th h u d ng khi b n mu n

nh ngha m t ki u d li u c dng l p i l p l i trong chng trnh ho c ki u d li u b n mu n dng c tn qu di v b n mu n n c tn ng n hn.

Union
Union cho php m t ph n b nh c th c truy xu t d i d ng nhi u ki u d li u khc nhau m c d t t c chng u n m cng m t v tr trong b nh . Ph n khai bo v s d ng n tng t v i c u trc nhng ch c nng th khc hon ton:
union model_name { type1 element1; type2 element2; type3 element3; . . } object_name;

Trang 75

Updatesofts.com

Ebooks Team

T t c cc ph n t c a union u chi m cng m t ch trong b nh . Kch th c c a n l kch th c c a ph n t l n nh t. V d :


union mytypes_t { char c; int i; float f; } mytypes;

nh ngha ba ph n t
mytypes.c mytypes.i mytypes.f

m i ph n t c m t ki u d li u khc nhau. Nhng v t t c chng u n m cng m t ch trong b nh nn b t k s thay i no i v i m t ph n t s nh h ng t i t t c cc thnh ph n cn l i. M t trong nh ng cng d ng c a union l dng k t h p m t ki u d liu c b n v i m t m ng hay cc c u trc g m cc ph n t nh hn. V d :
union mix_t{ long l; struct { short hi; short lo; } s; char c[4]; } mix;

nh ngha ba ph n t cho php chng ta truy xu t n cng m t nhm 4 byte: mix.l, mix.s v mix.c m chng ta c th s d ng tu theo vi c chng ta mu n truy xu t n nhm 4 byte ny nh th no. Ti dng nhi u ki u d li u khc nhau, m ng v c u trc trong union b n c th th y cc cch khc nhau m chng ta c th truy xu t d li u.

Cc unions v danh
Trong C++ chng ta c th s d ng cc unions v danh. N u chng ta t m t union trong m t c u trc m khng tn (ph n i sau c p ngo c nh n { }) union s tr thnh v danh v chng ta c th truy xu t tr c ti p n cc ph n t c a n m khng c n n tn c a union (c c n cng khng c). V d , hy xem xt s khc bi t gi a hai ph n 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 bi t duy nh t gi a hai o n m ny l trong o n m u tin chng ta t tn cho union (price) cn trong ci th hai th khng. Khi truy nh p vo cc ph n t dollars v yens, trong tr ng h p th nh t chng ta vi t:
book.price.dollars book.price.yens

cn trong tr ng h p th hai:
book.dollars book.yens

M t l n n a ti nh c l i r ng v n l m t union, hai tr ng dollars v yens u chi m cng m t ch trong b nh nn chng khng th gi hai gi tr khc nhau.

Ki u li t k (enum)
Ki u d li u li t k dng t o ra cc ki u d li u ch a m t ci g hi c bi t m t cht, khng ph i ki u s hay ki u k t ho c cc h ng true v false. D ng th c c a n nh sau:
enum model_name { value1, value2, value3, . . } object_name;

V d , chng ta c th t o ra m t ki u d li u m i c tn color lu tr cc mu v i ph n khai bo nh sau:


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

Ch r ng chng ta khng s d ng b t k m t ki u d li u c b n no trong ph n khai bo. Chng ta t o ra m t ki u d li u m i m khng d a trn b t k ki u d li u no c s n: ki u color_t, nh ng gi tr c th c a ki u color_t c vi t trong c p ngo c nh n {}. V d , sau khi khai bo ki u li t k, bi u th c sau s l h p l :
colors_t mycolor; mycolor = blue; if (mycolor == green) mycolor = red;

Trang 77

Updatesofts.com

Ebooks Team

Trn th c t ki u d li u li t k c d ch l m t s nguyn v cc gi tr c a n l cc h ng s nguyn c ch nh. N u i u ny khng oc ch nh, gi tr nguyn tng ng v i ph n t u tin l 0 v cc gi tr ti p theo c th tng ln 1, V v y, trong ki u d li u colors_t m chng ta nh ngha trn, white tng ng v i 0, blue tng ng v i 1, green tng ng v i 2 v c ti p t c nh th . N u chng ta ch nh m t gi tr nguyn cho m t gi tr no c a ki u d li u li t k (trong v d ny l ph n t u tin) cc gi tr ti p theo s l cc gi tr nguyn ti p theo, v d :
enum months_t { january=1, february, march, april, may, june, july, august, september, october, november, december} y2k; trong tr ng h p ny, bi n y2k c ki u d li u li t k months_t c th ch a m t trong 12 gi tr t january n december v tng ng v i cc gi tr nguyn t 1 n 12, khng ph i 0 n 11 v chng ta t january b ng 1.

Trang 78

You might also like