Professional Documents
Culture Documents
#include <iostream.h>
int main ()
{
cout << "Hello World!";
return 0;
}
#include <iostream.h>
Cc cu bt u bng du (#) c dng cho preprocessor (ai dch h ti t ny vi).
Chng khng phi l nhng dng m thc hin nhng c dng bo hiu cho trnh
dch. y cu lnh #include <iostream.h> bo cho trnh dch bit cn phi
"include" th vin iostream. y l mt th vin vo ra c bn trong C++ v n phi
c "include" v n s c dng trong chng trnh. y l cch c in s dng
th vin iostream
int main ()
Dng ny tng ng vi phn bt u khai bo hm main. Hm main l im m tt c
cc chng trnh C++ bt u thc hin. N khng ph thuc vo v tr ca hm ny (
u, cui hay gia ca m ngun) m ni dung ca n lun c thc hin u tin khi
chng trnh bt u. Thm vo , do nguyn nhn ni trn, mi chng trnh C++ u
phi tn ti mt hm main.
return 0;
Lnh return kt thc hm main v tr v m i sau n, trong trng hp ny l 0. y l
mt kt thc bnh thng ca mt chng trnh khng c mt li no trong qu trnh thc
hin. Nh bn s thy trong cc v d tip theo, y l mt cch ph bin nht kt thc
mt chng trnh C++.
int main ()
{
cout << " Hello World ";
return 0;
}
ta c th vit
Trong C++, cc dng lnh c phn cch bng du chm phy ( ;). Vic chia chng
trnh thnh cc dng ch nhm cho n d c hn m thi.
Cc ch thch.
Cc ch thch c cc lp trnh vin s dng ghi ch hay m t trong cc phn ca
chng trnh. Trong C++ c hai cch ch thch
Ch thch theo dng 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 :
int main ()
{
cout << "Hello World! ";
// says Hello World!
cout << "I'm a C++ program";
// says I'm a C++ program
return 0;
}
Nu bn vit cc ch thch trong chng trnh m khng s dng cc du //, /* hay */,
trnh dch s coi chng nh l cc lnh C++ v s hin th cc li.
#include <iostream.h>
int main ()
{
cout << "Hello World!";
return 0;
}
#include <iostream.h>
Cc cu bt u bng du (#) c dng cho preprocessor (ai dch h ti t ny vi).
Chng khng phi l nhng dng m thc hin nhng c dng bo hiu cho trnh
dch. y cu lnh #include <iostream.h> bo cho trnh dch bit cn phi
"include" th vin iostream. y l mt th vin vo ra c bn trong C++ v n phi
c "include" v n s c dng trong chng trnh. y l cch c in s dng
th vin iostream
int main ()
Dng ny tng ng vi phn bt u khai bo hm main. Hm main l im m tt c
cc chng trnh C++ bt u thc hin. N khng ph thuc vo v tr ca hm ny (
u, cui hay gia ca m ngun) m ni dung ca n lun c thc hin u tin khi
chng trnh bt u. Thm vo , do nguyn nhn ni trn, mi chng trnh C++ u
phi tn ti mt hm main.
return 0;
Lnh return kt thc hm main v tr v m i sau n, trong trng hp ny l 0. y l
mt kt thc bnh thng ca mt chng trnh khng c mt li no trong qu trnh thc
hin. Nh bn s thy trong cc v d tip theo, y l mt cch ph bin nht kt thc
mt chng trnh C++.
int main ()
{
cout << " Hello World ";
return 0;
}
ta c th vit
Trong C++, cc dng lnh c phn cch bng du chm phy ( ;). Vic chia chng
trnh thnh cc dng ch nhm cho n d c hn m thi.
Cc ch thch.
Cc ch thch c cc lp trnh vin s dng ghi ch hay m t trong cc phn ca
chng trnh. Trong C++ c hai cch ch thch
Ch thch theo dng 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 :
#include <iostream.h>
int main ()
{
cout << "Hello World! ";
// says Hello World!
cout << "I'm a C++ program";
// says I'm a C++ program
return 0;
}
Nu bn vit cc ch thch trong chng trnh m khng s dng cc du //, /* hay */,
trnh dch s coi chng nh l cc lnh C++ v s hin th cc li.
Bi 3 : Cc Ton T
Ton t gn (=).
a = 5;
Cn phi nhn mnh rng ton t gn lun c thc hin t tri sang phi
v khng bao gi o ngc
a = b;
a = 2 + (b = 5);
tng ng vi
b = 5;
a = 2 + b;
a = b = c = 5;
gn gi tr 5 cho c ba bin a, b v c
Cc ton t s hc ( +, -, *, /, % )
Nm ton t s hc c h tr bi ngn ng l:
+ cng
- tr
* Nhn
/ Chia
% ly phn d (trong php chia)
Th t thc hin cc ton t ny cng ging nh chng c thc hin trong ton
hc. iu duy nht c v hi l i vi bn l php ly phn d, k hiu bng du
phn trm (%). y chnh l php ton ly phn d trong php chia hai s nguyn
vi nhau. V d, nu a = 11 % 3;, bin a s mang gi tr 2 v 11 = 3*3 +2.
Cc ton t gn phc hp (+=, -=, *=, /=, %=, >>=, <<=, &=, ^=, |=)
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 1 V d 2
B=3; B=3;
A=++B; A=B++;
// A is 4, B is 4 // A is 3, B is 4
== Bng
!= Khc
> Ln hn
< Nh hn
> = Ln hn hoc bng
< = Nh hn hoc bng
V d:
(7 == 5) s tr gi tr false
(6 >= 6) s tr gi tr true
tt nhin thay v s dng cc s, chng ta c th s dng bt c biu thc
no. Cho a=2, b=3 v c=6
(a*b >= c) s tr gi tr true.
(b+4 < a*c) s tr gi tr false
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.
i s th nht i s th hai Kt qu Kt qu
a b a && b a || b
V d:
Ton t iu kin ( ? ).
Cc ton t thao tc bit thay i cc bit biu din mt bin, c ngha l thay i
biu din nh phn ca chng
ton t asm M t
& AND Logical AND
| OR Logical OR
^ XOR Logical exclusive OR
~ NOT o ngc bit
<< SHL Dch bit sang tri
>> SHR Dch bit sang phi
int i;
float f = 3.14;
i = (int) f;
i = int ( f );
sizeof()
a = sizeof (char);
Cc ton t khc
Trong C++ cn c mt s cc ton t khc, nh cc ton t lin quan n con tr
hay lp trnh hng i tng. Chng s c ni n c th trong cc phn
tng ng.
Th t u tin ca cc ton t
Khi vit cc biu thc phc tp vi nhiu ton hng cc bn c th t hi ton hng no
c tnh trc, ton hng no c tnh sau. V d nh trong biu thc sau:
a = 5 + 7 % 2
a = 5 + (7 % 2) vi kt qu l 6, hoc
a = (5 + 7) % 2 vi kt qu l 0
Th t Ton t M t Associativity
1 :: scope Tri
2 () [ ] -> . sizeof Tri
++ -- tng/gim
~ o ngc bit
! NOT
3 Phi
& * Ton t con tr
(type) Chuyn i kiu
+ - Dng hoc m
4 * / % Ton t s hc Tri
5 + - Ton t s hc Tri
6 << >> Dch bit Tri
7 < <= > >= Ton t quan h Tri
8 == != Ton t quan h Tri
9 & ^ | Ton t thao tc bit Tri
10 && || Ton t logic Tri
11 ?: Ton t iu kin Phi
12 = += -= *= /= %= Ton t gn Phi
>>= <<= &= ^= |=
13 , Du phy Tri
Bi 4 : 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 }.
if (condition) statement
if (x == 100)
cout << "x is 100";
if (x == 100)
{
cout << "x is ";
cout << x;
}
V d:
if (x == 100)
cout << "x is 100";
else
cout << "x is not 100";
if (x > 0)
cout << "x is positive";
else if (x < 0)
cout << "x is negative";
else
cout << "x 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:
Vng lp do-while
Dng thc:
Vng lp for .
Dng thc:
Lnh continue.
Lnh goto.
Hm exit.
switch (expression) {
case constant1:
block of instructions 1
break;
case constant2:
block of instructions 2
break;
.
.
.
default:
default block of instructions
}
N hot ng theo cch sau: switch tnh biu thc v kim tra xem n c bng
constant1 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.
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";
}
Bi 5 : Hm (I)
trong :
type l kiu d liu c tr v ca hm
name l tn gi ca hm.
arguments l cc tham s (c nhiu bao nhiu cng c tu theo nhu cu). Mt tham s
bao gm tn kiu d liu sau l tn ca tham s ging nh khi khai bo bin (v d
int x) v ng vai tr bn trong hm nh bt k bin no khc. Chng dng truyn
tham s cho hm khi n c gi. Cc tham s khc nhau c ngn cch bi cc du
phy.
statement l thn ca hm. N c th l mt lnh n hay mt khi lnh.
Di y l v d u tin v hm:
int main ()
{
int z;
z = addition (5,3);
cout << "The result is " << z;
return 0;
}
return (r);
y l mt v d khc v hm:
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;
}
z = subtraction (7,2);
cout << "The first result is " << z;
z = 5;
cout << "The first result is " << z;
Tng t nh vy
cout << "The second result is " << subtraction (7,2);
cng cho kt qu ging nh hai dng lnh trn nhng trong trng hp ny chng ta gi
hm subtraction trc tip nh l mt tham s ca cout. Chng ta cng c th vit:
v 5 l kt qu ca subtraction (7,2).
Cn vi lnh
z = 4 + subtraction (x,y);
chng ta c th vit:
z = subtraction (x,y) + 4;
cng hon ton cho kt qu tng ng. Ch rng du chm phy c t cui
biu thc ch khng cn thit phi t ngay sau li gi hm.
int main ()
{
dummyfunction ();
return 0;
}
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.
dummyfunction ();
Bi 6 : Hm (II)
int main ()
{
int x=1, y=3, z=7;
duplicate (x, y, z);
cout << "x=" << x << ", y=" << y
<< ", z=" << z;
return 0;
}
Khi truyn tham s di dng tham s bin chng ta ang truyn bn thn bin v bt
k s thay i no m chng ta thc hin vi tham s bn trong hm s nh hng trc
tip n bin .
Kiu khai bo tham s theo dng tham s bin s dng du v (&) ch c trong C++.
Trong ngn ng C chng ta phi s dng con tr lm vic tng t nh th.
int main ()
{
int x=100, y, z;
prevnext (x, y, z);
cout << "Previous=" << y << ",
Next=" << z;
return 0;
}
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:
int main ()
{
cout << divide (12);
cout << endl;
cout << divide (20,4);
return 0;
}
Nhng chng ta thy trong thn chng trnh, c hai li gi hm divide. Trong lnh u
tin:
divide (12)
chng ta ch dng mt tham s nhng hm divide cho php n hai. Bi vy hm
divide s t cho tham s th hai gi tr bng 2 v l gi tr mc nh ca n (ch
phn khai bo hm c kt thc bi int b=2). V vy kt qu s l 6 (12/2).
divide (20,4)
Qu ti cc hm.
Hai hm c th c cng tn nu khai bo tham s ca chng khc nhau, iu ny c ngha
l bn c th t cng mt tn cho nhiu hm nu chng c s tham s khc nhau hay
kiu d liu ca cc tham s khc nhau (hay thm ch l kiu d liu tr v khc nhau).
V d:
// overloaded function 2
#include <iostream.h> 2.5
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:
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:
int main ()
{
long l;
cout << "Type a number: ";
cin >> l;
cout << "!" << l << " = " <<
factorial (l);
return 0;
}
Nhng c mt cch khc trnh phi vit tt c m chng trnh trc khi chng c th
c dng trong main hay bt k mt hm no khc. chnh l khai bo mu cho hm.
Cch ny bao gm vic khai bo hm mt cch ngn gn nhng cho trnh dch c
th bit cc tham s v kiu d liu tr v ca hm.
Dng ca n nh sau:
V d:
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.
Bi 7 : Mng
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 .
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.
name[index]
billy[2] = 75;
v, v d, gn gi tr ca phn t th 3 ca billy cho bin a, chng ta vit:
a = billy[2];
V vy, xt v mi phng din, biu thc billy[2] ging nh bt k mt bin kiu int.
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.
billy[0] = a;
billy[a] = 75;
b = billy [a+2];
billy[billy[a]] = billy[2] + 5;
// v d v mng 12206
#include <iostream.h>
int main ()
{
for ( n=0 ; n<5 ; n++ )
{
result += billy[n];
}
cout << result;
return 0;
}
jimmy biu din mt mng hai chiu kch thc 3x5 c kiu int. Cch khai bo mng
ny nh sau:
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]
Mng nhiu chiu khng b gii hn bi hai ch s (hai chiu), Chng c th cha bao
nhiu ch s ty thch mc d t kh cn phi dng n mng ln hn 3 chiu. Hy th
xem xt lng b nh m mt mng c nhiu ch s cn n. V d:
#define HEIGHT 3
thnh
#define HEIGHT 4
ch cn gi hm nh sau:
procedure (myarray);
Di y l mt v d c th
// arrays as parameters 5 10 15
#include <iostream.h> 2 4 6 8 10
int main ()
{
int firstarray[] = {5, 10, 15};
int secondarray[] = {2, 4, 6, 8,
10};
printarray (firstarray,3);
printarray (secondarray,5);
return 0;
}
Trong phn khai bo hm chng ta cng c th dng tham s l cc mng nhiu chiu.
Cu trc ca mng 3 chiu nh sau:
base_type[][depth][depth]
Bi 8 : 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.
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:
Ch rng sau ni dung ca xu, mt k t null ('\0') c dng bo hiu kt thc
xu. Nhng mu xm biu din nhng gi tr khng xc nh.
Khi to cc xu k t.
V nhng xu k t l nhng mng bnh thng nn chng cng nh cc mng khc. V
d, nu chng ta mun khi to mt xu k t vi nhng gi tr xc nh chng ta c th
lm iu tng t nh vi cc mng khc:
Trong cc biu thc chng ta s dng trong cc v d trong cc chng trc cc hng
xu k t xut hin vi ln. Chng c biu din trong cp ngoc kp ("), v d:
Khng ging nh du nhy n (') cho php biu din hng k t, cp ngoc kp (") l
hng biu din mt chui k t lin tip, v cui chui mt k t null ('\0') lun c
t ng thm vo.
Trc khi tip tc, ti cn phi nhc nh bn rng vic gn nhiu hng nh vic s dng
du ngoc kp (") ch hp l khi khi to mng, tc l lc khai bo mng. Cc biu thc
trong chng trnh nh:
mystring = "Hello";
mystring[] = "Hello";
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';
mystring[2] = 'l';
mystring[3] = 'l';
mystring[4] = 'o';
mystring[5] = '\0';
V d:
int main ()
{
char szMyName [20];
strcpy (szMyName,"J. Soulie");
cout << szMyName;
return 0;
}
int main ()
{
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.
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;
return 0;
}
Bi 9 : 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.
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.
andy = 25;
fred = andy;
ted = &andy;
kt qu s ging nh trong s di y:
beth = *ted;
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.
andy = 25;
ted = &andy;
andy == 25
&andy == 1776
ted == 1776
*ted == 25
type * pointer_name;
trong type l kiu d liu c tr ti, khng phi l kiu ca bn thn con tr. V d:
int * number;
char * character;
float * greatnumber;
Ti phi nhn mnh li rng du sao (*) m chng ta t khi khai bo mt con tr ch c
ngha rng: l mt con tr v hon ton khng lin quan n ton t tham chiu m
chng ta xem xt trc . n gin ch l hai tc v khc nhau c biu din bi
cng mt du.
int main ()
{
int value1 = 5, value2 = 15;
int * mypointer;
mypointer = &value1;
*mypointer = 10;
mypointer = &value2;
*mypointer = 20;
cout << "value1==" << value1 <<
"/ value2==" << value2;
return 0;
}
y l mt v d phc tp hn mt cht:
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
Mt dng c th gy s ch ca bn l:
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:
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;
}
a[5] = 0; // a [offset of 5] = 0
*(a+5) = 0; // pointed by (a+5) = 0
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;
int number;
int *tommy;
*tommy = &number;
cn phi nhc li rng terry mang gi tr 1702 ch khng phi l 'h' hay "hello".
terry[4] = '!';
*(terry+4) = '!';
hy nh rng vit terry[4] l hon ton ging vi vit *(terry+4) mc d biu thc
thng dng nht l ci u tin. Vi mt trong hai lnh trn xu do terry tr n s c
gi tr nh sau:
Cc php tnh s hc vi pointer
Vic thc hin cc php tnh s hc vi con tr hi khc so vi cc kiu d liu s
nguyn khc. Trc ht, ch php cng v tr l c php dng. Nhng c cng v tr
u cho kt qu ph thuc vo kch thc ca kiu d liu m bin con tr tr ti.
Chng ta thy c nhiu kiu d liu khc nhau tn ti v chng c th chim ch nhiu
hn hoc t hn cc kiu d liu khc. V d, trong cc kiu s nguyn, char chim 1
byte, short chim 2 byte v long chim 4 byte.
char *mychar;
short *myshort;
long *mylong;
Nu chng ta vit
mychar++;
myshort++;
mylong++;
iu ny ng vi c hai php ton cng v tr i vi con tr. Chng ta cng hon ton
thu c kt qu nh trn nu vit:
mychar = mychar + 1;
myshort = myshort + 1;
mylong = mylong + 1;
Cn phi cnh bo bn rng c hai ton t tng (++) v gim (--) u c quyn u tin
ln hn ton t tham chiu (*), v vy biu thc sau y c th dn ti kt qu sai:
*p++;
*p++ = *q++;
Lnh th hai, c hai ton t tng (++) u c thc hin sau khi gi tr ca *q c gn
cho *p v sau c q v p u tng ln 1. Lnh ny tng ng vi:
*p = *q;
p++;
q++;
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;
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.
// pointer to functions 8
#include <iostream.h>
int (*minus)(int,int) =
subtraction;
int main ()
{
int m,n;
m = operation (7, 5, &addition);
n = operation (20, m, minus);
cout <<n;
return 0;
}
Bi 10 : 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.
hoc
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.
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;
NULL l mt hng s c nh ngha trong th vin C++ dng biu th con tr null.
Trong trng hp hng s ny cha nh ngha bn c th t nh ngha n:
#define NULL 0
Dng 0 hay NULL khi kim tra con tr l nh nhau nhng vic dng NULL vi con tr
c s dng rt rng ri v iu ny c khuyn khch gip cho chng trnh d
c hn.
B nh ng trong ANSI-C
Ton t new v delete l c quyn C++ v chng khng c trong ngn ng C. Trong
ngn ng C, c th s dng b nh ng chng ta phi s dng th vin stdlib.h.
Chng ta s xem xt cch ny v n cng hp l trong C++ v n vn cn c s dng
trong mt s chng trnh.
Hm malloc
y l mt hm tng qut cp pht b nh ng cho con tr. Cu trc ca n nh sau:
char * ronny;
ronny = (char *) malloc (10);
int * bobby;
bobby = (int *) malloc (5 * sizeof(int));
Hm calloc.
calloc hot ng rt ging vi malloc, s khc nhau ch yu l khai bo mu ca n:
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));
Hm free.
Hm ny gii phng mt khi nh ng c cp pht bi malloc, calloc hoc
realloc.
Bi 11 : 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;
struct products {
char name [30];
float price;
} ;
products apple;
products orange, melon;
struct products {
char name [30];
float price;
} apple, orange, melon;
apple.name
apple.price
orange.name
orange.price
melon.name
melon.price
int main ()
{
char buffer [50];
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:
int main ()
{
char buffer[50];
movies_t amovie;
movies_t * pmovie;
pmovie = & amovie;
return 0;
}
on m trn gii thiu mt iu quan trng: ton t ->. y l mt ton t tham chiu
ch dng tr ti cc cu trc v cc lp (class). N cho php chng ta khng phi dng
ngoc mi khi tham chiu n mt phn t ca cu trc. Trong v d ny chng ta s
dng:
movies->title
n c th c dch thnh:
(*movies).title
n tng ng vi
*(movies.title)
*movies.title
Gi tr c tr bi phn t title ca cu *(movies.title)
trc movies
struct movies_t {
char title [50];
int year;
}
struct friends_t {
char name [50];
char email [50];
movies_t favourite_movie;
} charlie, maria;
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
typedef char C;
typedef unsigned int WORD;
typedef char * string_t;
typedef 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;
union mytypes_t {
char c;
int i;
float f;
} mytypes;
nh ngha ba phn t
mytypes.c
mytypes.i
mytypes.f
union mix_t{
long l;
struct {
short hi;
short lo;
} s;
char c[4];
} mix;
nh ngha ba phn t cho php chng ta truy xut n cng mt nhm 4 byte: mix.l,
mix.s v mix.c m chng ta c th s dng tu theo vic chng ta mun truy xut n
nhm 4 byte ny nh th no. Ti dng nhiu kiu d liu khc nhau, mng v cu trc
trong union bn c th thy cc cch khc nhau m chng ta c th truy xut d liu.
Cc unions v danh
Trong C++ chng ta c th s dng cc unions v danh. Nu chng ta t mt union
trong mt cu trc m khng tn (phn i sau cp ngoc nhn { }) union s tr thnh
v danh v chng ta c th truy xut trc tip n cc phn t ca n m khng cn n
tn ca union (c cn cng khng c). V d, hy xem xt s khc bit gia hai phn
khai bo sau y:
book.price.dollars
book.price.yens
book.dollars
book.yens
enum model_name {
value1,
value2,
value3,
.
.
} object_name;
colors_t mycolor;
mycolor = blue;
if (mycolor == green) mycolor = red;
trong trng hp ny, bin y2k c kiu d liu lit k months_t c th cha mt trong 12
gi tr t january n december v tng ng vi cc gi tr nguyn t 1 n 12,
khng phi 0 n 11 v chng ta t january bng 1
Ngun internet