Professional Documents
Culture Documents
Bài 1: Cấu Trúc Của Một Chương Trình C++: Hello World!
Bài 1: Cấu Trúc Của Một Chương Trình C++: Hello World!
Hello World!
#include <iostream.h>
int main ()
{
cout << "Hello World!";
return 0;
}
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++
with more comments */
#include <iostream.h>
int main ()
{
cout << "Hello World! ";
// says Hello World!
cout << "I'm a C++ program";
// says I'm a C++ program
return 0;
}
Nu bn vit cc ch thch trong chng trnh m khng s dng cc du //, /* hay */,
trnh dch s coi chng nh l cc lnh C++ v s hin th cc li.
Hello World!
#include <iostream.h>
int main ()
{
cout << "Hello World!";
return 0;
}
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++
with more comments */
#include <iostream.h>
int main ()
{
cout << "Hello World! ";
// says Hello World!
cout << "I'm a C++ program";
// says I'm a C++ program
return 0;
}
Nu bn vit cc ch thch trong chng trnh m khng s dng cc du //, /* hay */,
trnh dch s coi chng nh l cc lnh C++ v s hin th cc li.
Bi 3 : 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;
a = b;
tng ng vi
b = 5;
a = 2 + b;
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 (+=, -=, *=, /=, %=, >>=, <<=, &=, ^=, |=)
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:
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
V d:
s tr gi tr false
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
(7 == 5)
(6 >= 6)
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.
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:
( (5 == 5) && (3 > 6) ) tr v false ( true && false ).
( (5 == 5) || (3 > 6)) tr v true ( true || false ).
Ton t iu kin ( ? ).
Ton t iu kin tnh ton mt biu thc v tr v mt gi tr khc tu thuc vo
biu thc l ng hay sai. Cu trc ca n nh sau:
condition ? result1 : result2
tr v 3 v 7 khng bng 5.
tr v 4 v 7 bng 5+2.
tr v a, v 5 ln hn 3.
tr v gi tr ln hn, a hoc b.
OR
Logical OR
<<
>>
sizeof()
Ton t ny c mt tham s, c th l mt kiu d liu hay l mt bin v tr
v kch c bng byte ca kiu hay i tng .
a = sizeof (char);
Cc ton t khc
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
vi kt qu l 6, hoc
vi kt qu l 0
Th t 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
Tri
+ -
Ton t s hc
Tri
<< >>
Dch bit
Tri
Ton t quan h
Tri
== !=
Ton t quan h
Tri
& ^ |
10
&& ||
Ton t logic
Tri
11
?:
Ton t iu kin
Phi
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 }.
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:
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
cin >> n;
while (n>0) {
cout << n << ", ";
--n;
}
cout << "FIRE!";
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
kim tra kt thc vng lp. Nu bn khng nhp s 0 trong v d trn th vng
lp s khng bao gi chm dt.
Vng lp for .
Dng thc:
for (initialization; condition; increase) statement;
10, 9, 8, 7, 6, 5, 4, 3, 2, 1,
FIRE!
// ci g y cng c...
}
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 << ", ";
}
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.
Mc ch ca exit l kt thc chng trnh v tr v mt m xc nh. Dng thc
ca n nh sau
void exit (int exit code);
.
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.
Hai on m sau l tng ng:
v d switch
switch (x) {
case 1:
cout << "x is 1";
break;
case 2:
cout << "x is 2";
break;
default:
cout << "value of x
unknown";
}
if-else tng ng
if (x == 1) {
cout << "x is 1";
}
else if (x == 2) {
cout << "x is 2";
}
else {
cout << "value of x unknown";
}
Bi 5 : Hm (I)
Hm l mt khi lnh c thc hin khi n c gi t mt im khc ca chng
trnh. Dng thc ca n nh sau:
type name ( argument1, argument2, ...) statement
trong :
type l kiu d liu c tr v ca hm
name l tn gi ca hm.
arguments l cc tham s (c nhiu bao nhiu cng c tu theo nhu cu). Mt tham s
bao gm tn kiu d liu sau l tn ca tham s ging nh khi khai bo bin (v d
int x) v ng vai tr bn trong hm nh bt k bin no khc. Chng dng truyn
tham s cho hm khi n c gi. Cc tham s khc nhau c ngn cch bi cc du
phy.
statement l thn ca hm. N c th l mt lnh n hay mt khi lnh.
Di y l v d u tin v hm:
// function example
#include <iostream.h>
int addition (int a, int b)
{
int r;
r=a+b;
return (r);
}
int main ()
{
int z;
z = addition (5,3);
cout << "The result is " << z;
return 0;
}
The result is 8
hm main.
Tuy nhin bn c th khai bo cc bin ton cc c th s dng chng bt k u, bn
trong hay bn ngoi bt k hm no. lm vic ny bn cn khai bo chng bn ngoi
mi hm hay cc khi lnh, c ngha l ngay trong thn chng trnh.
y l mt v d khc v hm:
// function example
#include <iostream.h>
int subtraction (int a, int b)
{
int r;
r=a-b;
return (r);
}
The
The
The
The
first result is 5
second result is 5
third result is 2
fourth result is 6
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 = 5;
cout << "The first result is " << z;
Tng t nh vy
cout << "The second result is " << subtraction (7,2);
cng cho kt qu ging nh hai dng lnh trn nhng trong trng hp ny chng ta gi
hm subtraction trc tip nh l mt tham s ca cout. Chng ta cng c th vit:
cout << "The second result is " << 5;
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!
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 ();
Bi 6 : Hm (II)
Kiu khai bo tham s theo dng tham s bin s dng du v (&) ch c trong C++. Trong
ngn ng C chng ta phi s dng con tr lm vic tng t nh th.
Truyn tham s di dng tham s bin cho php mt hm tr v nhiu hn mt gi tr.
V d, y l mt hm tr v s lin trc v lin sau ca tham s u tin.
// more than one returning value
#include <iostream.h>
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:
// default values in functions
#include <iostream.h>
int divide (int a, int b=2)
{
int r;
r=a/b;
return (r);
}
int main ()
{
cout << divide (12);
cout << endl;
cout << divide (20,4);
return 0;
}
6
5
Nhng chng ta thy trong thn chng trnh, c hai li gi hm divide. Trong lnh u
tin:
divide (12)
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
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
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)";
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
cin >> i;
odd (i);
} while (i!=0);
return 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.
style="BORDER-RIGHT: medium none; PADDING-RIGHT: 0in; BORDER-TOP:
medium none; PADDING-LEFT: 0in; PADDING-BOTTOM: 0in; BORDER-LEFT:
medium none; PADDING-TOP: 0in; BORDER-BOTTOM: windowtext 3pt solid">
Rt nhiu lp trnh vin kinh nghim khuyn rng tt c cc hm nn c khai bo mu.
cng l li khuyn ca ti, nht l trong trng hp c nhiu hm hoc chng rt di,
khi vic khai bo tt c cc hm cng mt ch cho php chng ta bit phi gi cc
hm nh th no, v vy tit kim c thi gian.
Bi 7 : 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.
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.
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
result += billy[n];
}
cout << result;
return 0;
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]
vi
// 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
ch cn gi hm nh sau:
procedure (myarray);
Di y l mt v d c th
// arrays as parameters
#include <iostream.h>
5 10 15
2 4 6 8 10
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.
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:
char mystring[] = { 'H', 'e', 'l', 'l', 'o', '\0' };
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]
mystring[1]
mystring[2]
mystring[3]
mystring[4]
mystring[5]
=
=
=
=
=
=
'H';
'e';
'l';
'l';
'o';
'\0';
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
J. Soulie
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');
int main ()
Milan
{
I like Inter Milan too.
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;
}
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
Chng ta bit cc bin chnh l cc nh m chng ta c th truy xut di cc tn.
Cc bin ny c lu tr ti nhng ch c th trong b nh. i vi chng trnh ca
chng ta, b nh my tnh ch l mt dy gm cc nh 1 byte, mi c mt a ch xc
nh.
Mt s m hnh tt i vi b nh my tnh chnh l mt ph trong mt thnh ph. Trn
mt ph tt c cc ngi nh u c nh s tun t vi mt ci tn duy nht nn nu
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:
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 (&)
N c dng nh l mt tin t ca bin v c th c dch l "a ch ca", v vy
&variable1 c th c c l "a ch ca variable1".
Ton t tham chiu (*)
N ch ra rng ci cn c tnh ton l ni dung c tr bi biu thc c coi nh l
mt a ch. N c th c dch l "gi tr c tr bi"..
*mypointer c c l "gi tr c tr bi mypointer".
Vo lc ny, vi nhng v d vit trn
andy = 25;
ted = &andy;
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
value1==10 / value2==20
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:
int *p1, *p2;
dng ny khai bo hai con tr bng cch t du sao (*) trc mi con tr. Nguyn nhn
l kiu d liu khai bo cho c dng l int v v theo th t t phi sang tri, du sao
c tnh trc tn kiu. Chng ta ni n iu ny trong bi 1.3: Cc ton t.
Con tr v mng.
Trong thc t, tn ca mt mng tng ng vi a ch phn t u tin ca n, ging
nh mt con tr tng ng vi a ch ca phn t u tin m n tr ti, v vy thc
t chng hon ton nh nhau. V d, cho hai khai bo sau:
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 [offset of 5] = 0
// pointed by (a+5) = 0
Khi to con tr
l tng ng vi:
int number;
int *tommy;
tommy = &number;
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:
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++;
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
Con tr hm
C++ cho php thao tc vi cc con tr hm. Tin ch tuyt vi ny cho php truyn mt
hm nh l mt tham s n mt hm khc. c th khai bo mt con tr tr ti mt
hm chng ta phi khai bo n nh l khai bo mu ca mt hm nhng phi bao trong
mt cp ngoc n () tn ca hm v chn du sao (*) ng trc.
// pointer to functions
#include <iostream.h>
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.
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
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.
Ton t delete.
V b nh ng ch cn thit trong mt khong thi gian nht nh, khi n khng cn
hoc
delete [] pointer;
#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);
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 realloc.
N thay i kch thc ca khi nh c cp pht cho mt con tr.
void * realloc (void * pointer, size_t size);
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;
products apple;
products orange, melon;
#include <stdlib.h>
struct movies_t {
char title [50];
int year;
} mine, yours;
";
printmovie (mine);
cout << "And yours:\n ";
printmovie (yours);
return 0;
}
void printmovie (movies_t movie)
{
cout << movie.title;
cout << " (" << movie.year <<
")\n";
}
#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";
for (n=0; n<N_MOVIES; n++)
printmovie (films[n]);
return 0;
}
Enter
Enter
Enter
Enter
Enter
Enter
Enter
Enter
Enter
year: 1979
title: Blade Runner
year: 1982
title: Matrix
year: 1999
title: Rear Window
year: 1954
title: Taxi Driver
year: 1975
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;
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";
cout << pmovie->title;
cout << " (" << pmovie->year <<
")\n";
}
return 0;
on m trn gii thiu mt iu quan trng: ton t ->. y l mt ton t tham chiu
ch dng tr ti cc cu trc v cc lp (class). N cho php chng ta khng phi dng
ngoc mi khi tham chiu n mt phn t ca cu trc. Trong v d ny chng ta s
dng:
movies->title
n c th c dch thnh:
(*movies).title
*movies.title
n tng ng vi
*(movies.title)
M t
movies.title
movies->title
*movies.title
movies
Gi tr c tr bi phn t title ca cu
trc movies
Tng ng vi
(*movies).title
*(movies.title)
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
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;
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
union v danh
struct {
char title[50];
char author[50];
union {
float dollars;
int yens;
};
} book;
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