Professional Documents
Culture Documents
C++ Can Ban Va Nang Cao
C++ Can Ban Va Nang Cao
C++ Can Ban Va Nang Cao
com
Ebooks Team
Trang 1
Updatesofts.com
Ebooks Team
Hello World!
#include <iostream.h>
int main ()
{
cout << "Hello World!";
return 0;
}
Updatesofts.com
Ebooks Team
(khng bt buc). Ni dung ca hm main tip ngay sau phn khai bo chnh thc c
bao trong cc ngoc nhn ( { } ) nh trong v d ca chng ta
cout << "Hello World";
Dng lnh ny lm vic quan trng nht ca chng trnh. cout l mt dng (stream)
output chun trong C++ c nh ngha trong th vin iostream v nhng g m dng
lnh ny lm l gi chui k t "Hello World" ra mn hnh.
Ch rng dng ny kt thc bng du chm phy ( ; ). K t ny c dng kt thc
mt lnh v bt buc phi c sau mi lnh trong chng trnh C++ ca bn (mt trong
nhng li ph bin nht ca nhng lp trnh vin C++ l qun mt du chm phy).
return 0;
ta c th vit
int main () { cout << " Hello World "; return 0; }
Cc ch thch.
Cc ch thch c cc lp trnh vin s dng ghi ch hay m t trong cc phn ca
chng trnh. Trong C++ c hai cch ch thch
// Ch thch theo dng
/* Ch thch theo khi */
Ch thch theo dng bt u t cp du x (//) cho n cui dng. Ch thch theo khi
bt u bng /* v kt thc bng */ v c th bao gm nhiu dng. Chng ta s thm
cc ch thch cho chng trnh :
/* my second program in C++
Trang 3
Updatesofts.com
Ebooks Team
Nu bn vit cc ch thch trong chng trnh m khng s dng cc du //, /* hay */,
trnh dch s coi chng nh l cc lnh C++ v s hin th cc li.
Trang 4
Updatesofts.com
Ebooks Team
Cc kiu d liu
Khi lp trnh, chng ta lu tr cc bin trong b nh ca my tnh nhng my tnh phi
bit chng ta mun lu tr g trong chng v cc kiu d liu khc nhau s cn lng b
nh khc nhau.
Trang 5
Updatesofts.com
Ebooks Team
S
byte
M t
char
short
long
int
float
double 8
long
10
double
bool
Min gi tr
S nguyn. di ca n ph thuc vo h
thng, nh trong MS-DOS n l 16-bit, trn
Windows 9x/2000/NT l 32 bit...
Dng du phy ng
Dng du phy ng vi chnh xc gp
i
Dng du phy ng vi chnh xc hn
na
Gi tr logic. N mi c thm vo chun
ANSI-C++. Bi vy khng phi tt c cc
trnh dch u h tr n.
hoc false
Khai bo mt bin
c th s dng mt bin trong C++, u tin chng ta phi khai bo n, ghi r n l
kiu d liu no. Chng ta ch cn vit tn kiu (nh int, short, float...) tip theo sau
l mt tn bin hp l. V d
int a;
float mynumber;
Dng u tin khai bo mt bin kiu int vi tn l a. Dng th hai khai bo mt bin
kiu float vi tn mynumber. Sau khi c khai bo, cc bin trn c th c dng
trong phm vi ca chng trong chng trnh.
Trang 6
Updatesofts.com
Ebooks Team
cng hon ton tng ng vi dng khai bo trn. Trong thc t, rt t khi ngi ta
dng n t kho signed. Ngoi l duy nht ca lut ny kiu char. Trong chun ANSIC++ n l kiu d liu khc vi signed char v unsigned char.
c th thy r hn vic khai bo trong chng trnh, chng ta s xem xt mt on m
C++ v d nh sau:
// operating with variables
#include <iostream.h>
int main ()
{
// declaring variables:
int a, b;
int result;
// process:
a = 5;
b = 2;
a = a + 1;
result = a - b;
// print out the result:
cout << result;
// terminate the program:
Trang 7
Updatesofts.com
Ebooks Team
return 0;
}
Khi to cc bin
Khi khai bo mt bin, gi tr ca n mc nhin l khng xc nh. Nhng c th bn s
mun n mang mt gi tr xc nh khi c khai bo. lm iu , bn ch cn vit
du bng v gi tr bn mun bin s mang:
type identifier = initial_value ;
V d, nu chng ta mun khai bo mt bin int l a cha gi tr 0 ngay t khi khi to,
chng ta s vit :
int a = 0;
B xung vo cch khi to kiu C ny, C++ cn c thm mt cch mi khi to bin
bng cch bc mt cp ngoc n sau gi tr khi to. V d :
int a (0);
Trang 8
Updatesofts.com
Ebooks Team
Cc hng s
Mt hng s l bt k mt biu thc no mang mt gi tr c nh, nh:
Cc s nguyn
1776
707
-273
chng l cc hng mang gi tr s. Ch rng khi biu din mt hng kiu s chng ta
khng cn vit du ngoc kp hay bt k du hiu no khc.
Thm vo nhng s h c s 10 ( ci m tt c chng ta u bit) C++ cn cho php
s dng cc hng s c s 8 v 16. biu din mt s h c s 8 chng ta t trc n
k t 0, biu din s h c s 16 chng ta t trc n hai k t 0x. V d:
75
0113
0x4b
// C s 10
// c s 8
// c s 16
K t v xu k t
Trong C++ cn tn ti cc hng khng phi kiu s nh:
'z'
'p'
"Hello world"
"How do you do?"
Trang 9
Updatesofts.com
Ebooks Team
xung dng
\r
li v u dng
\t
k t tab
\v
\b
backspace
\f
sang trang
\a
Ku bp
\'
du nhy n
\"
du nhy kp
du hi
\\
k t x ngc
V d:
'\n'
'\t'
"Left \t Right"
"one\ntwo\nthree"
Trang 10
Updatesofts.com
Ebooks Team
"string expressed in \
two lines"
V d:
#define PI 3.14159265
#define NEWLINE '\n'
#define WIDTH 100
Trong thc t vic duy nht m trnh dch lm khi n tm thy mt ch th #define l
thay th cc tn hng ti bt k ch no chng xut hin (nh trong v d trc, PI,
NEWLINE hay WIDTH) bng gi tr m chng c nh ngha. V vy cc hng s #define
c coi l cc hng s macro
Ch th #define khng phi l mt lnh thc thi, n l ch th tin x l (preprocessor),
l l do trnh dch coi c dng l mt ch th v dng khng cn kt thc bng du
chm phy. Nu bn thm du chm phy vo cui dng, n s c coi l mt phn ca
gi tr nh ngha hng.
Trang 11
Updatesofts.com
Ebooks Team
Trong trng hp kiu khng c ch r (nh trong v d cui) trnh dch s coi n l
kiu int
Trang 12
Updatesofts.com
Ebooks Team
Cc ton t
Qua bi trc chng ta bit n s tn ti ca cc bin v cc hng. Trong C++,
thao tc vi chng ta s dng cc ton t, l cc t kho v cc du khng c trong
bng ch ci nhng li c trn hu ht cc bn phm trn th gii. Hiu bit v chng l
rt quan trng v y l mt trong nhng thnh phn c bn ca ngn ng C++.
Ton t gn (=).
Ton t gn dng gn mt gi tr no cho mt bin
a = 5;
gn gi tr nguyn 5 cho bin a. V tri bt buc phi l mt bin cn v phi
c th l bt k hng, bin hay kt qu ca mt biu thc.
Cn phi nhn mnh rng ton t gn lun c thc hin t tri sang phi
v khng bao gi o ngc
a = b;
gn gi tr ca bin a bng gi tr ang cha trong bin b. Ch rng
chng ta ch gn gi tr ca b cho a v s thay i ca b sau s
khng nh hng n gi tr ca a.
Trang 13
Updatesofts.com
Ebooks Team
Th t thc hin cc ton t ny cng ging nh chng c thc hin trong ton
hc. iu duy nht c v hi l i vi bn l php ly phn d, k hiu bng du
phn trm (%). y chnh l php ton ly phn d trong php chia hai s nguyn
vi nhau. V d, nu a = 11 % 3;, bin a s mang gi tr 2 v 11 = 3*3 +2.
Cc ton t gn phc hp (+=, -=, *=, /=, %=, >>=, <<=, &=, ^=, |=)
Mt c tnh ca ngn ng C++ lm cho n ni ting l mt ngn ng sc
tch chnh l cc ton t gn phc hp cho php chnh sa gi tr ca mt
bin vi mt trong nhng ton t c bn sau:
value += increase; tng ng vi value = value + increase;
a -= 5; tng ng vi a = a - 5;
a /= b; tng ng vi a = a / b;
price *= units + 1; tng ng vi price = price *
(units + 1);
v tng t cho tt c cc ton t khc.
Tng v gim.
Mt v d khc ca vic tit kim khi vit m lnh l ton t tng (++) v
gim (--). Chng tng hoc gim gi tr cha trong mt bin i 1. Chng
tng ng vi +=1 hoc -=1. V vy, cc dng sau l tng ng:
a++;
a+=1;
a=a+1;
V d 2
B=3;
B=3;
A=++B;
A=B++;
// A is 4, B is 4 // A is 3, B is 4
Cc ton t quan h ( ==, !=, >, <, >=, <= )
c th so snh hai biu thc vi nhau chng ta c th s dng cc ton t
quan h. Theo chun ANSI-C++ th gi tr ca thao tc quan h ch c th l
gi tr logic - chng ch c th c gi tr true hoc false, tu theo biu thc
kt qu l ng hay sai.
Trang 14
Updatesofts.com
Ebooks Team
V d:
(7 == 5) s tr gi tr false
(6 >= 6) s tr gi tr true
tt nhin thay v s dng cc s, chng ta c th s dng bt c biu
thc no. Cho a=2, b=3 v c=6
(a*b >= c) s tr gi tr true.
(b+4 < a*c) s tr gi tr false
Cn ch rng = (mt du bng) lf hon ton khc vi == (hai du bng).
Du u tin l mt ton t gn ( gn gi tr ca biu thc bn phi cho bin
bn tri) v du cn li (==) l mt ton t quan h nhm so snh xem hai
biu thc c bng nhau hay khng.
Trong nhiu trnh dch c trc chun ANSI-C++ cng nh trong ngn ng C,
cc ton t quan h khng tr v gi tr logic true hoc false m tr v gi tr
int vi 0 tng ng vi false cn gi tr khc 0 (thng l 1) th tng ng vi
true.
Cc ton t logic ( !, &&, || ).
Ton t ! tng ng vi ton t logic NOT, n ch c mt i s pha bn
phi v vic duy nht m n lm l i ngc gi tr ca i s t true sang
false hoc ngc li. V d:
!(5 == 5) tr v false v biu thc bn phi (5 == 5) c gi trtrue.
!(6 <= 4) tr v true v (6 <= 4)c gi tr false.
!true
tr v false.
!false
tr v true.
Ton t logic && v || c s dng khi tnh ton hai biu thc ly ra mt
kt qu duy nht. Chng tng ng vi cc ton t logic AND v OR. Kt qu
ca chng ph thuc vo mi quan h ca hai i s:
i s th nht i s th hai Kt qu Kt qu
a && b a || b
a
b
true
true
true
true
true
false
false
true
false
true
false
true
false
false
false
false
V d:
Trang 15
Updatesofts.com
Ebooks Team
tr v gi tr ln hn, a hoc b.
OR
<<
>>
Logical OR
Trang 16
Updatesofts.com
Ebooks Team
Th t u tin ca cc ton t
Khi vit cc biu thc phc tp vi nhiu ton hng cc bn c th t hi ton hng
no c tnh trc, ton hng no c tnh sau. V d nh trong biu thc sau:
a = 5 + 7 % 2
c th c hai cch hiu sau:
a = 5 + (7 % 2)
a = (5 + 7) % 2
vi kt qu l 6, hoc
vi kt qu l 0
Ton t
M t
Associativity
::
scope
Tri
() [ ] -> . sizeof
Tri
++ --
tng/gim
o ngc bit
NOT
&*
Ton t con tr
(type)
Chuyn i kiu
+-
Dng hoc m
*/%
Ton t s hc
Trang 17
Phi
Tri
Updatesofts.com
Ebooks Team
+-
Ton t s hc
Tri
<< >>
Dch bit
Tri
Ton t quan h
Tri
== !=
Ton t quan h
Tri
&^|
Ton t thao tc
bit
Tri
10
&& ||
Ton t logic
Tri
11
?:
12
= += -= *= /= %=
>>= <<= &= ^= |=
Ton t gn
Phi
13
Du phy
Tri
Trang 18
Updatesofts.com
Ebooks Team
Cu
ln mn hnh. S tin li
ca vic s dng lp li ton t chn (<<) th hin r khi chng ta mun hin th nhiu
bin v hng hn l ch mt bin:
cout << "Hello, I am " << age << " years old and my email address is " << email_add;
phi nhn mnh rng cout khng nhy xung dng sau khi xut d liu, v vy hai
Cn
cu lnh sau :
Bi vy khi mun xung dng chng ta phi s dng k t xung dng, trong C++ l \n:
Trang 19
Updatesofts.com
Ebooks Team
s in ra mn hnh:
First sentence.
Second sentence.
khai bo bin age c kiu int v i nhp d liu t cin (bn phm) lu tr n trong
bin kiu nguyn ny.
ch bt u s l d liu nhp t bn phm sau khi phm Enter c g. V vy d
bn ch nhp mt k t th cin vn s kin nhn ch cho n khi bn g phm Enter.
cin
// 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
tng ng vi
cin >> a;
cin >> b;
Trong c hai trng hp ngi s dng phi cung cp hai d liu, mt cho bin a v mt
cho bin b v c ngn cch bi mt du trng hp l: mt du cch, du tab hay k t
xung dng.
Trong trng hp kiu khng c ch r (nh trong v d cui) trnh dch s coi n l
kiu int.
Trang 21
Updatesofts.com
Ebooks Team
Cc cu trc iu khin.
Mt chng trnh thng khng ch bao gm cc lnh tun t ni tip nhau. Trong qu
trnh chy n c th r nhnh hay lp li mt on m no . lm iu ny chng ta
s dng cc cu trc iu khin.
Cng vi vic gii thiu cc cu trc iu khin chng ta cng s phi bit ti mt khi
nim mi: khi lnh, l mt nhm cc lnh c ngn cch bi du chm phy (;)
nhng c gp trong mt khi gii hn bi mt cp ngoc nhn: { v }.
Hu ht cc cu trc iu khin m chng ta s xem xt trong chng ny cho php s
dng mt lnh n hay mt khi lnh lm tham s, tu thuc vo chng ta c t n
trong cp ngoc nhn hay khng.
V d:
Trang 22
Updatesofts.com
Ebooks Team
if (x == 100)
cout << "x is 100";
else
cout << "x is not 100";
is positive";
0)
is negative";
is 0";
Cc cu trc lp
Mc ch ca cc vng lp l lp li mt thao tc vi mt s ln nht nh hoc trong khi
mt iu kin no cn tho mn.
Vng lp while .
Dng ca n nh sau:
while (expression) statement
Trang 23
Updatesofts.com
Ebooks Team
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
Trang 24
Updatesofts.com
Ebooks Team
10, 9, 8, 7, 6, 5, 4, 3, 2, 1,
FIRE!
Trang 25
Updatesofts.com
Ebooks Team
khng xc nh hay buc n phi kt thc gia chng thay v kt thc mt cch
bnh thng. V d, chng ta s dng vic m ngc trc khi n kt thc:
// break loop example
#include <iostream.h>
int main ()
{
int n;
for (n=10; n>0; n--) {
cout << n << ", ";
if (n==3)
{
cout << "countdown
aborted!";
break;
}
}
return 0;
}
10, 9, 8, 7, 6, 5, 4, countdown
aborted!
Lnh continue.
Lnh continue lm cho chng trnh b qua phn cn li ca vng lp v nhy
sang ln lp tip theo. V d chng ta s b qua s 5 trong phn m ngc:
// break loop example
#include <iostream.h>
int main ()
{
for (int n=10; n>0; n--) {
if (n==5) continue;
cout << n << ", ";
}
cout << "FIRE!";
return 0;
}
10, 9, 8, 7, 6, 4, 3, 2, 1,
FIRE!
Lnh goto.
Lnh ny cho php nhy v iu kin ti bt k im no trong chng trnh. Ni
chung bn nn trnh dng n trong chng trnh C++. Tuy nhin chng ta vn c
mt v d dng lnh goto m ngc:
// goto loop example
#include <iostream.h>
int main ()
{
int n=10;
loop: ;
cout << n << ", ";
n--;
if (n>0) goto loop;
cout << "FIRE!";
return 0;
}
10, 9, 8, 7, 6, 5, 4, 3, 2, 1,
FIRE!
Hm exit.
Trang 26
Updatesofts.com
Ebooks Team
N hot ng theo cch sau: switch tnh biu thc v kim tra xem n c bng
hay khng, nu ng th n thc hin block of instructions 1 cho n
khi tm thy t kho break, sau nhy n phn cui ca cu trc la chn switch.
Cn nu khng, switch s kim tra xem biu thc c bng constant2 hay khng. Nu
ng n s thc hin block of instructions 2 cho n khi tm thy t kho break.
Cui cng, nu gi tr biu thc khng bng bt k hng no c ch nh trn (bn c
th ch nh bao nhiu cu lnh case tu thch), chng trnh s thc hin cc lnh trong
phn default: nu n tn ti v phn ny khng bt buc phi c.
constant1
if-else tng ng
if (x == 1) {
cout << "x is 1";
}
else if (x == 2) {
cout << "x is 2";
}
else {
Trang 27
Updatesofts.com
default:
cout << "value of x
unknown";
}
Ebooks Team
Trang 28
Updatesofts.com
Ebooks Team
Hm (I)
Hm l mt khi lnh c thc hin khi n c gi t mt im khc ca chng
trnh. Dng thc ca n nh sau:
type name ( argument1, argument2, ...) statement
trong :
type l kiu d liu c tr v ca hm
name l tn gi ca hm.
arguments l cc tham s (c nhiu bao nhiu
// 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;
}
Trang 29
Updatesofts.com
Ebooks Team
Trang 30
Updatesofts.com
Ebooks Team
Tng t nh vy
cout << "The second result is " << subtraction (7,2);
cng cho kt qu ging nh hai dng lnh trn nhng trong trng hp ny chng ta gi
hm subtraction trc tip nh l mt tham s ca cout. Chng ta cng c th vit:
cout << "The second result is " << 5;
Trang 31
Updatesofts.com
Ebooks Team
v 5 l kt qu ca subtraction (7,2).
Cn vi lnh
cout << "The third result is " << subtraction (x,y);
chng ta c th vit:
z = subtraction (x,y) + 4;
cng hon ton cho kt qu tng ng. Ch rng du chm phy c t cui
biu thc ch khng cn thit phi t ngay sau li gi hm.
I'm a function!
Trang 32
Updatesofts.com
Ebooks Team
T kho void trong phn danh sch tham s c ngha l hm ny khng nhn mt tham
s no. Tuy nhin trong C++ khng cn thit phi s dng void lm iu ny. Bn ch
n gin s dng cp ngoc n ( ) l xong.
Bi v hm ca chng ta khng c mt tham s no, v vy li gi hm dummyfunction
s l :
dummyfunction ();
Trang 33
Updatesofts.com
Ebooks Team
Hm (II).
Truyn tham s theo tham s gi tr hay tham s bin.
Cho n nay, trong tt c cc hm chng ta bit, tt c cc tham s truyn cho hm u
c truyn theo gi tr. iu ny c ngha l khi chng ta gi hm vi cc tham s,
nhng g chng ta truyn cho hm l cc gi tr ch khng phi bn thn cc bin. V d,
gi s chng ta gi hm addition nh sau:
int x=5, y=3, z;
z = addition ( x , y );
Trang 34
Updatesofts.com
Ebooks Team
Previous=99, Next=101
Gi tr mc nh ca tham s.
Khi nh ngha mt hm chng ta c th ch nh nhng gi tr mc nh s c truyn
cho cc i s trong trng hp chng b b qua khi hm c gi. lm vic ny n
gin ch cn gn mt gi tr cho i s khi khai bo hm. Nu gi tr ca tham s vn
c ch nh khi gi hm th gi tr mc nh s b b qua. V d:
Trang 35
Updatesofts.com
Ebooks Team
6
5
Nhng chng ta thy trong thn chng trnh, c hai li gi hm divide. Trong lnh u
tin:
divide (12)
Qu ti cc hm.
Hai hm c th c cng tn nu khai bo tham s ca chng khc nhau, iu ny c ngha
l bn c th t cng mt tn cho nhiu hm nu chng c s tham s khc nhau hay
kiu d liu ca cc tham s khc nhau (hay thm ch l kiu d liu tr v khc nhau).
V d:
// overloaded function
#include <iostream.h>
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;
}
Cc hm inline.
Ch th inline c th c t trc khao bo ca mt hm ch r rng li gi hm s
c thay th bng m lnh ca hm khi chng trnh c dch. Vic ny tng ng
vi vic khai bo mt macro, li ch ca n ch th hin vi cc hm rt ngn, tc
chy chng trnh s c ci thin v n khng phi gi mt th tc con.
Cu trc ca n nh sau:
inline type name ( arguments ... ) { instructions ... }
qui.
Cc hm c th gi chnh n. iu ny c th c ch vi mt s tc v nh l mt s
phng php sp xp hay tnh giai tha ca mt s. V d, tnh giai tha ca mt s
(n), cng thc ton hc ca n nh sau:
n! = n * (n-1) * (n-2) * (n-3) ... * 1
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;
}
Trang 38
Updatesofts.com
Ebooks Team
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;
}
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
cho php hai hm ny c th c s dng trc khi chng c nh ngha hon chnh.
Tuy nhin l do c bit gii thch ti sao chng trnh ny li cn t nht mt hm phi
c khi bo mu l trong odd c mt li gi n even v trong even c mt li gi n
odd. V vy nu khng c hm no c khai bo trc th li chc chn s xy ra.
Trang 39
Updatesofts.com
Ebooks Team
Trang 40
Updatesofts.com
Ebooks Team
Mng
Mng l mt dy cc phn t c cng kiu c t lin tip trong b nh v c th truy
xut n tng phn t bng cch thm mt ch s vo sau tn ca mng.
iu ny c ngha l, v d, chng ta c th lu 5 gi tr kiu int m khng cn phi khai
bo 5 bin khc nhau.V d, mt mng cha 5 gi tr nguyn kiu int c tn l billy c
th c biu din nh sau:
Khi to mt mng.
Khi khai bo mt mng vi tm hot ng a phng (trong mt hm), theo mc nh n
s khng c khi to, v vy ni dung ca n l khng xc nh cho n khi chng ra
lu cc gi tr ln .
Nu chng ta khai bo mt mng ton cc (bn ngoi tt c cc hm) n s c khi to
v tt c cc phn t c t bng 0. V vy nu chng ta khai bo mng ton cc:
Trang 41
Updatesofts.com
Ebooks Team
S phn t trong mng m chng ta khi to vi cp ngoc nhn { } phi bng s phn
t ca mng c khai bo vi cp ngoc vung [ ]. Bi v iu ny c th c coi
l mt s lp li khng cn thit nn C++ cho php trng gia cp ngoc vung, kch
thc ca mng c xc nh bng s gi tr gia cp ngoc nhn.
Trang 42
Updatesofts.com
Ebooks Team
billy[2] = 75;
V vy, xt v mi phng din, biu thc billy[2] ging nh bt k mt bin kiu int.
Ch rng phn t th ba ca billy l billy[2], v mng bt u t ch s 0. V vy,
phn t cui cng s l billy[4]. V vy nu chng ta vit billy[5], chng ta s truy
xut n phn t th 6 ca mng v vt qu gii hn ca mng.
Trong C++, vic vt qu gii hn ch s ca mng l hon ton hp l, tuy nhin n c
th gy ra nhng vn thc s kh pht hin bi v chng khng to ra nhng li trong
qu trnh dch nhng chng c th to ra nhng kt qu khng mong mun trong qu
trnh thc hin. Nguyn nhn ca vic ny s c ni n k hn khi chng ta bt u s
dng con tr.
Cn phi nhn mnh rng chng ta s dng cp ngoc vung cho hai tc v: u tin l
t kch thc cho mng khi khai bo chng v th hai, ch nh ch s cho mt phn
t c th ca mng khi xem xt n n.
int billy[5];
billy[2] = 75;
mng.
12206
Trang 43
Updatesofts.com
Ebooks Team
biu din mt mng hai chiu kch thc 3x5 c kiu int. Cch khai bo mng
ny nh sau:
jimmy
v, v d, cch truy xut n phn t th hai theo chiu dc v th t theo chiu ngang
trong mt biu thc nh sau:
jimmy[1][3]
Trang 44
Updatesofts.com
Ebooks Team
// pseudo-multidimensional array
#include <iostream.h>
#define WIDTH 5
#define HEIGHT 3
#define WIDTH 5
#define HEIGHT 3
int main ()
{
for (n=0;n<HEIGHT;n++)
for (m=0;m<WIDTH;m++)
{
jimmy[n][m]=(n+1)*(m+1);
}
return 0;
}
int main ()
{
for (n=0;n<HEIGHT;n++)
for (m=0;m<WIDTH;m++)
{
jimmy[n * WIDTH +
m]=(n+1)*(m+1);
}
return 0;
}
thnh
#define HEIGHT 4
Trang 45
Updatesofts.com
Ebooks Team
ch cn gi hm nh sau:
procedure (myarray);
Di y l mt v d c th
5 10 15
2 4 6 8 10
// 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;
}
Trang 46
Updatesofts.com
Ebooks Team
Trang 47
Updatesofts.com
Ebooks Team
Xu k t
Trong tt c cc chng trnh chng ta thy cho n gi, chng ta ch s dng cc bin
kiu s, ch dng biu din cc s. Nhng bn cnh cc bin kiu s cn c cc xu k
t, chng cho php chng ta biu din cc chui k t nh l cc t, cu, on vn bn...
Cho n gi chng ta mi ch dng chng di dng hng ch cha quan tm n cc
bin c th cha chng.
Trong C++ khng c kiu d liu c bn lu cc xu k t. c th tha mn nhu
cu ny, ngi ta s dng mng c kiu char. Hy nh rng kiu d liu ny (char) ch
c th lu tr mt k t n, bi vy n c dng to ra xu ca cc k t n.
V d, mng sau (hay l xu k t):
char jenny [20];
c th lu mt xu k t vi di cc i l 20 k t. Bn c th tng tng n nh
sau:
Chng ta c th biu din jenny (mt mng c 20 phn t kiu char) khi lu tr xu k
t "Hello" v "Merry Christmas" theo cch sau:
Khi to cc xu k t.
V nhng xu k t l nhng mng bnh thng nn chng cng nh cc mng khc. V
d, nu chng ta mun khi to mt xu k t vi nhng gi tr xc nh chng ta c th
lm iu tng t nh vi cc mng khc:
Trang 48
Updatesofts.com
Ebooks Team
Gn gi tr cho xu k t
V v tri ca mt lnh gn ch c th l mt phn t ca mng ch khng th l c mng,
chng ta c th gn mt xu k t cho mt mng kiu char s dng mt phng php
nh sau:
mystring[0] = 'H';
mystring[1] = 'e';
Trang 49
Updatesofts.com
mystring[2]
mystring[3]
mystring[4]
mystring[5]
=
=
=
=
Ebooks Team
'l';
'l';
'o';
'\0';
V d:
J. Soulie
Trang 50
Updatesofts.com
Ebooks Team
{
char szMyName [20];
setstring (szMyName,"J. Soulie");
cout << szMyName;
return 0;
}
Mt phng thc thng dng khc gn gi tr cho mt mng l s dng trc tip
dng nhp d liu (cin). Trong trng hp ny gi tr ca xu k t c gn bi ngi
dng trong qu trnh chng trnh thc hin.
Khi cin c s dng vi cc xu k t n thng c dng vi phng thc getline
ca n, phng thc ny c th c gi nh sau:
cin.getline ( char buffer[], int length, char delimiter = ' \n');
Trang 51
Updatesofts.com
Ebooks Team
xu k t thay cho cin.getline. V d, trong chn trnh ca chng ta, khi chng ta
mun nhn d liu t ngi dng chng ta c th vit:
cin >> mybuffer;
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;
Trang 52
Updatesofts.com
Ebooks Team
return 0;
}
Trang 53
Updatesofts.com
Ebooks Team
Con tr
Ton t ly a ch (&).
Vo thi im m chng ta khai bo mt bin th n phi c lu tr trong mt v tr c
th trong b nh. Ni chung chng ta khng quyt nh ni no bin c t - tht
may mn rng iu c lm t ng bi trnh bin dch v h iu hnh, nhng
mt khi h iu hnh gn mt a ch cho bin th chng ta c th mun bit bin
c lu tr u.
iu ny c th c thc hin bng cch t trc tn bin mt du v (&), c ngha l
"a ch ca". V d:
ted = &andy;
s gn cho bin ted a ch ca bin andy, v khi t trc tn bin andy du v (&)
chng ta khng cn ni n ni dung ca bin m ch ni n a ch ca n trong b
nh.
Gi s rng bin andy c t nh c a ch 1776 v chng ta vit nh sau:
andy = 25;
fred = andy;
ted = &andy;
kt qu s ging nh trong s di y:
Trang 54
Updatesofts.com
Ebooks Team
Bn phi phn bit c rng ted c gi tr 1776, nhng *ted (vi mt du sao ng
trc) tr ti gi tr c lu tr trong a ch 1776, l 25. Hy ch s khc bit gia
vic c hay khng c du sao tham chiu.
beth = ted;
beth = *ted;
Ton t ly a ch (&)
Trang 55
Updatesofts.com
Ebooks Team
trong type l kiu d liu c tr ti, khng phi l kiu ca bn thn con tr. V d:
int * number;
char * character;
float * greatnumber;
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;
}
// more pointers
#include <iostream.h>
int main ()
{
int value1 = 5, value2 = 15;
int *p1, *p2;
p1 = &value1;
// p1 = a ch
ca value1
p2 = &value2;
// p2 = a ch
ca value2
*p1 = 10;
// gi tr tr
bi p1 = 10
*p2 = *p1;
// gi tr tr
bi p2 = gi tr tr bi p1
p1 = p2;
// p1 = p2
(php gn con tr)
*p1 = 20;
// gi tr tr
bi p1 = 20
cout << "value1==" << value1 <<
"/ value2==" << value2;
return 0;
}
Mt dng c th gy s ch ca bn l:
Trang 57
Updatesofts.com
Ebooks Team
dng ny khai bo hai con tr bng cch t du sao (*) trc mi con tr. Nguyn nhn
l kiu d liu khai bo cho c dng l int v v theo th t t phi sang tri, du sao
c tnh trc tn kiu. Chng ta ni n iu ny trong bi 1.3: Cc ton t.
Con tr v mng.
Trong thc t, tn ca mt mng tng ng vi a ch phn t u tin ca n, ging
nh mt con tr tng ng vi a ch ca phn t u tin m n tr ti, v vy thc
t chng hon ton nh nhau. V d, cho hai khai bo sau:
int numbers [20];
int * p;
lnh sau s hp l:
p = numbers;
y p v numbers l tng ng v chng c cng thuc tnh, s khc bit duy nht
l chng ta c th gn mt gi tr khc cho con tr p trong khi numbers lun tr n phn
t u tin trong s 20 phn t kiu int m n c nh ngha vi. V vy, khng ging
nh p - l mt bin con tr bnh thng, numbers l mt con tr hng. Lnh gn sau
y l khng hp l:
numbers = p;
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;
Trang 58
Updatesofts.com
Ebooks Team
l hon ton
// a [offset of 5] = 0
// pointed by (a+5) = 0
tng ng v hp l bt k a l mng hay l
mt con tr.
Khi to con tr
Khi khai bo con tr c th chng ta s mun ch nh r rng chng s tr ti bin no,
int number;
int *tommy = &number;
l tng ng vi:
int number;
int *tommy;
tommy = &number;
Trang 59
Updatesofts.com
Ebooks Team
cn phi nhc li rng terry mang gi tr 1702 ch khng phi l 'h' hay "hello".
Bin con tr terry tr ti mt xu k t v n c th c s dng nh l i vi mt
mng (hy nh rng mt mng ch n thun l mt con tr hng). V d, nu chng ta
mun thay k t 'o' bng mt du chm than, chng ta c th thc hin vic bng hai
cch:
terry[4] = '!';
*(terry+4) = '!';
hy nh rng vit terry[4] l hon ton ging vi vit *(terry+4) mc d biu thc
thng dng nht l ci u tin. Vi mt trong hai lnh trn xu do terry tr n s c
gi tr nh sau:
Trang 60
Updatesofts.com
Ebooks Team
Nu chng ta vit
mychar++;
myshort++;
mylong++;
mychar - nh bn mong i - s mang gi tr 1001. Tuy nhin myshort s mang gi tr
2002 v mylong mang gi tr 3004. Nguyn nhn l khi cng thm 1 vo mt con tr th
iu ny ng vi c hai php ton cng v tr i vi con tr. Chng ta cng hon ton
thu c kt qu nh trn nu vit:
mychar = mychar + 1;
myshort = myshort + 1;
mylong = mylong + 1;
Cn phi cnh bo bn rng c hai ton t tng (++) v gim (--) u c quyn u tin
ln hn ton t tham chiu (*), v vy biu thc sau y c th dn ti kt qu sai:
*p++;
*p++ = *q++;
Trang 61
Updatesofts.com
Ebooks Team
Con tr tr ti con tr
C++ cho php s dng cc con tr tr ti cc con tr khc ging nh l tr ti d liu.
lm vic chng ta ch cn thm mt du sao (*) cho mi mc tham chiu.
char a;
char * b;
char ** c;
a = 'z';
b = &a;
c = &b;
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;
}
Con tr hm
C++ cho php thao tc vi cc con tr hm. Tin ch tuyt vi ny cho php truyn mt
hm nh l mt tham s n mt hm khc. c th khai bo mt con tr tr ti mt
hm chng ta phi khai bo n nh l khai bo mu ca mt hm nhng phi bao trong
mt cp ngoc n () tn ca hm v chn du sao (*) ng trc.
8
// 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;
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;
}
Trang 64
Updatesofts.com
Ebooks Team
B nh ng
Cho n nay, trong cc chng trnh ca chng ta, tt c nhng phn b nh chng ta c
th s dng l cc bin cc mng v cc i tng khc m chng ta khai bo. Kch c
ca chng l c nh v khng th thay i trong thi gian chng trnh chy. Nhng nu
chng ta cn mt lng b nh m kch c ca n ch c th c xc nh khi chng
trnh chy, v d nh trong trng hp chng ta nhn thng tin t ngi dng xc nh
lng b nh cn thit.
Gii php y chnh l b nh ng, C++ tch hp hai ton t new v delete thc
hin vic ny
Hai ton t new v delete ch c trong C++. phn sau ca bi chng ta s
bit nhng thao tc tng ng vi cc ton t ny trong C.
Ton t new v new[ ]
c th c c b nh ng chng ta c th dng ton t new. Theo sau ton t ny
l tn kiu d liu v c th l s phn t cn thit c t trong cp ngoc vung. N
tr v mt con tr tr ti u ca khi nh va c cp pht. Dng thc ca ton t ny
nh sau:
pointer = new type
hoc
pointer = new type [elements]
Biu thc u tien c dng cp pht b nh cha mt phn t c kiu type. Lnh
th hai c dng cp pht mt khi nh (mt mng) gm cc phn t kiu type.
V d:
int * bobby;
bobby = new int [5];
trong trng hp ny, h iu hnh dnh ch cho 5 phn t kiu int trong b nh v tr
v mt con tr tr n u ca khi nh. V vy lc ny bobby tr n mt khi nh hp
l gm 5 phn t int.
Updatesofts.com
Ebooks Team
mng phi l mt hng, iu ny gii hn kch thc ca mng n kch thc m chng
ta chn khi thit k chng trnh trong khi cp pht b nh ng cho php cp pht b
nh trong qu trnh chy vi kch thc bt k.
B nh ng ni chung c qun l bi h iu hnh v trong cc mi trng a nhim
c th chy mt lc vi chng trnh c mt kh nng c th xy ra l ht b nh cp
pht. Nu iu ny xy ra v h iu hnh khng th cp pht b nh nh chng ta yu
cu vi ton t new, mt con tr null (zero) s c tr v. V vy cc bn nn kim tra
xem con tr tr v bi ton t new c bng null hay khng:
int * bobby;
bobby = new int [5];
if (bobby == NULL) {
// error assigning memory. Take measures.
};
Ton t delete.
V b nh ng ch cn thit trong mt khong thi gian nht nh, khi n khng cn
dng n na th n s c gii phng c th cp pht cho cc nhu cu khc trong
tng lai. thc hin vic ny ta dng ton t delete, dng thc ca n nh sau:
delete pointer;
hoc
delete [] pointer;
Trang 66
Updatesofts.com
Ebooks Team
NULL
#define NULL 0
Dng 0 hay NULL khi kim tra con tr l nh nhau nhng vic dng NULL vi con tr
c s dng rt rng ri v iu ny c khuyn khch gip cho chng trnh d
c hn.
B nh ng trong ANSI-C
Ton t new v delete l c quyn C++ v chng khng c trong ngn ng C. Trong
ngn ng C, c th s dng b nh ng chng ta phi s dng th vin stdlib.h.
Chng ta s xem xt cch ny v n cng hp l trong C++ v n vn cn c s dng
trong mt s chng trnh.
Hm malloc
y l mt hm tng qut cp pht b nh ng cho con tr. Cu trc ca n nh sau:
void * malloc (size_t nbytes);
Trang 67
Updatesofts.com
Ebooks Team
Hm calloc.
calloc hot ng rt ging vi malloc, s khc nhau ch yu l khai bo mu ca n:
void * calloc (size_t nelements, size_t size);
n s dng hai tham s thay v mt. Hai tham s ny c nhn vi nhau c c kch
thc tng cng ca khi nh cn cp pht. Thng thng tham s u tin (nelements)
l s phn t v tham s thc hai (size) l kch thc ca mi phn t. V d, chng ta
c th nh ngha bobby vi calloc nh sau:
int * bobby;
bobby = (int *) calloc (5, sizeof(int));
calloc
Trang 68
Updatesofts.com
Ebooks Team
Cc cu trc
Cc cu trc d liu.
Mt cu trc d liu l mt tp hp ca nhng kiu d liu khc nhau c gp li vi
mt ci tn duy nht. Dng thc ca n nh sau:
struct model_name {
type1 element1;
type2 element2;
type3 element3;
.
.
} object_name;
trong model_name l tn
Trang 69
Updatesofts.com
Ebooks Team
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);
Trang 70
Updatesofts.com
Ebooks Team
return 0;
}
void printmovie (movies_t movie)
{
cout << movie.title;
cout << " (" << movie.year <<
")\n";
}
// 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";
title: Alien
year: 1979
title: Blade Runner
year: 1982
title: Matrix
year: 1999
title: Rear Window
year: 1954
title: Taxi Driver
year: 1975
Trang 71
Updatesofts.com
Ebooks Team
Con tr tr n cu trc
Nh bt k cc kiu d liu no khc, cc cu trc c th c tr n bi con tr. Quy
tc hon ton ging nh i vi bt k kiu d liu c bn no:
struct movies_t {
char title [50];
int year;
};
movies_t amovie;
movies_t * pmovie;
y amovie l mt i tng c kiu movies_t v pmovie l mt con tr tr ti i
tng movies_t. OK, by gi chng ta s n vi mt v d khc, n s gii thiu mt
ton t mi:
Enter title: Matrix
Enter year: 1999
// pointers to structures
#include <iostream.h>
#include <stdlib.h>
struct movies_t {
char title [50];
int year;
};
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
on m trn gii thiu mt iu quan trng: ton t ->. y l mt ton t tham chiu
ch dng tr ti cc cu trc v cc lp (class). N cho php chng ta khng phi dng
ngoc mi khi tham chiu n mt phn t ca cu trc. Trong v d ny chng ta s
dng:
movies->title
n c th c dch thnh:
(*movies).title
n tng ng vi
*(movies.title)
M t
Tng ng vi
movies.title
movies->title
(*movies).title
*movies.title
*(movies.title)
movies
Trang 73
Updatesofts.com
Ebooks Team
int year;
}
struct friends_t {
char name [50];
char email [50];
movies_t favourite_movie;
} charlie, maria;
friends_t * pfriends = &charlie;
V vy, sau phn khai bo trn chng ta c th s dng cc biu thc sau:
charlie.name
maria.favourite_movie.title
charlie.favourite_movie.year
pfriends->favourite_movie.year
Trang 74
Updatesofts.com
Ebooks Team
existing_type
new_type_name ;
char C;
unsigned int WORD;
char * string_t;
char field [50];
Union
Union cho php mt phn b nh c th c truy xut di dng nhiu kiu d liu
khc nhau mc d tt c chng u nm cng mt v tr trong b nh. Phn khai bo v
s dng n tng t vi cu trc nhng chc nng th khc hon ton:
union model_name {
type1 element1;
type2 element2;
type3 element3;
.
.
} object_name;
Trang 75
Updatesofts.com
Ebooks Team
nh ngha ba phn t
mytypes.c
mytypes.i
mytypes.f
nh ngha ba phn t cho php chng ta truy xut n cng mt nhm 4 byte: mix.l,
mix.s v mix.c m chng ta c th s dng tu theo vic chng ta mun truy xut n
nhm 4 byte ny nh th no. Ti dng nhiu kiu d liu khc nhau, mng v cu trc
trong union bn c th thy cc cch khc nhau m chng ta c th truy xut d liu.
Cc unions v danh
Trong C++ chng ta c th s dng cc unions v danh. Nu chng ta t mt union
trong mt cu trc m khng tn (phn i sau cp ngoc nhn { }) union s tr thnh
v danh v chng ta c th truy xut trc tip n cc phn t ca n m khng cn n
tn ca union (c cn cng khng c). V d, hy xem xt s khc bit gia hai phn
khai bo sau y:
union
union v danh
Trang 76
Updatesofts.com
Ebooks Team
struct {
char title[50];
char author[50];
union {
float dollars;
int yens;
} price;
} book;
struct {
char title[50];
char author[50];
union {
float dollars;
int yens;
};
} book;
Trang 77
Updatesofts.com
Ebooks Team
Trang 78