Professional Documents
Culture Documents
Hoàn chỉnh C++
Hoàn chỉnh C++
Li ni u
Lp trnh cu trc l phng php t chc, phn chia chng trnh thnh cc hm, th tc, chng
c dng x l d liu nhng li tch ri cc cu trc d liu. Thng qua cc ngn ng Foxpro,
Pascal, C a s nhng ngi lm Tin hc kh quen bit vi phng php lp trnh ny.
Lp trnh hng i tng da trn vic t chc chng trnh thnh cc lp. Khc vi hm v
th tc, lp l mt n v bao gm c d liu v cc phng thc x l. V vy lp c th m t cc
thc th mt cch chn thc, y c phn d liu v yu cu qun l. T tng lp trnh hng
i tng c p dng cho hu ht cc ngn ng mi chy trn mi trng Windows nh
Microsoft Access, Visual Basic, Visual C. V vy vic nghin cu phng php lp trnh mi ny l
rt cn thit i vi tt c nhng ngi quan tm, yu thch Tin hc.
C ra i nm 1973 vi mc ch ban u l vit h iu hnh Unix trn my tnh mini PDP.
Sau C c s dng rng ri trn nhiu loi my tnh khc nhau v tr thnh mt ngn
ng lp trnh cu trc rt c a chung.
a C vo th gii hng hng i tng, nm 1980 nh khoa hc ngi M B. Stroustrup
cho ra i mt ngn ng C mi c tn ban u l C c lp, sau n nm 1983 th gi l
C++. Ngn ng C++ l mt s pht trin mnh m ca C. Trong C++ chng nhng a vo tt c
cc khi nim, cng c ca lp trnh hng i tng m cn a vo nhiu kh nng mi m cho
hm. Nh vy C++ l mt ngn ng lai cho php t chc chng trnh theo cc lp v cc hm. C
th ni C++ thc y ngn ng C vn rt thuyt phc i vo th gii lp trnh hng i
tng v C++ tr thnh ngn ng hng i tng ni bt trong nhng nm 90.
Cun sch ny s trnh by mt cch h thng cc khi nim ca lp trnh hng i tng c
ci t trong C++ nh lp, i tng, s tha k, tnh tng ng bi v cc kh nng mi trong xy
dng, s dng hm nh: i tham chiu, i mc nh, hm trng tn, hm ton t. C mt s vn
cn t c bit n nh cch xy dng hm vi s i bt nh trong C cng s c gii thiu.
Cc chng t 1 n 10 vi cch gii thch t m v vi gn 100 chng trnh minh ho s cung cp
cho bn c cc khi nim, phng php v kinh nghim lp trnh hng i tng trn C++. Mc
lc cui sch s h thng ngn gn phng php phn tch, thit k v lp trnh hng i tng
trn bnh din chung.
Cun sch gm 10 chng v 6 ph lc
Chng 1 hng dn cch lm vic vi phn mm TC++ 3.0 th nghim cc chng trnh,
trnh by s lc v cc phng php lp trnh v gii thiu mt s m rng n gin ca C++ .
Chng 2 trnh by cc kh nng mi trong vic xy dng v s dng hm trong C++ nh bin
tham chiu, i c kiu tham chiu, i c gi tr mc nh, hm trc tuyn, hm trng tn, hm
ton t.
Chng 3 ni v mt khi nim trung tm ca lp trnh hng i tng l lp gm: nh ngha
lp, khai bo cc bin, mng i tng (kiu lp), phng thc, dng con tr this trong phng
thc, phm vi truy xut ca cc thnh phn, cc phng thc ton t.
Chng 4 trnh by cc vn to dng, sao chp, hu b cc i tng v cc vn khc c
lin quan nh: Hm to, hm to sao chp, hm hu, ton t gn, cp pht b nh cho i tng,
hm bn, lp bn.
Chng 5 trnh by mt khi nim quan trng to nn kh nng mnh ca lp trnh hng i
tng trong vic pht trin, m rng phn mm, l kh nng tha k ca cc lp.
Chng 6 trnh by mt khi nim quan trng khc cho php x l cc vn khc nhau, cc
thc th khc nhau, cc thut ton khc nhau theo cng mt lc thng nht, l tnh tng
ng bi v phng thc o. Cc cng c ny cho php d dng t chc chng trnh qun l nhiu
dng i tng khc nhau.
GS: Phm Vn t
tenshi3003@gmail.com
GS: Phm Vn t
tenshi3003@gmail.com
tenshi3003@gmail.com
GS: Phm Vn t
tenshi3003@gmail.com
tenshi3003@gmail.com
tenshi3003@gmail.com
tenshi3003@gmail.com
#include <stdio.h>
#include <conio.h>
#include <alloc.h>
void main()
{
int n;
printf("\n So phan tu cua day N= ");
scanf("%d",&n);
float *x= (float*)malloc((n+1)*sizeof(float));
for (int i=1;i<=n;++i)
{
printf("\nX[%d]= ",i);
GS: Phm Vn t
tenshi3003@gmail.com
tenshi3003@gmail.com
10
tenshi3003@gmail.com
11
tenshi3003@gmail.com
12
tenshi3003@gmail.com
13
tenshi3003@gmail.com
14
tenshi3003@gmail.com
15
tenshi3003@gmail.com
16
tenshi3003@gmail.com
Bi 7. Cp pht b nh
7.1. Trong C++ c th s dng cc hm cp pht b nh ng ca C nh: hm malloc cp pht
b nh, hm free gii phng b nh c cp pht.
7.2. Ngoi ra trong C++ cng a thm ton t new cp pht b nh v ton t delete gii
phng b nh c cp pht bi new
7.3. Cch dng ton t new cp pht b nh nh sau:
+ Trc ht cn khai bo mt con tr cha a ch vng nh s c cp pht:
Kiu *p;
y Kiu c th l:
- cc kiu d liu chun ca C++ nh int , long, float , double, char , ...
- cc kiu do lp trnh vin nh ngha nh: mng, hp, cu trc, lp, ...
+ Sau dng ton t new theo mu:
p = new Kiu ; // Cp pht b nh cho mt bin (mt phn t)
p = new Kiu[n] ; //Cp pht b nh cho n phn t
V d cp pht b nh cho mt bin thc ta dng cu lnh sau:
float *px = new float ;
cp pht b nh cho 100 phn t nguyn ta dng cc cu lnh:
int *pn = new int[100] ;
for (int i=0 ; i < 100 ; ++i )
GS: Phm Vn t
17
tenshi3003@gmail.com
18
tenshi3003@gmail.com
19
tenshi3003@gmail.com
20
tenshi3003@gmail.com
GS: Phm Vn t
21
tenshi3003@gmail.com
GS: Phm Vn t
22
tenshi3003@gmail.com
Hm trong C++
Chng ny trnh by nhng kh nng mi ca C++ trong vic xy dng v s dng hm. l:
+ Kiu tham chiu v vic truyn d liu cho hm bng tham chiu.
+ i tham chiu hng (const)
+ i c gi tr mc nh
+ Hm trc tuyn
+ Vic nh ngha chng cc hm
+ Vic nh ngha chng cc ton t
1. Bin tham chiu (Reference variable)
1.1. Hai loi bin dng trong C
Trc khi ni n bin tham chiu, chng ta nhc li 2 loi bin gp trong C l:
Bin gi tr dng cha d liu (nguyn, thc, k t, ... )
Bin con tr dng cha a ch
Cc bin ny u c cung cp b nh v c a ch. V d cu lnh khai bo:
double x , *px;
s to ra bin gi tr kiu double x v bin con tr kiu double px. Bin x c vng nh 8 byte, bin
px c vng nh 4 byte (nu dng m hnh Large). Bin x dng cha gi tr kiu double, v d
lnh gn:
x = 3.14;
s cha gi tr 3.14 vo bin x. Bin px dng cha a ch ca mt bin thc, v d cu lnh:
px = &x ;
s lu tr a ch ca bin x vo con tr px.
1.2. Bin tham chiu
Trong C++ cho php s dng loi bin th ba l bin tham chiu. So vi 2 loi bin quen bit ni
trn, th bin ny c nhng c im sau:
+ Bin tham chiu khng c cp pht b nh, khng c a ch ring.
+ N dng lm b danh cho mt bin (kiu gi tr) no v n s dng vng nh ca bin ny.
V d cu lnh:
float u, v, &r = u ;
to ra cc bin thc u, v v bin tham chiu thc r. Bin r khng c cp pht b nh, n l mt
tn khc (b danh) ca u v n dng chung vng nh ca bin u.
Thut ng: Khi r l b danh (alias) ca u th ta ni r tham chiu n bin u. Nh vy 2 thut
ng trn c hiu nh nhau.
ngha: Khi r l b danh ca u th r dng chung vng nh ca u, d :
+ Trong mi cu lnh, vit u hay vit r u c ngha nh nhau, v u truy nhp n cng mt
vng nh.
+ C th dng bin tham chiu truy nhp n mt bin kiu gi tr.
V d:
GS: Phm Vn t
23
tenshi3003@gmail.com
24
tenshi3003@gmail.com
25
tenshi3003@gmail.com
26
tenshi3003@gmail.com
27
tenshi3003@gmail.com
28
tenshi3003@gmail.com
29
tenshi3003@gmail.com
30
tenshi3003@gmail.com
31
tenshi3003@gmail.com
32
tenshi3003@gmail.com
4. i c gi tr mc nh
4.1. Th no l i mc nh
Mt trong cc kh nng mnh ca C++ l n cho php xy dng hm vi cc i c gi tr mc
nh. Thng thng s tham s trong li gi hm phi bng s i ca hm. Mi i s c khi
gn gi tr theo tham s tng ng ca n. Trong C++ cho php to gi tr mc nh cho cc i.
Cc i ny c th c hoc khng c tham s tng ng trong li gi hm. Khi khng c tham s
tng ng, i c khi gn bi gi tr mc nh.
V d hm delay vi i s mc nh c vit theo mt trong 2 cch sau:
Cch 1 (Khng khai bo nguyn mu):
void delay(int n=1000)
{
for (int i=0 ; i<n ; ++i)
;
}
Cch 2 (C khai bo nguyn mu):
void delay(int n=1000) ;
void delay(int n)
{
for (int i=0 ; i<n ; ++i)
;
}
Cch dng:
+ Cung cp gi tr cho i n (C tham s trong li gi hm)
delay(5000) ; // i n = 5000
+ S dng gi tr mc nh ca i (Khng c tham s trong li gi)
delay() ; // i n = 1000
4.2. Quy tc xy dng hm vi i mc nh
+ Cc i mc nh cn phi l cc i cui cng tnh t tri sang phi. Gi s c 5 i theo th
t t tri sang phi l
d1, d2, d3, d4, d5
Khi :
nu mt i mc nh th phi l d5
GS: Phm Vn t
33
tenshi3003@gmail.com
34
tenshi3003@gmail.com
f(3,3.4) ;
Cc li gi sau l sai:
f(3) ;
f(3,3.4, ,10) ;
4.4. Cc v d
Hm ht (bn di) dng hin th chui k t dc trn n dng mn hnh. Cc i dc v n u c
gi tr mc nh.
#include <conio.h>
#include <iostream.h>
void ht(char *dc="HA NOI",int n=10) ;
void ht(char *dc , int n )
{
for (int i=0;i<n;++i)
cout << "\n" << dc;
}
void main()
{
ht(); // In dng ch HA NOI trn 10 dng
ht("ABC",3); // In dng ch ABC trn 3 dng
ht("DEF"); // In dng ch DEF trn 10 dng
getch();
}
V d di y trnh by hm hin th mt chui str trn mn hnh ho, ti v tr (x,y) v c
mu m. Cc i x, y v m l mc nh. Dng cc hm getmaxx() v getmaxy() khi gn cho x, y.
Dng hng RED gn cho m.
#include <conio.h>
#include <graphics.h>
void hiendc(char *str, int x=getmaxx()/2,
int y = getmaxy()/2, int m=RED);
void hiendc(char *str, int x,int y, int m)
{
int mau_ht = getcolor(); // Luu mau hien tai
setcolor(m);
outtextxy(x,y,str) ;
setcolor(mau_ht); // Khoi phuc mau hien tai
GS: Phm Vn t
35
tenshi3003@gmail.com
36
tenshi3003@gmail.com
37
tenshi3003@gmail.com
38
tenshi3003@gmail.com
39
tenshi3003@gmail.com
40
tenshi3003@gmail.com
41
tenshi3003@gmail.com
42
tenshi3003@gmail.com
43
tenshi3003@gmail.com
44
tenshi3003@gmail.com
45
tenshi3003@gmail.com
46
tenshi3003@gmail.com
47
tenshi3003@gmail.com
48
tenshi3003@gmail.com
49
tenshi3003@gmail.com
50
tenshi3003@gmail.com
51
tenshi3003@gmail.com
52
tenshi3003@gmail.com
53
tenshi3003@gmail.com
54
tenshi3003@gmail.com
GS: Phm Vn t
55
tenshi3003@gmail.com
56
tenshi3003@gmail.com
57
tenshi3003@gmail.com
58
tenshi3003@gmail.com
59
tenshi3003@gmail.com
60
tenshi3003@gmail.com
GS: Phm Vn t
61
tenshi3003@gmail.com
Khi nim v lp
Nh ni trn, lp l khi nim trung tm ca lp trnh hng i tng, n l s m rng
ca cc khi nim cu trc (struct) ca C v bn ghi (record) ca PASCAL. Ngoi cc thnh phn
d liu (nh cu trc), lp cn cha cc thnh phn hm , cn gi l phng thc (method) hay
hm thnh vin (member function). Cng ging nh cu trc, lp c th xem nh mt kiu d liu.
V vy lp cn gi l kiu i tng v lp c dng khai bo cc bin, mng i tng (nh
th dng kiu int khai bo cc bin mng nguyn). Nh vy t mt lp c th to ra (bng cch
khai bo) nhiu i tng (bin, mng) khc nhau. Mi i tng c vng nh ring ca mnh. V
vy cng c th quan nim lp l tp hp cc i tng cng kiu.
Chng ny s trnh by cch nh ngha lp, cch xy dng phng thc, gii thch v phm vi
truy nhp, s dng cc thnh phn ca lp, cch khai bo bin, mng cu trc, li gi ti cc
phng thc.
Bi 1. nh ngha lp
1. Lp c nh ngha theo mu:
class tn_lp
{
// Khai bo cc thnh phn d liu (thuc tnh)
// Khai bo cc phng thc
};
// nh ngha (xy dng) cc phng thc
Ch :
Thuc tnh ca lp c th l cc bin, mng, con tr c kiu chun (int, float, char, char*,
long,...) hoc kiu ngoi chun nh ngha trc (cu trc, hp, lp, ...) . Thuc tnh ca lp
khng th c kiu ca chnh lp , nhng c th l kiu con tr lp ny, v d:
class A
{
A x ; // Khng cho php, v x c kiu lp A
A *p ; // Cho php , v p l con tr kiu lp A
...
} ;
2. Khi bo cc thnh phn ca lp (thuc tnh v phng thc) c th dng cc t kho private
v public quy nh phm vi s dng ca cc thnh phn. Nu khng quy nh c th (khng
dng cc t kho private v public) th C++ hiu l private.
Cc thnh phn private (ring) ch c s dng bn trong lp (trong thn ca cc phng thc
ca lp). Cc hm khng phi l phng thc ca lp khng c php s dng cc thnh phn
ny.
Cc thnh phn public (cng cng) c php s dng c bn trong v bn ngoi lp.
3. Cc thnh phn d liu thng (nhng khng bt buc) khai bo l private bo m tnh
giu kn, bo v an ton d liu ca lp, khng cho php cc hm bn ngoi xm nhp vo d liu
ca lp.
4. Cc phng thc thng khai bo l public chng c th c gi ti (s dng) t cc hm
khc trong chng trnh.
GS: Phm Vn t
62
tenshi3003@gmail.com
63
tenshi3003@gmail.com
GS: Phm Vn t
64
tenshi3003@gmail.com
65
tenshi3003@gmail.com
66
tenshi3003@gmail.com
67
tenshi3003@gmail.com
68
tenshi3003@gmail.com
69
tenshi3003@gmail.com
70
tenshi3003@gmail.com
71
tenshi3003@gmail.com
d3
*this v d2
cnh 2 i qua d2 v d3
cnh 3 i qua
d3 v *this
Cc cnh trn c v nh s dng phng thc ve_doan_thang:
V cnh 1 dng lnh: (*this).ve_doan_thang(d2,mau) ;
V cnh 2 dng lnh: d2.ve_doan_thang(d3,mau);
V cnh 3 dng lnh: d3.ve_doan_thang(*this,mau);
Trong trng ny r rng vai tr ca this rt quan trng. Nu khng dng n th cng vic tr
nn kh khn, di dng v kh hiu hn. Chng ta hy so snh 2 phng n:
Phng n dng this trong phng thc ve_tam_giac:
void DIEM::ve_tam_giac(DIEM d2, DIEM d3,int mau)
{
(*this).ve_doan_thang(d2,mau);
d2.ve_doan_thang(d3,mau);
d3.ve_doan_thang(*this,mau);
}
Phng n khng dng this trong phng thc ve_tam_giac:
void DIEM::ve_tam_giac(DIEM d2, DIEM d3,int mau)
{
DIEM d1;
GS: Phm Vn t
72
tenshi3003@gmail.com
73
tenshi3003@gmail.com
74
tenshi3003@gmail.com
GS: Phm Vn t
75
tenshi3003@gmail.com
76
tenshi3003@gmail.com
77
tenshi3003@gmail.com
78
tenshi3003@gmail.com
79
tenshi3003@gmail.com
80
tenshi3003@gmail.com
81
tenshi3003@gmail.com
82
tenshi3003@gmail.com
83
tenshi3003@gmail.com
84
tenshi3003@gmail.com
85
tenshi3003@gmail.com
86
tenshi3003@gmail.com
87
tenshi3003@gmail.com
88
tenshi3003@gmail.com
89
tenshi3003@gmail.com
90
tenshi3003@gmail.com
91
tenshi3003@gmail.com
92
tenshi3003@gmail.com
93
tenshi3003@gmail.com
GS: Phm Vn t
94
tenshi3003@gmail.com
95
tenshi3003@gmail.com
dng in cc h s a thc
dng nhp cc h s a thc
+ Hm (t do)
double F(DT p, double x) dng tnh p(x)-gi tr a thc ti x
+ Ni thm v phng thc ch s v hm t do F
- Nu p l i tng ca lp DT, th hm ch s cho bit:
p[-1] = double(n)
p[i] = a[i] , i=0, 1, ..., n
- Hm t do F s dng phng thc ch s xc nh n , cc h s a thc v dng chng
tnh gi tr a thc.
+ Trong chng trnh s dng hm new cp pht vng nh cha h s a thc.
+ Ni dung chng trnh gm:
- Nhp, in cc a thc p, q, r, s
- Tnh a thc: f = -(p + q)*(r - s)
GS: Phm Vn t
96
tenshi3003@gmail.com
97
tenshi3003@gmail.com
98
tenshi3003@gmail.com
99
tenshi3003@gmail.com
GS: Phm Vn t
100
tenshi3003@gmail.com
Hm to, hm hu v cc
vn lin quan
Chng ny trnh by mt s vn c tnh chuyn su hn v lp nh:
+ Hm to (constructor)
+ Hm hu (destructor)
+ Ton t gn v hm to sao chp
+ Mi lin quan gia hm to v i tng thnh phn
+ Cc thnh phn tnh
+ Lp bn, hm bn
+ i tng hng
+ Phng thc inline
Bi 1. Hm to (constructor)
1.1. Cng dng
Hm to cng l mt phng thc ca lp (nhng kh c bit) dng to dng mt i tng
mi. Chng trnh dch s cp pht b nh cho i tng sau s gi n hm to. Hm to s
khi gn gi tr cho cc thuc tnh ca i tng v c th thc hin mt s cng vic khc nhm
chun b cho i tng mi.
1.2. Cch vit hm to
1.2.1. im khc ca hm to v cc phng thc thng thng
Khi vit hm to cn 3 s khc bit ca hm to so vi cc phng thc khc nh sau:
+ Tn ca hm to: Tn ca hm to bt buc phi trng vi tn ca lp.
+ Khng khai bo kiu cho hm to.
+ Hm to khng c kt qu tr v.
1.2.2. S ging nhau ca hm to v cc phng thc thng thng
Ngoi 3 im khc bit trn, hm to c vit nh cc phng thc khc:
+ Hm to c th c xy dng bn trong hoc bn ngoi nh ngha lp.
+ Hm to c th c i hoc khng c i.
+ Trong mt lp c th c nhiu hm to (cng tn nhng khc b i).
V d sau nh ngha lp DIEM_DH (im ho) c 3 thuc tnh:
int x; // honh (ct) ca im
int y; // tung (hng) ca im
int m; // mu ca im
v a vo 2 hm to khi gn cho cc thuc tnh ca lp:
// Hm to khng i: Dng cc gi tr c nh khi gn cho
// x, y, m
DIEM_DH() ;
// Hm to c i: Dng cc i x1, y1, m1 khi gn cho
// x, y, m
GS: Phm Vn t
101
tenshi3003@gmail.com
GS: Phm Vn t
102
tenshi3003@gmail.com
103
tenshi3003@gmail.com
104
tenshi3003@gmail.com
105
tenshi3003@gmail.com
106
tenshi3003@gmail.com
107
tenshi3003@gmail.com
108
tenshi3003@gmail.com
109
tenshi3003@gmail.com
110
tenshi3003@gmail.com
111
tenshi3003@gmail.com
112
tenshi3003@gmail.com
113
tenshi3003@gmail.com
114
tenshi3003@gmail.com
115
tenshi3003@gmail.com
116
tenshi3003@gmail.com
117
tenshi3003@gmail.com
Bi 5. Hm hu (Destructor)
5.1. Cng dng ca hm hu
Hm hu l mt hm thnh vin ca lp (phng thc) c chc nng ngc vi hm to. Hm
hu c gi trc khi gii phng (xo b) mt i tng thc hin mt s cng vic c tnh
dn dp trc khi i tng c hu b, v d nh gii phng mt vng nh m i tng ang
qun l, xo i tng khi mn hnh nu nh n ang hin th, ...
Vic hu b mt i tng thng xy ra trong 2 trng hp sau:
+ Trong cc ton t v cc hm gii phng b nh, nh delete, free,...
+ Gii phng cc bin, mng cc b khi thot khi hm, phng thc.
GS: Phm Vn t
118
tenshi3003@gmail.com
119
tenshi3003@gmail.com
120
tenshi3003@gmail.com
121
tenshi3003@gmail.com
122
tenshi3003@gmail.com
123
tenshi3003@gmail.com
GS: Phm Vn t
124
tenshi3003@gmail.com
125
tenshi3003@gmail.com
126
tenshi3003@gmail.com
127
tenshi3003@gmail.com
128
tenshi3003@gmail.com
129
tenshi3003@gmail.com
GS: Phm Vn t
130
tenshi3003@gmail.com
131
tenshi3003@gmail.com
132
tenshi3003@gmail.com
GS: Phm Vn t
133
tenshi3003@gmail.com
134
tenshi3003@gmail.com
135
tenshi3003@gmail.com
136
tenshi3003@gmail.com
137
tenshi3003@gmail.com
138
tenshi3003@gmail.com
139
tenshi3003@gmail.com
// Ho n bn hng
{
private:
char *tenhang ; // Tn hng
double tienban ; // Tin bn
static int tshd ;
// Tng s ho n
140
tenshi3003@gmail.com
141
tenshi3003@gmail.com
GS: Phm Vn t
142
tenshi3003@gmail.com
143
tenshi3003@gmail.com
144
tenshi3003@gmail.com
145
tenshi3003@gmail.com
146
tenshi3003@gmail.com
147
tenshi3003@gmail.com
148
tenshi3003@gmail.com
149
tenshi3003@gmail.com
int TS::nhap(int i)
{
cout << "\nNhap thi sinh " << i ;
cout << "\nHo ten (Bm Enter kt thc nhp): " ;
fflush(stdin);
gets(ht);
if (ht[0]==0) return 0;
cout << "Tong diem: " ; cin >> td;
dc=NULL;
return 1;
}
void main()
GS: Phm Vn t
150
tenshi3003@gmail.com
151
tenshi3003@gmail.com
152
tenshi3003@gmail.com
153
tenshi3003@gmail.com
154
tenshi3003@gmail.com
155
tenshi3003@gmail.com
156
tenshi3003@gmail.com
157
tenshi3003@gmail.com
158
tenshi3003@gmail.com
159
tenshi3003@gmail.com
GS: Phm Vn t
160
tenshi3003@gmail.com
Dn xut v tha k
C 2 khi nim rt quan trng lm nn ton b th mnh ca phng php lp trnh hng i
tng l tnh k tha (inheritance) v tnh tng ng bi (polymorphism). Tnh k tha cho php
cc lp c xy dng trn cc lp c. Trong chng ny s ni v s tha k ca cc lp.
Bi 1. S dn xut v tnh tha k
1.1. Lp c s v lp dn xut
Mt lp c xy dng tha k mt lp khc gi l lp dn xut. Lp dng xy dng lp dn
xut gi l lp c s.
Lp no cng c th l mt lp c s. Hn th na, mt lp c th l c s cho nhiu lp dn
xut khc nhau. n lt mnh, lp dn xut li c th dng lm c s xy dng cc lp dn xut
khc. Ngoi ra mt lp c th dn xut t nhiu lp c s.
Di y l mt s s v quan h dn xut ca cc lp:
S 1: Lp B dn xut t lp A, lp C dn xut t lp B
A
S 2: Lp A l c s ca cc lp B, C v D
A
S 3: Lp D dn xut t 3 lp A, B, C
A
GS: Phm Vn t
161
tenshi3003@gmail.com
GS: Phm Vn t
162
tenshi3003@gmail.com
163
tenshi3003@gmail.com
164
tenshi3003@gmail.com
165
tenshi3003@gmail.com
GS: Phm Vn t
166
tenshi3003@gmail.com
// S tit
167
tenshi3003@gmail.com
168
tenshi3003@gmail.com
169
tenshi3003@gmail.com
170
tenshi3003@gmail.com
171
tenshi3003@gmail.com
172
tenshi3003@gmail.com
Din gii:
GS: Phm Vn t
173
tenshi3003@gmail.com
174
tenshi3003@gmail.com
GS: Phm Vn t
175
tenshi3003@gmail.com
176
tenshi3003@gmail.com
GS: Phm Vn t
177
tenshi3003@gmail.com
178
tenshi3003@gmail.com
179
tenshi3003@gmail.com
180
tenshi3003@gmail.com
181
tenshi3003@gmail.com
182
tenshi3003@gmail.com
GS: Phm Vn t
183
tenshi3003@gmail.com
184
tenshi3003@gmail.com
185
tenshi3003@gmail.com
186
tenshi3003@gmail.com
187
tenshi3003@gmail.com
188
tenshi3003@gmail.com
189
tenshi3003@gmail.com
190
tenshi3003@gmail.com
191
tenshi3003@gmail.com
192
tenshi3003@gmail.com
193
tenshi3003@gmail.com
194
tenshi3003@gmail.com
195
tenshi3003@gmail.com
196
tenshi3003@gmail.com
197
tenshi3003@gmail.com
198
tenshi3003@gmail.com
199
tenshi3003@gmail.com
200
tenshi3003@gmail.com
201
tenshi3003@gmail.com
202
tenshi3003@gmail.com
203
tenshi3003@gmail.com
204
tenshi3003@gmail.com
205
tenshi3003@gmail.com
206
tenshi3003@gmail.com
207
tenshi3003@gmail.com
208
tenshi3003@gmail.com
209
tenshi3003@gmail.com
210
tenshi3003@gmail.com
211
tenshi3003@gmail.com
212
tenshi3003@gmail.com
213
tenshi3003@gmail.com
214
tenshi3003@gmail.com
GS: Phm Vn t
215
tenshi3003@gmail.com
216
tenshi3003@gmail.com
217
tenshi3003@gmail.com
218
tenshi3003@gmail.com
219
tenshi3003@gmail.com
220
tenshi3003@gmail.com
221
tenshi3003@gmail.com
222
tenshi3003@gmail.com
223
tenshi3003@gmail.com
224
tenshi3003@gmail.com
225
tenshi3003@gmail.com
226
tenshi3003@gmail.com
// p tr ti i tng b ca lp B
p->hien_thi() ; // Gi ti B::hien_thi()
p = &c;
// p tr ti i tng c ca lp C
p->hien_thi() ; // Gi ti C::hien_thi()
p = &d;
// p tr ti i tng d ca lp D
p->hien_thi() ; // Gi ti D::hien_thi()
3.3. Tng ng bi
Chng ta nhn thy cng mt cu lnh
p->hien_thi();
tng ng vi nhiu phng thc khc nhau. y chnh l tng ng bi. Kh nng ny r rng
cho php x l nhiu i tng khc nhau, nhiu cng vic, thm ch nhiu thut ton khc nhau
theo cng mt cch thc, cng mt lc . iu ny s c minh ho trong cc mc tip theo.
3.4. Lin kt ng
C th so snh s khc nhau gi phng thc tnh v phng thc o trn kha cnh lin kt mt
li gi vi mt phng thc. Tr li v d trong 3.2:
A *p ; // p l con tr kiu A
A a ; // a l bin i tng kiu A
B b ; // b l bin i tng kiu B
C c ; // c l bin i tng kiu C
D d ; // d l bin i tng kiu D
Nu hien_thi() l cc phng thc tnh, th d p cha a ch ca cc i tng a, b, c hay d, th
li gi:
p->hien_thi() ;
lun lun gi ti phng thc A::hien_thi()
GS: Phm Vn t
227
tenshi3003@gmail.com
228
tenshi3003@gmail.com
229
tenshi3003@gmail.com
230
tenshi3003@gmail.com
231
tenshi3003@gmail.com
232
tenshi3003@gmail.com
233
tenshi3003@gmail.com
234
tenshi3003@gmail.com
235
tenshi3003@gmail.com
236
tenshi3003@gmail.com
237
tenshi3003@gmail.com
GS: Phm Vn t
238
tenshi3003@gmail.com
239
tenshi3003@gmail.com
240
tenshi3003@gmail.com
241
tenshi3003@gmail.com
GS: Phm Vn t
242
tenshi3003@gmail.com
243
tenshi3003@gmail.com
244
tenshi3003@gmail.com
245
tenshi3003@gmail.com
246
tenshi3003@gmail.com
GS: Phm Vn t
247
tenshi3003@gmail.com
istream
ostream
iostream
Lp ios
+ Thuc tnh ca lp: Trong lp ios nh ngha cc thuc tnh c s dng lm cc c nh
dng cho vic nhp xut v cc c kim tra li (xem bn di).
+ Cc phng thc: Lp ios cung cp mt s phng thc phc v vic nh dng d liu nhp
xut, kim tra li (xem bn di).
Lp istream
Lp ny cung cp ton t nhp >> v nhiu phng thc nhp khc (xem bn di) nh cc
phng thc: get, getline, read, ignore, peek, seekg, tellg,...
Lp ostream
Lp ny cung cp ton t xut << v nhiu phng thc xut khc (xem bn di) nh cc
phng thc: put, write, flush, seekp, tellp,...
Lp iostream
Lp ny tha k cc phng thc nhp xut ca cc lp istream v ostream.
Bi 2. Dng cin v ton t nhp
Dng cin l mt i tng kiu istream nh ngha trong C++ . l dng vo (input) chun
gn vi bn phm (tng t nh stdin ca C). Cc thao tc nhp trn dng cin ng ngha vi nhp
d liu t bn phm.
GS: Phm Vn t
248
tenshi3003@gmail.com
249
tenshi3003@gmail.com
250
tenshi3003@gmail.com
251
tenshi3003@gmail.com
252
tenshi3003@gmail.com
253
tenshi3003@gmail.com
254
tenshi3003@gmail.com
255
tenshi3003@gmail.com
256
tenshi3003@gmail.com
// rng quy c 8
// K t n l s 0
257
tenshi3003@gmail.com
GS: Phm Vn t
258
tenshi3003@gmail.com
259
tenshi3003@gmail.com
-87.15
23.4543
678
-87.1500
23.4543
S thc 678.0
678.0000
c in:
-8.715e+01
2.3454e+01
S thc 678.0
6.78e+02
c in:
260
tenshi3003@gmail.com
-8.7150e+01
2.3454e+01
S thc 678.0
c in:
Nhm 4 gm cc hin th:
6.7800e+01
050
dng in h 16 l 0x28
+ Nu c ios::showbase tt (mc nh) th khng in 0 trc s nguyn h 8 v khng in 0x trc
s nguyn h 16. V d nu a = 40 th:
dng in h 8 l:
50
dng in h 16 l 28
C ios::uppercase
+ Nu c ios::uppercase bt th cc ch s h 16 (nh A, B, C, ...) c in di dng ch hoa.
+ Nu c ios::uppercase tt (mc nh) th cc ch s h 16 (nh A, B, C, ...) c in di dng
ch thng.
6.3. Cc phng thc bt tt c
Cc phng thc ny nh ngha trong lp ios.
+ Phng thc
long cout.setf(long f) ;
s bt cc c lit k trong f v tr v mt gi tr long biu th cc c ang bt. Thng thng gi tr f
c xc nh bng cch t hp cc c trnh by trong mc 6.1.
V d cu lnh:
cout.setf(ios::showpoint | ios::scientific) ;
s bt cc c ios::showpoint v ios::scientific.
+ Phng thc
long cout.unsetf(long f) ;
s tt cc c lit k trong f v tr v mt gi tr long biu th cc c ang bt. Thng thng gi tr f
c xc nh bng cch t hp cc c trnh by trong mc 6.1.
V d cu lnh:
cout.unsetf(ios::showpoint | ios::scientific) ;
s tt cc c ios::showpoint v ios::scientific.
+ Phng thc
long cout.flags(long f) ;
c tc dng ging nh cout.setf(long). V d cu lnh:
GS: Phm Vn t
261
tenshi3003@gmail.com
262
tenshi3003@gmail.com
263
tenshi3003@gmail.com
264
tenshi3003@gmail.com
265
tenshi3003@gmail.com
266
tenshi3003@gmail.com
GS: Phm Vn t
267
tenshi3003@gmail.com
268
tenshi3003@gmail.com
269
tenshi3003@gmail.com
270
tenshi3003@gmail.com
ios
ostream
fstreambase
ofstream
istream
ifstream
fstream
271
tenshi3003@gmail.com
272
tenshi3003@gmail.com
273
tenshi3003@gmail.com
274
tenshi3003@gmail.com
275
tenshi3003@gmail.com
276
tenshi3003@gmail.com
277
tenshi3003@gmail.com
278
tenshi3003@gmail.com
279
tenshi3003@gmail.com
280
tenshi3003@gmail.com
281
tenshi3003@gmail.com
282
tenshi3003@gmail.com
283
tenshi3003@gmail.com
284
tenshi3003@gmail.com
285
tenshi3003@gmail.com
286
tenshi3003@gmail.com
287
tenshi3003@gmail.com
288
tenshi3003@gmail.com
Bi 14. X l li
Khi lm vic vi tp khng phi mi vic u tri chy m thng xy ra nhiu iu trc trc,
chng hn:
1. M mt tp c nhng tp khng tn ti.
2. c d liu nhng con tr tp cui tp
3. Ghi d liu nhng ht khng gian a (a y).
4. To tp nhng ia hng, hoc a cm ghi hoc a y.
5. Dng tn tp khng hp l
6. nh thc hin mt thao tc nhng tp li khng c m mode ph hp thc hin thao
tc .
Tm li khi lm vic vi tp thng gp nhiu li khc nhau, nu khng bit cch pht hin x
l th chng trnh s dn n ri lon hoc cho kt qu sai. Trong lp ios ca C++ c nhiu
phng thc cho php pht hin li khi lm vic vi tp. l:
1. Phng thc
int eof() ;
Nu con tr tp cui tp m li thc hin mt lnh c d liu th phng thc eof() tr v
gi tr khc khng, tri li phng thc c gi tr bng 0.
2. Phng thc
int fail() ;
Phng thc fail() tr v gi tr khc khng nu ln nhp xut cui cng c li, tri li phng
thc c gi tr bng 0.
3. Phng thc
int bad() ;
GS: Phm Vn t
289
tenshi3003@gmail.com
290
tenshi3003@gmail.com
291
tenshi3003@gmail.com
292
tenshi3003@gmail.com
293
tenshi3003@gmail.com
294
tenshi3003@gmail.com
295
tenshi3003@gmail.com
296
tenshi3003@gmail.com
297
tenshi3003@gmail.com
298
tenshi3003@gmail.com
299
tenshi3003@gmail.com
300
tenshi3003@gmail.com
istream
GS: Phm Vn t
fstreambase
301
ostream
tenshi3003@gmail.com
ofstream
fstream
302
tenshi3003@gmail.com
GS: Phm Vn t
303
tenshi3003@gmail.com
ha
Trong chng ny s gii thiu cc hm v cc ng v hnh c bn nh ng trn, cung
elip, hnh qut, ng gy khc, hnh a gic, ng thng, ng ch nht, hnh ch nht, hnh
hp ch nht, ... Ngoi ra cn cp ti cc vn rt l th khc nh: x l vn bn trn mn hnh
ha, ca s v k thut to nh di ng. Cc hm ha c khai bo trong tp graphics.h.
Bi 1. Khi nim ha
hiu k thut lp trnh ha, u tin phi hiu cc yu t c bn ca ha. T trc n
nay chng ta ch yu lm vic vi kiu vn bn. Ngha l mn hnh c thit lp hin th 25
dng, mi dng c th cha 80 k t. Trong kiu vn bn, cc k t hin th trn mn hnh c
phn cng ca my PC n nh trc v ta khng th no thay i c kch thc, kiu ch.
mn hnh ha, ta c th x l n tng chm im (pixel) trn mn hnh v do vy mun v
bt k th g cng c. S bi tr v s pixel trn mn hnh c gi l phn gii (resolution).
Do mi kiu mn hnh ha c mt cch x l ha ring nn TURBO C cung cp mt tp tin
iu khin ring cho tng kiu ha. Bng 8-1 cho thy cc kiu ha v cc tp tin iu khin
chng.
Ngoi cc tp c ui BGI cha chng trnh iu khin ha, TURBO C cn cung cp cc
tp tin ui CHR cha cc Font ch v cc kiu ch khc nhau trn mn hnh ha. l cc
tp:
GOTH.CHR
LITT.CHR
SANS.CHR
TRIP.CHR
Bng 8-1. Cc tp tin iu khin ha ca TURBO C++
Tn tp tin
Kiu mn hnh ha
ATT.BGI
CGA.BGI
EGAVGA.BGI
HERC.BGI
IBM8514.BGI
PC3270.BGI
IBM 3270 PC
GS: Phm Vn t
304
tenshi3003@gmail.com
(0,0)
(639,0)
(0,479)
(639,479)
Hnh 8.1. H ta VGA
GS: Phm Vn t
305
tenshi3003@gmail.com
graphmode
phn gii
Detect (0)
CGA (1)
CGAC0 (0)
CGAC1 (1)
320 x 200
320 x 200
CGAC2 (2)
320 x 200
CGAC3 (3)
320 x 200
CGAHi (4)
640 x 200
MCGA0 (0)
320 x 200
MCGA1 (1)
320 x 200
MCGA2 (2)
320 x 200
MCGA3 (3)
320 x 200
MCGAMed (4)
640 x 200
MCGAHi (5)
640 x 480
EGALO (0)
640 x 200
EGAHi (1)
640 x 350
EGA64LO (0)
640 x 200
EGA64Hi (1)
640 x 350
EGAMONO (5)
EGAMONOHi (0)
640 x 350
VGA (9)
VGALO (0)
640 x 200
VGAMED (1)
640 x 350
VGAHI (2)
640 x 480
HERCMONO (7)
HERCMONOHI
720 x 348
ATT400 (8)
ATT400C0 (0)
ATT400C1 (1)
320 x 200
320 x 200
ATT400C2 (2)
320 x 200
ATT400C3 (3)
320 x 200
ATT400MED (4)
640 x 400
ATT400HI (5)
640 x 400
PC3270 (10)
PC3270HI (0)
720 x 350
IBM8514 (6)
IBM8514LO (0)
IBM8514HI (1)
MCGA (2)
EGA (3)
EGA64 (4)
306
tenshi3003@gmail.com
Tr
Li pht hin
grOk
Khng c li
grNoInitGraph
-1
Cha khi ng h ha
grNotDetected
-2
grFileNotFound
-3
grInvalidDriver
-4
grNoLoadMem
-5
grNoScanMem
-6
grNoFloodMem
-7
grFontNoFound
-8
grNoFontMem
-9
GS: Phm Vn t
307
tenshi3003@gmail.com
-10
grError
-11
Li ha tng qut
grIOerror
-12
Li ha vo ra
grInvalidFont
-13
grInvalidFontNum
-14
Bi 4. Mu v mu
1. chn mu nn ta s dng hm
void setbkcolor(int color);
2. chn mu ng v ta dng hm
void setcolor(int color);
3. chn mu (kiu) t v mu t ta dng hm
void setfillstyle(int pattern, int color);
Trong c 3 trng hp color xc nh m ca mu. Cc gi tr kh d ca color cho trong bng 84, pattern xc nh m ca mu t (xem bng 8-5).
Mu t v mu t s c s dng trong cc hm pieslice, fillpoly, bar, bar3d v floodfill (xem
5 di y).
4. Chn gii mu
thay i gii mu c nh ngha trong bng 8.4 ta dng hm
void setpalette(int colornum, int color);
V d cu lnh
setpalette(0, Lightcyan);
bin mu u tin trong bng mu thnh xanh l nht. Cc mu khc khng b nh hng.
Bng 8-4. Cc gi tr kh d ca color
Tn hng
Gi tr s
Mu hin th
BLACK
en
BLUE
Xanh da tri
GREEN
Xanh l cy
CYAN
Xanh l
RED
MAGENTA
Tm
BROWN
Nu
LIHGTGRAY
Xm nht
DARKGRAY
Xm sm
LIGHTBLUE
LIGHTGREEN
10
Xanh l cy nht
LIGHTCYAN
11
Xanh l nht
LIGHTRED
12
nht
LIGHTMAGENTA
13
Tm nht
YELLOW
14
Vng
GS: Phm Vn t
308
tenshi3003@gmail.com
15
Trng
Gi tr s
M t kiu t
EMPTY_FILL
T bng mu nn
SOLID_FILL
T bng ng nt lin
LINE_FILL
T bng - - -
LTSLASH_FILL
T bng ///
SLASH_FILL
T bng /// in m
BKSLASH_FILL
T bng \\\ in m
LTBKSLASH_FILL
T bng \\\
HATCH_FILL
XHATCH_FILL
INTERLEAVE_FILL
T bng ng t qung
WIDE_DOT_FILL
10
CLOSE_DOT_FILL
11
309
tenshi3003@gmail.com
310
tenshi3003@gmail.com
311
tenshi3003@gmail.com
10. Hm
void moveto(int x,int y);
s di chuyn con chy ti v tr (x, y).
V d 3. Chng trnh di y to ln mt ng gp khc bng cc on thng. ng gp
khc i qua cc nh: (20, 20), (620, 20), (620, 180), (20, 180) v (320, 100).
#include <graphics.h>
main()
{
int mh=0, mode=0;
initgraph(&mh, &mode, "");
setbkcolor(GREEN);
setcolor(YELLOW);
moveto(320,100);
line(20,20,620,20);
linerel(-300,80);
lineto(620,180);
lineto(620,20);
closegraph();
}
D. Hnh ch nht
11. Hm
void rectangle(int x1,int y1,int x2,int y2);
GS: Phm Vn t
312
tenshi3003@gmail.com
TOPON
TOPOFF
V d 4. Chng trnh di y s v mt ng ch nht, mt hnh ch nht v mt khi hp
ch nht c np.
#include <graphics.h>
main()
{
int mh=0, mode=0;
initgraph(&mh, &mode, "");
setbkcolor(GREEN);
setcolor(RED);
setfillstyle(CLOSE_DOT_FILL,YELLOW);
rectangle(5,5,300,160);
bar(5,175,300,340);
bar3d(320,100,500,340,100,1);
closegraph();
}
Bi 6. Chn kiu ng
1. Hm
void setlinestyle(int linestyle,int pattern,int thickness);
tc ng n nt v ca cc th tc line, lineto, rectange, drawpoly, circle,... Hm ny cho php ta
n nh 3 yu t ca ng thng l dng, b dy v mu t to.
+ Dng ng do tham s linestyle khng ch. Sau y l cc gi tr kh d ca linestyle v dng
ng thng tng ng.
SOLID_LINE = 0
Nt lin
DOTTED_LINE = 1 Nt chm
GS: Phm Vn t
313
tenshi3003@gmail.com
314
tenshi3003@gmail.com
315
tenshi3003@gmail.com
316
tenshi3003@gmail.com
GS: Phm Vn t
317
tenshi3003@gmail.com
318
tenshi3003@gmail.com
319
tenshi3003@gmail.com
Bi 9. X l vn bn trn mn hnh ho
1. Hin th vn bn trn mn hnh ho
Hm
void outtext (char *s);
GS: Phm Vn t
320
tenshi3003@gmail.com
321
tenshi3003@gmail.com
322
tenshi3003@gmail.com
323
tenshi3003@gmail.com
324
tenshi3003@gmail.com
325
tenshi3003@gmail.com
326
tenshi3003@gmail.com
327
tenshi3003@gmail.com
328
tenshi3003@gmail.com
329
tenshi3003@gmail.com
330
tenshi3003@gmail.com
331
tenshi3003@gmail.com
332
tenshi3003@gmail.com
333
tenshi3003@gmail.com
GS: Phm Vn t
334
tenshi3003@gmail.com
GS: Phm Vn t
335
tenshi3003@gmail.com
336
tenshi3003@gmail.com
337
tenshi3003@gmail.com
338
tenshi3003@gmail.com
339
tenshi3003@gmail.com
340
tenshi3003@gmail.com
341
tenshi3003@gmail.com
342
tenshi3003@gmail.com
GS: Phm Vn t
343
tenshi3003@gmail.com
344
tenshi3003@gmail.com
345
tenshi3003@gmail.com
346
tenshi3003@gmail.com
347
tenshi3003@gmail.com
348
tenshi3003@gmail.com
349
tenshi3003@gmail.com
350
tenshi3003@gmail.com
351
tenshi3003@gmail.com
352
tenshi3003@gmail.com
353
tenshi3003@gmail.com
354
tenshi3003@gmail.com
355
tenshi3003@gmail.com
356
tenshi3003@gmail.com
357
tenshi3003@gmail.com
358
tenshi3003@gmail.com
359
tenshi3003@gmail.com
360
tenshi3003@gmail.com
361
tenshi3003@gmail.com
362
tenshi3003@gmail.com
363
tenshi3003@gmail.com
364
tenshi3003@gmail.com
365
tenshi3003@gmail.com
366
tenshi3003@gmail.com
367
tenshi3003@gmail.com
368
tenshi3003@gmail.com
369
tenshi3003@gmail.com
370
tenshi3003@gmail.com
371
tenshi3003@gmail.com
372
tenshi3003@gmail.com
373
tenshi3003@gmail.com
374
tenshi3003@gmail.com
GS: Phm Vn t
375
tenshi3003@gmail.com
376
tenshi3003@gmail.com
377
tenshi3003@gmail.com
GS: Phm Vn t
378
tenshi3003@gmail.com
Ph lc 2
Cc t kha ca c++
asm
auto
break
case
catch
char
class
const
continue
default
delete
do
GS: Phm Vn t
double
else
enum
extern
float
for
friend
goto
if
inline
int
long
new
operator
private
protected
public
register
return
short
signed
sizeof
static
struct
379
switch
template
this
throw
try
typedef
union
unsigned
virtual
void
volatile
while
tenshi3003@gmail.com
m
(S TT)
0
1
2
3
4
5
6
7
8
9
k t
NUL
SOH
STX
ETX
EOT
ENQ
ACK
BEL
BS
HT
GS: Phm Vn t
Bng m ASCII
m
k t
m
k t
(S TT)
(S TT)
26
SUB
52
4
27
ESC
53
5
28
FS
54
6
29
GS
55
7
30
RS
56
8
31
US
57
9
32
Space
58
:
33
!
59
;
34
60
<
35
#
61
=
380
tenshi3003@gmail.com
LF
VT
FF
CR
SO
SI
DLE
DC1
DC2
DC3
DC4
NAK
SYN
ETB
CAN
EM
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
$
%
&
(
)
*
+
,
.
/
0
1
2
3
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
>
?
@
A
B
C
D
E
F
G
H
I
J
K
L
M
78
95
112
79
96
113
80
97
114
81
98
115
82
99
116
83
100
117
84
101
118
85
102
119
86
103
120
87
104
121
88
105
122
89
106
123
90
107
124
91
108
125
92
109
126
93
110
127
DEL
94
111
381
tenshi3003@gmail.com
Thp phn
1
2-11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
GS: Phm Vn t
Phm ca PC
ESC
1-9,0
tr, gch di
=, +
Backspace
Tab
Q
W
E
R
T
Y
U
I
O
P
[
]
Enter
Ctrl
A
S
D
F
G
H
J
K
L
Chm phy, :
Nhy
Tidle
Shift
\, thanh ng
Z
X
C
V
B
382
Phm ca PC-AT
Tilde
1-9,0
tr, gch di
=, +
\,thanh ng
Backspace
Tab
Q
W
E
R
T
Y
U
I
O
P
[
]
Ctrl
A
S
D
F
G
H
J
K
L
Chm phy,:
Nhy
tri
Enter
Shift tri
Z
X
C
tenshi3003@gmail.com
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
79
80
81
82
83
90
91
92
93
95
96
GS: Phm Vn t
N
M
Phy
Chm
/,?
Shift phi
*, PrtScr
Alt
Space bar
Caps Lock
F1
F2
F3
F4
F5
F6
F7
F8
F9
F10
Num Lock
Scroll Lock,Break
Home
mi tn ln
PgUp
Du tr bn tnh
Mi tn tri
5
Mi tn phi
End
Mi tn xung
PgDn
Ins
Del
V
B
N
M
Phy
Chm
/, ?
Shift phi
Alt
Space bar
Caps Lock
F2
F4
F6
F8
F10
F1
F3
F5
F7
F9
ca bn tnh
ESC
Home
Mi tn tri
End
Num Lock
Mi tn ln
383
tenshi3003@gmail.com
97
98
99
100
101
102
103
104
105
106
107
108
GS: Phm Vn t
5 ca bn tnh
Mi tn xung
Ins
Scroll Lock
PgUp
Mi tn phi
PgDn
Del
Sys
*, PrtScr
+
384
tenshi3003@gmail.com
Hm vi i s bt nh trong C
Trong cc gio trnh C thng ch hng dn cch xy dng hm vi cc i c nh. Mi i
cn c mt tham s (cng kiu vi n) trong li gi hm. Tuy nhin mt vi hm chun ca C li
khng nh vy, m linh hot hn, chng khi dng hm printf hay scanf th s tham s m ta cung
cp cho hm l khng c nh c v s lng ln kiu cch. V d trong cu lnh:
printf(\n Tng = %d , 3+4+5) ;
c 2 tham s, nhng trong cu lnh:
printf(\n H Ni ) ;
ch c mt tham s.
Nh vy cn phn bit cc khi nim sau:
- i s c nh c khai bo trong dng u ca hm, n c tn v kiu
- Tham s ng vi i s c nh gi l tham s c nh
- i bt nh c khai bo bi ba du chm: bt nh c v s lng v kiu
- Tham s bt nh (ng vi i bt nh) l mt danh sch gi tr vi s lng v kiu tu
(khng xc nh)
Trong ph lc ny s trnh by cch xy dng cc hm vi i s bt nh. Cng c ch yu
c dng l con tr v danh sch.
1. Bin con tr
Bin con tr (hay con tr) dng cha a ch ca bin, mng, hm, ... C nhiu kiu a ch, v
vy cng c nhiu kiu con tr. Bin con tr c khai bo theo mu:
Kiu *Tn_bin_con_tr ;
V d:
float px ; // px l con tr thc
Cc php ton quan trng trn con tr gm:
+ Gn a ch mt vng nh cho con tr (dng ton t gn, php ly a ch, cc hm cp pht b
nh)
+ Truy nhp vo vng nh thng qua con tr, dng php ton:
*Tn_con_tr
( y c 2 vng nh: vng nh ca bin con tr v vng nh m a ch u ca n cha
trong bin con tr)
+ Cng a ch con tr cha a ch ca phn t tip theo, dng php ton:
++ Tn_con_tr hoc Tn_con_tr ++
Ch rng cc php ton trn ch c th thc hin i vi con tr c kiu.
2. Danh sch khng cng kiu
Dng con tr c kiu ch qun l c mt danh sch gi tr cng kiu, v d dy s thc, dy s
nguyn, dy cc cu trc,....
Khi cn qun l mt danh sch cc gi tr khng cng kiu ta phi dng con tr khng kiu
(void) khai bo nh sau:
void * Tn_con_tr ;
GS: Phm Vn t
385
tenshi3003@gmail.com
386
tenshi3003@gmail.com
387
tenshi3003@gmail.com
388
tenshi3003@gmail.com
GS: Phm Vn t
389
tenshi3003@gmail.com
<io.h>
<io.h>
<io.h>
<io.h>
<process.h>
<stdlib.h>
<math.h>
<graphics.h>
<math.h>
<math.h>
<math.h>
<ctype.h>
<ctype.h>
<ctype.h>
<graphics.h>
<graphics.h>
<math.h>
<alloc.h>
<math.h>
<dir.h>
<io.h>
<graphics.h>
<graphics.h>
<graphics.h>
<io.h>
<conio.h>
<conio.h>
<alloc.h>
<math.h>
<math.h>
<conio.h>
<io.h>
<conio.h>
<dos.h>
<conio.h>
<dos.h>
<graphics.h>
390
tenshi3003@gmail.com
<ctype.h>
<graphics.h>
<dos.h>
<process.h>
<math.h>
<math.h>
<stdio.h>
<stdio.h>
<ctype.h>
<stdio.h>
<stdio.h>
<stdio.h>
<stdio.h>
<stdio.h>
<stdio.h>
<graphics.h>
<dir.h>
<dir.h>
<graphics.h>
<math.h>
<math.h>
<stdio.h>
<dos.h>
<dos.h>
<stdio.h>
<stdio.h>
<stdio.h>
<stdio.h>
<stdio.h>
<alloc.h>
<stdio.h>
<stdio.h>
<stdio.h>
<stdio.h>
<ctype.h>
<dos.h>
<graphics.h>
<stdio.h>
<conio.h>
<stdio.h>
391
tenshi3003@gmail.com
<conio.h>
<graphics.h>
<dir.h>
<time.h>
<graphics.h>
<graphics.h>
<graphics.h>
<graphics.h>
<graphics.h>
<graphics.h>
<graphics.h>
<stdio.h>
<conio.h>
<dos.h>
<time.h>
<dos.h>
<graphics.h>
<stdio.h>
<conio.h>
<conio.h>
<graphics.h>
<graphics.h>
<graphics.h>
<graphics.h>
<dos.h>
<dos.h>
<dos.h>
<dos.h>
<dos.h>
<ctype.h>
<ctype.h>
<ctype.h>
<ctype.h>
<ctype.h>
<ctype.h>
<ctype.h>
<ctype.h>
<ctype.h>
<ctype.h>
<ctype.h>
392
tenshi3003@gmail.com
<ctype.h>
<conio.h>
<dos.h>
<stdlib.h>
<graphics.h>
<graphics.h>
<graphics.h>
<math.h>
<math.h>
<io.h>
<ctype.h>
<alloc.h>
<memory.h> hoc <string.h>
<memory.h> hoc <string.h>
<memory.h> hoc <string.h>
<memory.h> hoc <string.h>
<memory.h> hoc <string.h>
<memory.h> hoc <string.h>
<dos.h>
<dir.h>
<mem.h>
<memory.h> hoc <string.h>
<graphics.h>
<dos.h>
<io.h>
<graphics.h>
<graphics.h>
<dos.h>
<dos.h>
<stdio.h>
<graphics.h>
<dos.h>
<dos.h>
<math.h>
<stdio.h>
<stdio.h>
<conio.h>
<stdio.h>
<graphics.h>
<graphics.h>
393
tenshi3003@gmail.com
<stdio.h>
<stdio.h>
<stdlib.h>
<stdlib.h>
<stdlib.h> v <time.h>
<io.h>
<alloc.h>
<graphics.h>
<stdio.h>
<stdio.h>
<dir.h>
<stdio.h>
<dos.h>
<graphics.h>
<graphics.h>
<time.h>
<graphics.h>
<graphics.h>
<graphics.h>
<graphics.h>
<graphics.h>
<time.h>
<dos.h>
<graphics.h>
<graphics.h>
<math.h>
<math.h>
<dos.h>
<dos.h>
<stdio.h>
<math.h>
<stdlib.h>
<string.h>
<string.h>
<string.h>
<string.h>
<string.h>
<string.h>
<string.h>
<string.h>
394
tenshi3003@gmail.com
GS: Phm Vn t
<string.h>
<string.h>
<string.h>
<string.h>
<string.h>
<string.h>
<string.h>
<string.h>
<string.h>
<string.h>
<string.h>
<string.h>
<string.h>
<string.h>
<process.h>
<math.h>
<math.h>
<conio.h>
<conio.h>
<graphics.h>
<conio.h>
<graphics.h>
<time.h>
<ctype.h>
<ctype.h>
<ctype.h>
<stdio.h>
<conio.h>
<conio.h>
<conio.h>
<io.h>
395
tenshi3003@gmail.com
GS: Phm Vn t
396
tenshi3003@gmail.com