Professional Documents
Culture Documents
Ngon Ngu Lap Trinh C++ PDF
Ngon Ngu Lap Trinh C++ PDF
Ngon Ngu Lap Trinh C++ PDF
H NI - 2006
GII THIU
C++ l ngn ng lp trnh hng i tng c m rng t ngn ng C. Do vy, C++ c u
im l k tha c cc im mnh truyn thng ca ngn ng C nh uyn chuyn, tng thch
vi cc thit b phn cng. Hin nay, C++ l mt ngn ng lp trnh ph bin, c ging dy ti
cc trng i hc trong nc v trn th gii v c bit c s dng rng ri cho nhu cu pht
trin ca cng nghip phn mm hin nay. Ti liu ny khng nhng nhm gii thiu cho sinh
vin ngn ng lp trnh C++, m cn mong mun qua sinh vin c th hiu c t tng ca
phng php lp trnh hng i tng ni chung. Ni dung ca ti liu bao gm hai phn chnh:
Phn th nht l lp trnh nng cao vi C++, bao gm lp trnh C++ vi con tr v mng,
cc kiu d liu c cu trc cng cc thao tc vo ra trn tp.
vi C++. Cun sch ny c km theo mt a chng trnh cha ton b cc chng trnh c
ly lm minh ho v cc bi tp trong cun sch.
Mc d cc tc gi c nhiu c gng trong vic bin son ti liu ny, song khng th trnh
khi nhng thiu st. Rt mong nhn c nhng kin ng gp qu bu t cc sinh vin v cc
bn ng nghip.
CHNG 1
GII THIU V CC PHNG PHP LP TRNH
Ni dung ca chng ny tp trung trnh by cc phng php lp trnh:
c trng
Lp trnh tuyn tnh c hai c trng:
n gin: chng trnh c tin hnh n gin theo li tun t, khng phc tp.
n lung: ch c mt lung cng vic duy nht, v cc cng vic c thc hin tun t
trong lung .
Tnh cht
u im: Do tnh n gin, lp trnh tuyn tnh c ng dng cho cc chng trnh n
gin v c u im d hiu.
Nhc im: Vi cc ng dng phc tp, ngi ta khng th dng lp trnh tuyn tnh
gii quyt.
Ngy nay, lp trnh tuyn tnh ch tn ti trong phm vi cc modul nh nht ca cc phng php
lp trnh khc. V d trong mt chng trnh con ca lp trnh cu trc, cc lnh cng c thc
hin theo tun t t u n cui chng trnh con.
c trng
c trng c bn nht ca lp trnh cu trc th hin mi quan h:
Cu trc d liu l cch t chc d liu cho vic x l bi mt hay nhiu chng trnh
no .
Tnh cht
Mi chng trnh con c th c gi thc hin nhiu ln trong mt chng trnh chnh.
u im
Nhc im
Lp trnh cu trc khng h tr mnh vic s dng li m ngun: Gii thut lun ph
thuc cht ch vo cu trc d liu, do , khi thay i cu trc d liu, phi thay i gii
thut, ngha l phi vit li chng trnh.
Vn
Vn c bn ca lp trnh cu trc l bng cch no phn chia chng trnh chnh thnh cc
chng trnh con cho ph hp vi yu cu, chc nng v mc ch ca mi bi ton. Thng
thng, phn r bi ton trong lp trnh cu trc, ngi ta s dng phng php thit k trn
xung (top-down).
na. Ngha l khi mi bi ton con u c th gii quyt bng mt chng trnh con vi mt gii
thut n gin.
V d, s dng phng php top-down gii quyt bi ton xy mt cn nh mi. Chng ta c
th phn r bi ton theo cc bc nh sau:
Cng s dng phng php top-down vi cng mt bi ton, nhng c th cho ra nhiu
kt qu khc nhau. Nguyn nhn l do s khc nhau trong tiu ch phn r mt bi ton
thnh cc bi ton con.
V d, vn p dng phng php top-down gii quyt bi ton xy nh, nhng nu s dng
mt cch khc phn chia bi ton, ta c th thu c kt qu khc bit so vi phng php ban
u:
Ngi ta coi cc thc th trong chng trnh l cc i tng v sau tru tng ho i
tng thnh lp i tng.
D liu c t chc thnh cc thuc tnh ca lp. Ngui ta ngn chn vic thay i tu
tin d liu trong chng trnh bng cc cch gii hn truy nhp nh ch cho php truy
nhp d liu thng qua i tng, thng qua cc phng thc m i tng c cung
cp
Ngn ng lp trnh hng i tng ph bin hin nay l Java, C++, C#...Mc d C++ cng c
nhng c trng c bn ca lp trnh hng i tng nhng vn khng phi l ngn ng lp
trnh thun hng i tng.
c trng
Lp trnh hng i tng c hai c trng c bn:
u im
Lp trnh hng i tng c mt s u im ni bt:
i tng (Object)
Trong lp trnh hng i tng, i tng c coi l n v c bn nh nht. Cc d diu v
cch x l ch l thnh phn ca i tng m khng c coi l thc th. Mt i tng cha cc
d liu ca ring n, ng thi c cc phng thc (hnh ng) thao tc trn cc d liu :
i tng = d liu + phng thc
Lp (Class)
Khi c nhiu i tng ging nhau v mt d liu v phng thc, chng c nhm li vi nhau
v gi chung l lp:
ng gi d liu (Encapsulation)
Tuy nhin, v C++ ch l ngn ng lp trnh na i tng, cho nn C++ vn cho php nh ngha
cc bin d liu v cc hm t do, y l kt qu k tha t ngn ng C, mt ngn ng lp trnh
thun cu trc.
K tha (Inheritance)
Tnh k tha ca lp trnh hng i tng cho php mt lp c th k tha t mt s lp tn
ti. Khi , lp mi c th s dng d liu v phng thc ca cc lp c s nh l ca mnh.
Ngoi ra, lp dn xut cn c th b sung thm mt s d liu v phng thc. u im ca k
tha l khi thay i d liu ca mt lp, ch cn thay i cc phng thc trong phm vi lp c s
m khng cn thay i trong cc lp dn xut.
a hnh (Polymorphsim)
a hnh l khi nim lun i km vi k tha. Do tnh k tha, mt lp c th s dng li cc
phng thc ca lp khc. Tuy nhin, nu cn thit, lp dn xut cng c th nh ngha li mt
s phng thc ca lp c s. l s np chng phng thc trong k tha. Nh s np chng
phng thc ny, ta ch cn gi tn phng thc b np chng t i tng m khng cn quan
tm l i tng ca lp no. Chng trnh s t ng kim tra xem i tng l thuc kiu
lp c s hay thuc lp dn xut, sau s gi phng thc tng ng vi lp . l tnh a
hnh.
Cho php ng gi d liu vo cc lp i tng. Cho php nh ngha phm vi truy nhp
d liu ca lp bng cc t kho phm vi: public, protected, private.
Cho php lp dn xut s dng cc phng thc ca lp c s (trong phm vi quy nh).
TNG KT CHNG 1
Chng 1 trnh by tng quan v cc phng php lp trnh hin nay. Ni dung tp trung vo
ba phng php lp trnh c lin quan trc tip n ngn ng lp trnh C++:
10
CHNG 2
CON TR V MNG
Ni dung ca chng ny tp trung trnh by cc vn c bn lin quan n cc thao tc trn
kiu d liu con tr v mng trong C++:
Con tr hm
Trong :
Bt u t k t th hai, c th c kiu k t s.
Lu
C th vit du con tr * ngay sau kiu d liu, ngha l hai cch khai bo sau l tng
ng:
int *pointerInt;
int* pointerInt;
int pointerInt*;
11
Lu
V d:
int x, *px;
px = &x;
s cho con tr px c kiu int tr vo a ch ca bin x c kiu nguyn. Php ton &<Tn bin>
s cho a ch ca bin tng ng.
Ly gi tr ca bin do con tr tr n
Php ly gi tr ca bin do con tr tr n c thc hin bng cch gi tn:
*<Tn con tr>;
Lu
Trong php ton ny, phi c du con tr *. Nu khng c du con tr, s tr thnh
php ly a ch ca bin do con tr tr ti.
V d:
int x = 12, y, *px;
px = &y;
*px = x;
x = 12
y=0
px
px = &y;
x = 12
y=0
px
px = x;
x = 12
y=x =12
px
null
Lu
12
Trong php gn gia cc con tr, bt buc phi dng php ly a ch ca bin do con tr
tr ti (khng c du * trong tn con tr) m khng c dng php ly gi tr ca
bin do con tr tr ti.
Hai con tr phi cng kiu. Trong trng hp hai con tr khc kiu, phi s dng cc
phng thc p kiu tng t nh trong php gn cc bin thng thng c kiu khc
nhau.
V d:
int x = 12, *px, *py;
px = &x;
py = px;
py
null
px
py
null
px
py
x = 12
px
px = &x;
x = 12
py = px;
x = 12
null
// Con tr px tr ti a ch ca x
// Ni dung ca px l 32
// Cho py tr ti ch m px tr: a ch ca x
*py += 15;
// Ni dung ca py l 47
Trong chng trnh 2.1, ban u bin x c gi tr 12. Sau , con tr px tr vo a ch ca bin x
nn con tr px cng c gi tr 12. Tip theo, ta tng gi tr ca con tr px thm 20, gi tr ca con
tr px l 32. V px ang tr n a ch ca x nn x cng c gi tr l 32. Sau , ta cho con tr py
tr n v tr m px ang tr ti (a ch ca bin x) nn py cng c gi tr 32. Cui cng, ta tng
gi tr ca con tr py thm 15, py s c gi tr 37. V py cng ang tr n a ch ca x nn x
cng c gi tr 37. Do , v d 2.1 s in ra kt qu nh sau:
13
A[0]=5
int *pa = A;
A[0]=5
pa
14
A[0]=5
A[0]=5
A[0]=5
A[0]=5
pa
pa = pa + 1;
A
pa
pa = pa - 2;
A
pa
Lu :
Hai php ton pa++ v *pa++ c tc dng hon ton khc nhau trn mng, pa++ l thao
tc trn con tr, tc l trn b nh, n s a con tr pa tr n a ch ca phn t tip
theo ca mng. *pa++ l php ton trn gi tr, n tng gi tr hin ti ca phn t mng
ln mt n v.
V d:
int A[5] = {5, 10, 15, 20, 25};
int *pa = &A[2];
15
A[0]=5
A[0]=5
A[0]=5
A[0]=5
pa
A
pa ++;
pa
A
pa
A[0]=5
A[0]=5
A[0]=5
A[0]=5
A[0]=5
pa
A
pa ++;
null
pa
A
pa = &A[0];
pa
pa --;
null
A
pa
V mng A l con tr hng, cho nn khng th thc hin cc php ton trn A m ch c
th thc hin trn cc con tr tr n A: cc php ton pa++ hoc pa--l hp l, nhng cc
php ton A++ hoc A--l khng hp l.
16
Chng trnh 2.2b ci t mt th tc tng t bng con tr. Hai th tc ny c chc nng hon
ton ging nhau.
Chng trnh 2.2b
void SortArray(int *A, int n){
int temp;
for(int i=0; i<n-1; i++)
for(int j=i+1; j<n; j++)
if(*(A+i) > *(A+j)){
temp = *(A+i);
*(A+i) = *(A+j);
*(A+j) = temp;
}
}
Trong chng trnh 2.2b, thay v dng mt mng, ta dng mt con tr tr n mng cn sp
xp. Khi , ta c th dng cc thao tc trn con tr thay v cc thao tc trn cc phn t mng.
17
a ch ca ma trn A:
a ch ca hng th nht:
a ch ca hng th i:
a ch phn t
&A[i][j] = (*(A+i)) + j;
Gi tr phn t
Nh vy, mt mng hai chiu c th thay th bng mt mng mt chiu cc con tr cng kiu:
int A[3][3];
c th thay th bng:
int (*A)[3];
Con tr tr ti con tr
V mt mng hai chiu int A[3][3] c th thay th bng mt mng cc con tr int (*A)[3]. Hn
na, mt mng int A[3] li c th thay th bng mt con tr int *A. Do vy, mt mng hai chiu
c th thay th bng mt mng cc con tr, hoc mt con tr tr n con tr. Ngha l cc cch
vit sau l tng ng:
int A[3][3];
int (*A)[3];
int **A;
2.3 CON TR HM
Mc d hm khng phi l mt bin c th nn khng c mt a ch xc nh. Nhng trong khi
chy, mi mt hm trong C++ cng c mt vng nh xc nh, do vy, C++ cho php dng con
tr tr n hm. Con tr hm c dng truyn tham s c dng hm.
Khai bo con tr hm
Con tr hm c khai bo tng t nh khai bo nguyn mu hm thng thng trong C++,
ngoi tr vic c thm k hiu con tr * trc tn hm. C php khai bo con tr hm nh sau:
<Kiu d liu tr v> (*<Tn hm>)([<Cc tham s>]);
Trong :
Kiu d liu tr v: l cc kiu d liu thng thng ca C++ hoc kiu do ngi dng
t nh ngha.
Tn hm: tn do ngi dng t nh ngha, tun th theo quy tc t tn bin trong C++.
V d khai bo:
int (*Calcul)(int a, int b);
l khai bo mt con tr hm, tn l Calcul, c kiu int v c hai tham s cng l kiu int.
Lu :
18
S dng con tr hm
Con tr hm c dng khi cn gi mt hm nh l tham s ca mt hm khc. Khi , mt hm
c gi phi c khun mu ging vi con tr hm c khai bo.
V d, vi khai bo:
int (*Calcul)(int a, int b);
19
char reply;
cout << Display the string in uppercase or lowercase (u,l): ;
cin >> reply;
if(reply == l)
Display(str, tolower);
else
return;
}
2.4 CP PHT B NH NG
Xt hai trng hp sau y:
Trong c hai trng hp, ta u khng bit thc s con tr pa ang tr n a ch no trong b
nh: trng hp 1 ch ra rng con tr pa ang tr ti mt a ch khng xc nh, nhng li cha
gi tr l 12 do c gn vo. Trng hp 2, con tr pa tr n a ch ngay sau a ch phn t
cui cng ca mng A, cng l mt a ch khng xc nh. Cc a ch khng xc nh ny l
cc a ch nm vng nh t do cn tha ca b nh. Vng nh ny c th b chim dng bi
bt k mt chng trnh no ang chy.
Do , rt c th cc chng trnh khc s chim mt cc a ch m con tr pa ang tr ti. Khi
, nu cc chng trnh thay i gi tr ca a ch , gi tr pa cng b thay i theo m ta
khng th kim sot c. trnh cc ri ro c th gp phi, C++ yu cu phi cp pht b nh
mt cch tng minh cho con tr trc khi s dng chng.
20
V d, khai bo:
int *pa;
pa = new int;
Gii phng b nh ng
a ch ca con tr sau khi c cp pht bi thao tc new s tr thnh vng nh b chim
dng, cc chng trnh khc khng th s dng vng nh ngay c khi ta khng dng con tr
na. tit kim b nh, ta phi hu b vng nh ca con tr ngay sau khi khng dng n con
tr na. C php hu b vng nh ca con tr nh sau:
delete <tn con tr>;
V d:
int *pa = new int(12);
delete pa;
Lu :
delete pa;
// Cho pa tr n a ch ca mng A
// *pa = 12
// pb tr n cng a ch pa.
*pb += 5;
// *pa = *pb = 17
delete pa;
// Gii phng c pa ln pb
21
Mt con tr sau khi cp pht b nh ng bng thao tc new, cn phi phng b nh trc
khi tr n mt a ch mi hoc cp pht b nh mi:
int *pa = new int(12);
// pa c cp b nh v *pa = 12
Trong :
Kiu con tr: Kiu d liu c bn ca C++ hoc l kiu do ngi dng t nh ngha.
V d:
int *A = new int[5];
Khi cp pht b nh cho con tr c khi to thng thng, ta dng du (), khi cp pht
b nh cho mng, ta dng du []. Hai lnh cp pht sau l hon ton khc nhau:
// Cp pht b nh v khi to cho mt con tr int
int *A = new int(5);
// Cp pht b nh cho mt mng 5 phn t kiu int
int *A = new int[5];
V d:
// Cp pht b nh cho mt mng c 5 phn t kiu int
int *A = new int[5];
// Gii phng vng nh do mng A ang chim gi.
delete [] A;
Chng trnh 2.4 minh ho hai th tc khi to v gii phng mt mng ng mt chiu.
Chng trnh 2.4
void InitArray(int *A, int length){
A = new int[length];
for(int i=0; i<length; i++)
22
// cp pht b nh
23
24
TNG KT CHNG 2
Ni dung chng 2 trnh by cc vn lin quan n vic khai bo v s dng con tr v
mng trong ngn ng C++:
Con tr c th tham gia vo cc php ton nh cc bin thng thng bng php ly gi
tr.
25
CU HI V BI TP CHNG 2
1. Trong cc khai bo con tr sau, nhng khai bo no l ng:
a. int A*;
b. *int A;
c. int* A, B;
d. int* A, *B;
e. int *A, *B;
2. Vi khai bo:
int a = 12;
int *pa;
Cc php gn no sau y l hp l:
a. pa = &a;
b. pa = a;
c. *pa = &a;
d. *pa = a;
3. Vi khai bo:
int A[5] = {10, 20, 30, 40, 50};
int *pa = A+2;
Khi , *pa = ?
a. 10
b. 20
c. 30
d. 40
e. 50
4. Vi on chng trnh:
int A[5] = {10, 20, 30, 40, 50};
int *pa = A;
*pa += 2;
Khi , *pa = ?
a. 10
b. 12
c. 30
d. 32
5. Vi on chng trnh:
int A[5] = {10, 20, 30, 40, 50};
int *pa = A;
26
Khi , *pa = ?
a. 10
b. 12
c. 30
d. 32
6. Vi on chng trnh:
int A[5] = {10, 20, 30, 40, 50};
int *pa = A;
pa += 2;
Khi , pa = ?
a. &A[0]
b. A[2]
c. &A[2]
d. Khng xc nh
7. Vi on chng trnh:
int A[5] = {10, 20, 30, 40, 50};
int *pa = A;
pa -= 2;
Khi , pa = ?
a. &A[0]
b. &A[2]
c. &A[4]
d. Khng xc nh
8. Vi on chng trnh:
int A[3][3] = {
{10, 20, 30},
{40, 50, 60},
{70, 80, 90}
};
int *pa;
V ta c ci t mt s hm nh sau:
27
Khi , *pa = ?
a. 10
b. 30
c. 2
d. Khng xc nh
13. Xt on chng trnh sau:
1>
2>
int *pa = A;
3>
pa += 15;
4>
delete pa;
28
14. Vit chng trnh thc hin cc php ton cng, tr, nhn, chia trn a thc. Cc a thc
c biu din bng mng ng mt chiu. Bc ca a thc v cc h s tng ng c
nhp t bn phm.
15. Vit chng trnh thc hin cc php ton cng, tr, nhn hai ma trn kch thc m*n.
Cc ma trn c biu din bng mng ng hai chiu. Gi tr kch c ma trn (m, n) v
gi tr cc phn t ca ma trn c nhp t bn phm.
29
CHNG 3
KIU D LIU CU TRC
Ni dung chng ny tp trung trnh by cc vn lin quan n kiu d liu c cu trc trong
C++:
nh ngha mt cu trc
Mt s kiu d liu tru tng khc nh ngn xp, hng i, danh sch lin kt.
Trong :
Thuc tnh: mi thuc tnh ca cu trc c khai bo nh khai bo mt bin thuc kiu
d liu thng thng, gm c kiu d liu v tn bin tng ng. Mi khai bo thuc tnh
phi kt thc bng du chm phy ; nh mt cu lnh C++ thng thng.
V d, qun l nhn vin ca mt cng ty, khi x l thng tin v mi nhn vin, ta lun phi x
l cc thng tin lin quan nh:
Tn
Tui
Chc v
Lng
30
// Tn nhn vin
int age;
char role[20];
float salary;
};
Lu :
V d, vi kiu cu trc Employee, ta khng quan tm n tui nhn vin na, m quan tm n
ngy sinh ca nhn vin. V ngy sinh cn c cc thng tin lun i vi nhau l ngy sinh, thng
sinh, nm sinh. Do , ta nh ngha mt kiu cu trc con cho kiu ngy sinh:
struct Date{
int day;
int month;
int year;
};
// Tn nhn vin
Date birthDay;
char role[20];
float salary;
};
31
Lu :
Trong nh ngha cc cu trc lng nhau, cu trc con phi c nh ngha trc cu trc
cha m bo cc kiu d liu ca cc thuc tnh ca cu trc cha l tng minh ti thi
im n c nh ngha.
Trong :
V d, mun c kiu d liu c cu trc nhn vin, c tn l Employee, ta dng t kho typedef
nh ngha cu trc nh sau:
typedef struct {
char name[20];
// Tn nhn vin
int age;
char role[20];
float salary;
} Employee;
Trong v d khai bo lng cu trc Employee, dng t kho typedef cho kiu Date:
typedef struct {
int day;
int month;
int year;
} Date;
// Tn nhn vin
Date birthDay;
char role[20];
float salary;
} Employee;
32
Lu :
Khi khng dng t kho typedef, tn cu trc (nm sau t kho struct) c dng khai
bo bin. Trong khi , khi c t kho typedef, tn kiu d liu cu trc (dng cui cng
trong nh ngha) mi c dng khai bo bin.
Khi dng t kho typedef th khng th khai bo bin ng thi vi nh ngha cu trc.
Ngoi ra, ta c th khi to cc gi tr cho cc thuc tnh ca cu trc ngay khi khai bo bng cc
c php sau:
<Tn kiu d liu cu trc> <tn bin> = {
<gi tr thuc tnh 1>,
<gi tr thuc tnh 2>,
Trong :
V d, vi nh ngha cu trc:
typedef struct {
char name[20];
// Tn nhn vin
int age;
char role[20];
float salary;
} Employee;
33
v:
typedef struct {
char name[20];
// Tn nhn vin
Date birthDay;
char role[20];
float salary;
} Employee;
Nhan vien,
300f
};
myEmployee1.age += 1;
// Tng s tui ln 1
i vi kiu cu trc lng nhau, php truy nhp n thuc tnh c thc hin ln lt t cu trc
cha n cu trc con.
V d, vi mt bin cu trc kiu Employee lng nhau:
34
Employee myEmployee1 = {
Nguyen Van A,
{15, 05, 1980},
Nhan vien,
300f
};
myEmployee1.birthDay.day = 16;
myEmployee1.birthDay.month = 07;
Chng trnh 3.1a minh ho vic to lp v s dng cu trc Employee n, khng dng t kho
typedef.
Chng trnh 3.1a
#include<stdio.h>
#include<conio.h>
#include<string.h>
struct Employee{
char name[20];
// Tn nhn vin
int age;
char role[20];
float salary;
};
/* Khai bo khun mu hm */
void Display(Employee myEmployee);
void Display(Employee myEmployee){
cout << Name: << myEmployee.name << endl;
cout << Age: << myEmployee.age << endl;
cout << Role: << myEmployee.role << endl;
cout << Salary: << myEmployee.salary << endl;
return;
}
void main(){
clrscr();
// Hin th gi tr mc nh
Employee myEmployee =
35
Chng trnh 3.1b minh ho vic to lp v s dng cu trc Employee lng nhau, c dng t
kho typedef.
Chng trnh 3.1b
#include<stdio.h>
#include<conio.h>
#include<string.h>
typedef struct {
int day;
int month;
int year;
} Date;
typedef struct {
char name[20];
// Tn nhn vin
Date birthDay;
char role[20];
float salary;
} Employee;
/* Khai bo khun mu hm */
void Display(Employee myEmployee);
36
37
v:
typedef struct {
char name[20];
// Tn nhn vin
Date birthDay;
char role[20];
float salary;
} Employee;
Lu :
38
Sau khi cp pht vng nh cho con tr bng thao tc new, khi con tr khng c dng na, hoc
cn tr sang mt a ch khc, ta phi gii phng vng nh va c cp pht cho con tr bng
thao tc:
delete <Tn bin con tr>;
V d:
Employee *ptrEmployee = new Employee;
delete ptrEmployee;
Lu :
//ng
//li
Cch 2:
(*<Tn bin con tr>).<Tn thuc tnh>;
V d, thuc tnh tn nhn vin ca cu trc Employee c th c truy nhp thng qua hai cch:
Employee *ptrEmployee = new Employee;
cin >> ptrEmployee -> name;
hoc:
39
Lu :
Trong cch truy nhp th hai, phi c du ngoc n () quanh tn con tr v php ton
truy nhp thuc tnh . c u tin cao hn php ton ly gi tr con tr *.
// Tn nhn vin
Date birthDay;
char role[20];
float salary;
} Employee;
/* Khai bo khun mu hm */
void InitStruct(Employee *myEmployee);
void Display(Employee *myEmployee);
void InitStruct(Employee *myEmployee){
myEmployee = new Employee;
cout << Name: ;
cin >> myEmployee->name;
cout << Day of birth: ;
cin >> myEmployee->birthDay.day;
cout << Month of birth: ;
cin >> myEmployee->birthDay.month;
cout << Year of birth: ;
cin >> myEmployee->birthDay.year;
cout << Role: ;
cin >> myEmployee->role;
cout << Salary: ;
40
V d:
Employee employees[10];
V d, khai bo:
Employee *employees;
41
Tuy nhin, cch cp pht b nh ng cho mng cc cu trc khc vi mt con tr. y l cch
chng trnh nhn bit ta ang dng mt con tr cu trc hay mt mng ng c cu trc. C
php cp pht b nh cho mng ng nh sau:
<Tn bin mng> = new <Kiu cu trc>[<S lng phn t>];
V d, khai bo:
Employee *employees = new Employee[10];
Chng trnh 3.3 ci t vic khi to mt mng cc nhn vin ca mt phng trong mt cng ty.
Sau , chng trnh s tm v in ra thng tin v nhn vin c lng cao nht v nhn vin c
lng thp nht trong phng.
Chng trnh 3.3
#include<stdio.h>
#include<conio.h>
#include<string.h>
typedef struct {
int day;
int month;
int year;
} Date;
typedef struct {
char name[20];
// Tn nhn vin
Date birthDay;
char role[20];
float salary;
} Employee;
/* Khai bo khun mu hm */
void InitArray(Employee *myEmployee, int length);
Employee searchSalaryMax(Employee *myEmployee, int length);
Employee searchSalaryMin(Employee *myEmployee, int length);
void Display(Employee myEmployee);
42
43
44
Ngn xp (stack)
Hng i (queue)
3.4.1 Ngn xp
Ngn xp (stack) l mt kiu danh sch cho php thm v bt cc phn t mt u danh sch,
gi l nh ca ngn xp. Ngn xp hot ng theo nguyn l: phn t no c a vo sau, s
c ly ra trc.
V tr nh ca ngn xp
// V tr ca nh
int nodes[SIZE];
} Stack;
// V tr ca nh
int *nodes;
} Stack;
45
// Tng ch s ca node nh
tmpNodes[i] = stack->nodes[i];
tmpNodes[stack->top] = node;
// Thm node mi vo nh
delete [] stack->nodes;
stack->nodes = tmpNodes;
// Tr vo vng nh mi
return;
}
Kim tra xem ngn xp c rng (top = -1) hay khng. Nu khng rng th thc hin cc
bc tip theo.
Ly phn t nh ngn xp ra
Sao chp top phn t t danh sch c sang vng nh mi (tr phn t nh).
Tr v gi tr phn t nh ly ra.
tmpNodes[i] = stack->nodes[i];
46
stack->top --;
// Gim ch s ca node nh
delete [] stack->nodes;
stack->nodes = tmpNodes;
// Tr vo vng nh mi
return result;
// Tr v gi tr node nh
p dng
Ngn xp c s dng trong cc ng dng tho mn nguyn tc: ci no t vo trc s c
ly ra sau. Chng trnh 3.4c minh ho vic dng ngn xp o ngc mt xu k t c nhp
vo t bn phm.
Chng trnh 3.4c
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
typedef struct {
int top;
// V tr node nh
int *nodes;
} Stack;
/* Khai bo nguyn mu hm */
void init(Stack *stack);
void push(Stack *stack, int node);
int pop(Stack *stack);
void release(Stack *stack);
void init(Stack *stack){
stack = new Stack;
stack->top = -1;
}
void push(Stack *stack, int node){
int *tmpNodes = new int[stack->top + 2];// Cp pht vng nh mi
stack->top ++;
// Tng ch s ca node nh
tmpNodes[i] = stack->nodes[i];
tmpNodes[stack->top] = node;
// Thm node mi vo nh
delete [] stack->nodes;
stack->nodes = tmpNodes;
// Tr vo vng nh mi
return;
}
int pop(Stack *stack){
if(stack->top < 0){
47
tmpNodes[i] = stack->nodes[i];
stack->top --;
// Gim ch s ca node nh
delete [] stack->nodes;
stack->nodes = tmpNodes;
// Tr vo vng nh mi
return result;
// Tr v gi tr node nh
}
void release(Stack *stack){
delete [] stack->nodes;
delete stack;
return;
}
void main(){
clrscr();
Stack *stack;
init(stack);
// Khi to ngn xp
char strIn[250];
// Nhp chui k t t bn phm
cout << Nhap chuoi: ;
cin >> strIn;
for(int i=0; i<strlen(strIn); i++)
// t vo ngn xp
push(stack, strIn[i]);
while(stack->top > -1)
// Ly ra t ngn xp
// Gii phng b nh
return;
}
3.4.2 Hng i
Hng i (queue) cng l mt cu trc tuyn tnh cc phn t. Trong , cc phn t lun c
thm vo mt u, gi l u cui hng i, v vic ly ra cc phn t lun c thc hin
u cn li, gi l u mt ca hng i. Hng i hot ng theo nguyn l: phn t no c
a vo trc, s c ly ra trc.
48
// V tr ca nh u, nh cui
int nodes[SIZE];
} Queue;
// V tr ca nh u, nh cui
int *nodes;
} Queue;
Ly mt phn t v tr u ca hng i
// Tng ch s ca node ui
if(queue->front == -1)
// Nu hng i c rng
queue->front = 0;
for(int i=0; i<queue->rear; i++)
// th cp nht front
// Sao chp sang vng nh mi
tmpNodes[i] = queue->nodes[i];
tmpNodes[queue->rear] = node;
// Thm node mi vo ui
delete [] queue->nodes;
queue->nodes = tmpNodes;
// Tr vo vng nh mi
return;
}
49
// Nu c hn 1 phn t
// Nu ch c 1 phn t
queue->front --;
queue->rear --;
// Gim ch s ca node ui
delete [] queue->nodes;
queue->nodes = tmpNodes;
// Tr vo vng nh mi
return result;
// Tr v gi tr node u
p dng
Hng i c p dng trong cc bi ton cn c ch qun l ci no vo trc s c ly ra
trc. Chng trnh 3.5c minh ho c ch qun l tin trnh n gin nht ca h iu hnh: cc
tin trnh c qun l theo m tin trnh, khi xut hin, tin trnh c a vo cui ca mt hng
i. Khi no CPU rnh th s ly tin trnh u hng i ra thc hin.
Chng trnh 3.5c
#include<stdio.h>
#include<conio.h>
typedef struct {
int front, rear;
50
// V tr ca nh u, nh cui
} Queue;
/* Khai bo cc nguyn mu hm */
void init(Queue *queue);
void insert(Queue *queue, int node);
int remove(Queue *queue);
void travese(Queue *queue);
void release(Queue *queue);
void init(Queue *queue){
queue = new Queue;
queue->front = -1;
queue->rear = -1;
return;
}
void insert(Queue *queue, int node){
int *tmpNodes = new int[queue->rear + 2];// Cp pht vng nh mi
queue->rear ++;
// Tng ch s ca node ui
if(queue->front == -1)
// Nu hng i c rng
queue->front = 0;
for(int i=0; i<queue->rear; i++)
// th cp nht front
// Sao chp sang vng nh mi
tmpNodes[i] = queue->nodes[i];
tmpNodes[queue->rear] = node;
// Thm node mi vo ui
delete [] queue->nodes;
queue->nodes = tmpNodes;
// Tr vo vng nh mi
return;
}
int remove(Queue *queue){
if((queue-front < 0)||(queue-rear < 0)){// Kim tra hng i rng
cout << Queue is empty! << endl;
return 0;
}
// Lu gi gi tr phn t u
int result = queue->nodes[queue->front];
int *tmpNodes;
if(queue->rear > 0){
// Nu c hn 1 phn t
// Nu ch c 1 phn t
51
queue->rear --;
// Gim ch s ca node ui
delete [] queue->nodes;
queue->nodes = tmpNodes;
// Tr vo vng nh mi
return result;
// Tr v gi tr node u
}
void travese(Queue *queue){
if(queue->front < 0){
}
void main(){
clrscr();
Queue *queue;
init(queue);
// Khi to hng i
int function;
do{
clrscr();
cout << CAC CHUC NANG: << endl;
cout << 1: Them mot tien trinh vao hang doi << endl;
cout << 2: Dua mot tien trinh trinh vao thuc hien << endl;
cout<<3: Xem tat ca cac tien trinh trong hang doi << endl;
cout << 5: Thoat! << endl;
cout << ========================================= << endl;
cout << Chon chuc nang: << endl;
cin >> function;
switch(function){
case 1:
// Thm vo hng i
int maso;
cout << Ma so tien trinh vao hang doi: ;
52
// Ly ra khi hng i
// Duyt hng i
return;
}
Danh sch lin kt n: mi node c mt con tr tr n node tip theo trong danh sch
Danh sch lin kt kp: mi node c hai con tr, mt tr vo node trc, mt tr vo node
tip theo trong danh sch.
Trong phn ny s trnh by danh sch lin kt n. Danh sch lin kt kp c coi nh l mt
bi tp m rng t danh sch lin kt n.
// Tr n node k tip
};
typedef struct simple SimpleNode;
Node u ca danh sch n c cu trc ring, n khng cha d liu nh node thng m cha
cc thng tin:
53
// S lng cc node
Vic chn thm mt node vo v tr th n trong danh sch c thc hin theo cc bc:
1. Nu n<=0, chn vo u. Nu n>s phn t ca danh sch, chn vo cui. Trng hp
cn li, chn vo gia.
2. Tm node th n: gi vt ca hai node th n-1 v th n.
3. To mt node mi: cho node th n-1 tr tip vo node mi v node mi tr tip vo node
th n.
Chng trnh 3.6a ci t th tc chn mt node vo v tr th n ca danh sch.
Chng trnh 3.6a
void insert(SimpleHeader *list, int position, int value){
SimpleNode *newNode = new SimpleNode;
newNode->value = value;
if(position <= 0){
// Chn vo u ds
newNode->next = list->front;
list->front = newNode;
// Cp nht li node u ds
if(list->nodeNumber == 0)
// Nu ds ban u rng th
list->rear = newNode;
list->rear = newNode;
if(list->nodeNumber == 0)
// Nu ds ban u rng th
list->front = newNode;
}else{
// tm node n-1 v n
prev = curr;
curr = curr->next;
index++;
}
54
newNode->next = curr;
prev->next = newNode;
return;
}
// Khng xo node no c
SimpleNode* result;
if(position == 0){
result = list->front;
// Xo node u
// Gi node cn xo
// Nu ds ch c 1 node th
// Gi node cn xo
curr->next = NULL;
list->rear = curr;
}else{
SimpleNode *prev = list->front, *curr = list->front;
int index = 0;
while(index < position){
// Tm node n-1 v n
prev = curr;
curr = curr->next;
index++;
}
result = curr;
prev->next = curr->next;
// Gi node cn xo
// Cho node n-1 tr n node n+1
}
list->nodeNumber --;
return result;
// Tr v node cn xo
55
p dng
Chng trnh 3.6c minh ho vic dng danh sch lin kt n qun l nhn vin vn phng vi
cc thng tin rt n gin: tn, tui v tin lng ca mi nhn vin.
Chng trnh 3.6c
#include<stdio.h>
#include<conio.h>
#include<string.h>
typedef struct{
char name[25];
// Tn nhn vin
int age;
float salary;
} Employee;
struct simple{
Employee employee;
struct simple *next;
// D liu ca node
// Tr n node k tip
};
typedef struct simple SimpleNode;
typedef struct{
int nodeNumber;
// S lng cc node
// Tr n node u v cui ds
} SimpleHeader;
/* Khai bo cc nguyn mu hm */
void init(SimpleHeader *list);
void insert(SimpleHeader *list, int position, Employee employee);
SimpleNode* remove(SimpleHeader *list);
void travese(SimpleHeader *list);
void release(SimpleHeader *list);
void init(SimpleHeader *list){
list = new list;
list->front = NULL;
list->rear = NULL;
56
// Chn vo u ds
newNode->next = list->front;
list->front = newNode;
// Cp nht li node u ds
if(list->nodeNumber == 0)
// Nu ds ban u rng th
list->rear = newNode;
list->rear = newNode;
// Chn vo gia ds
prev->next = newNode;
}
list->nodeNumber++;
return;
}
SimpleNode* remove(SimpleHeader *list, int position){
if((position < 0)||(position >= list->nodeNumber))
return NULL;
// Khng xo node no c
SimpleNode* result;
if(position == 0){
result = list->front;
// Xo node u
// Gi node cn xo
// Nu ds ch c 1 node th
// Gi node cn xo
57
list->rear = curr;
}else{
SimpleNode *prev = list->front, *curr = list->front;
int index = 0;
while(index < position){// Tm node n-1 v n
prev = curr;
curr = curr->next;
index++;
}
result = curr;
// Gi node cn xo
return result;
// Tr v node cn xo
}
void travese(SimpleHeader *list){
if(list->nodeNumber <= 0){
58
void main(){
clrscr();
SimpleHeader *list;
init(list);
// Khi to ds
int function;
do{
clrscr();
cout << CAC CHUC NANG: << endl;
cout << 1: Them mot nhan vien << endl;
cout << 2: Xoa mot nhan vien << endl;
cout << 3: Xem tat ca cac nhan vien trong phong << endl;
cout << 5: Thoat! << endl;
cout << ======================================= << endl;
cout << Chon chuc nang: << endl;
cin >> function;
switch(function){
case 1:
// Thm vo ds
int position;
Employee employee;
cout << Vi tri can chen: ;
cin >> position;
cout << Ten nhan vien: ;
cin >> employee.name;
cout << Tuoi nhan vien: ;
cin >> employee.age;
cout << Luong nhan vien: ;
cin >> employee.salary;
insert(list, position, employee);
break;
case 2:
// Ly ra khi ds
int position;
cout << Vi tri can xoa: ;
cin >> position;
SimpleNode* result = remove(list, position);
if(result != NULL){
cout << Nhan vien bi loai: << endl;
cout << Ten: << result->employee.name
<< endl;
cout << Tuoi: << result->employee.age
<< endl;
cout << Luong:
<< result->employee.salary << endl;
59
// Duyt ds
// Gii phng ds
return;
}
TNG KT CHNG 3
Ni dung chng 3 trnh by cc vn lin quan n cc kiu d liu c cu trc trong C++:
Khai bo mng cu trc bng con tr cu trc. Cp pht v gii phng vng nh ca mng
ng cc cu trc.
Ci t mt s cu trc c bit:
-
Ngn xp
Hng i
CU HI V BI TP CHNG 3
1. nh ngha mt cu trc sinh vin c tn l Sinhvien, gm c tn v tui sinh vin.
nh ngha no sau y l ng:
a.
struct Sinhvien{
char name[20];
int age;
};
b.
struct {
char name[20];
int age;
} Sinh vien;
60
c.
61
8. Khai bo mt bin c cu trc l Student nh ngha trong bi 7. Sau , thc hin tnh
im trung bnh ca tt c cc mn hc ca hc sinh , v vit mt th tc xp loi hc
sinh da vo im trung bnh cc mn hc:
Nu im tb nh hn 5.0, xp loi km
10. S dng cu trc ngn xp nh ngha trong bi i mt s t kiu thp phn sang
kiu nh phn: Chi s nguyn cho 2, mi cho n khi thng <2, lu cc s d vo ngn
xp. Sau , c cc gi tr d t ngn xp ra, ta s thu c chui nh phn tng ng.
11. M rng cu trc hng i nh ngha trong bi tr thnh hng i c u tin:
12. p dng hng i c u tin trong bi 11 xy dng chng trnh qun l tin trnh
c u tin ca h iu hnh, m rng ng dng trong bi ngn xp.
13. M rng cu trc danh sch lin kt n trong bi thnh danh sch lin kt kp:
62
i vi node header, cng cn 2 con tr: tr n node u tin v node cui cng
ca danh sch
63
Chng 4: Vo ra trn tp
CHNG 4
VO RA TRN TP
Ni dung chng ny tp trung trnh by cc vn lin quan n cc thao tc trn tp d liu
trong ngn ng C++:
Cc thao tc vo ra trn tp
Khai bo bin tp
Trong C++, khi khai bo mt bin tp, ng thi ta s m tp tng ng theo c php tng qut
bng cch dng kiu fstream nh sau:
fstream <Tn bin tp>(<Tn tp>, <Ch m tp>);
Trong :
Tn bin tp: c tnh cht nh mt tn bin thng thng, n s c dng thc hin
cc thao tc vi tp gn vi n. Tn bin tp cng phi tun th theo quy tc t tn bin
trong C++.
V d, khai bo:
fstream myFile(abc.txt, ios::in);
64
Chng 4: Vo ra trn tp
Cc ch m tp tin
Cc ch m tp tin c nh ngha bi cc bt ch th:
ios::in:
M mt tp tin c.
ios::out:
M mt tp tin c sn ghi.
ios::app:
ios::ate:
ios::trunc:
ios::binary:
M mt tp tin ch nh phn.
ios::text:
M mt tp tin ch vn bn.
Lu :
4.1.2 Tp vn bn
m mt tp tin di ch vn bn, ta dng c php sau:
fstream <Tn bin tp>(<Tn tp>, ios::text);
Khi , cc thao tc c, ghi trn bin tp c thc hin theo n v l cc t, c phn cch
bi du trng (space bar) hoc du xung dng (enter).
V d, mun m tp tin baitho.txt di ch vn bn, ta khai bo nh sau:
fstream myBaiTho(baitho.txt, ios::text);
4.1.3 Tp nh phn
m mt tp tin di ch nh phn, ta dng c php sau:
fstream <Tn bin tp>(<Tn tp>, ios::binary);
Khi , cc thao tc c, ghi trn bin tp c thc hin theo n v byte theo kch thc cc
bn ghi (cu trc) c ghi trong tp.
V d, mun m tp tin baitho.txt di ch nh phn, ta khai bo nh sau:
fstream myBaiTho(baitho.txt, ios::binary);
65
Chng 4: Vo ra trn tp
4.2 VO RA TRN TP
4.2.1 Vo ra tp vn bn bng >> v <<
Ghi tp vn bn bng <<
Cc bc thc hin ghi d liu vo mt tp tin nh sau:
1. M tp tin theo ch ghi bng i tng ofstream (m tp tin ch ghi):
ofstream <Tn bin tp>(<Tn tp tin>, ios::out);
Chng trnh dng li khi ngi dng nhp k t e. V tp tin c kt thc bng mt
du xung dng endl.
// di ti a tn tp tin
void main(){
clrscr();
char fileName[length], input;
cout << Ten tep tin: ;
cin >> setw(length) >> fileName;
// Nhp tn tp tin
/* M tp tin */
ofstream fileOut(fileName, ios::out);// Khai bo v m tp tin
if(!fileOut){
// Khng m c tp
cout << Khong the tao duoc tep tin << fileName << endl;
exit(1);
}
/* Ghi d liu vo tp tin */
66
Chng 4: Vo ra trn tp
do{
cin >> input;
// c k t t bn phm
// Ghi k t vo tp tin
}while((input != e)&&(fileOut));
fileOut << endl;
/* ng tp tin */
fileOut.close();
// ng tp tin
return;
}
Chng trnh 4.2 minh ho vic c d liu t tp tin va s dng trong chng trnh 4.1 ra mn
hnh:
// di ti a tn tp tin
void main(){
clrscr();
char fileName[length], output;
cout << Ten tep tin: ;
cin >> setw(length) >> fileName;
// Nhp tn tp tin
/* M tp tin */
67
Chng 4: Vo ra trn tp
ifstream fileIn(fileName, ios::in); // Khai bo v m tp tin
if(!fileIn){
// Khng m c tp
cout << Khong the mo duoc tep tin << fileName << endl;
exit(1);
}
/* c d liu t tp tin ra mn hnh */
while(fileIn){
fileIn >> output;
// c k t t tp tin
// Ghi k t ra mn hnh
}
cout << endl;
/* ng tp tin */
fileIn.close();
// ng tp tin
return;
}
Chng trnh 4.3 minh ho vic copy ton b ni dung ca mt tp tin sang mt tp tin mi:
Tp tin ngun c m ch c.
Tp tin ch c m ch ghi.
// di ti a tn tp tin
void main(){
clrscr();
char sourceFile[length], targetFile[length], data;
cout << Ten tep tin nguon: ;
cin >> setw(length) >> sourceFile;
68
// Nhp tn tp tin ch
Chng 4: Vo ra trn tp
/* M tp tin ngun */
ifstream fileIn(sourceFile, ios::in);// Khai bo v m tp ngun
if(!fileIn){
// Khng m c tp ngun
// Khng m c tp ch
// c k t t tp ngun
// Ghi k t ra tp ch
}
/* ng cc tp tin */
fileIn.close();
// ng tp tin ngun
fileOut.close();
// ng tp tin ch
return;
}
Lu :
V d, on chng trnh:
ofstream myFile(abc.txt, ios::out);
myFile.close();
myFile.open(xyz.txt, ios::out|ios::app);
myFile.close();
s dng bin tp myFile (c kiu ofstream) hai ln: mt ln l dng vi tp tin abc.txt ch m
ghi t u. Mt ln khc l vi tp tin xyz.txt ch m ghi thm vo cui.
69
Chng 4: Vo ra trn tp
Tham s th nht l con tr kiu char tr n vng d liu cn ghi vo tp. V con tr bt
buc c kiu char nn khi mun ghi d liu c kiu khc vo tp, ta dng hm chuyn
kiu:
reinterpret_cast<char *>(<D liu>);
Tham s th hai l kch c d liu c ghi vo tp. Kch c ny c tnh theo byte, nn
thng thng ta dng ton t:
sizeof(<Kiu d liu>);
Lu :
Khi c/ghi d liu c kiu cu trc, ton t sizeof() thc hin chnh xc th cc thnh
vin ca cu trc khng c l kiu con tr. V ton t sizeof() i vi con tr ch cho
kch c ca con tr m khng cho kch c tht ca vng d liu m con tr tr ti.
Chng trnh 4.4 minh ho vic ghi d liu vo tp tin nh phn, d liu l kiu cu trc:
// di ti a tn tp tin
typedef struct {
70
int day;
// Ngy
int month;
// Thng
Chng 4: Vo ra trn tp
int year;
// Nm
} Date;
typedef struct {
char name[20];
// Tn nhn vin
Date birthDay;
char role[20];
float salary;
} Employee;
void main(){
clrscr();
char fileName[length];
// Tn tp tin
// Nhp tn tp tin
int recordNumber;
// S lng bn ghi
/* M tp tin */
// Khai bo v m tp tin
fstream fileOut(fileName, ios::out|ios::binary);
if(!fileOut){
// Khng m c tp
cout << Khong the tao duoc tep tin << fileName << endl;
exit(1);
}
/* Ghi d liu vo tp tin */
Employee myEmployee;
for(int i=0; i<recordNumber; i++){
cout << Ban ghi thu << i+1 << endl;
cout << Name: ;
cin >> myEmployee.name;
// Nhp chc v
71
Chng 4: Vo ra trn tp
cin >> myEmployee.salary;
// Ghi d liu vo tp
fileOut.write(reinterpret_cast<char *>(&myEmployee),
sizeof(Employee));
}
/* ng tp tin */
fileOut.close();
// ng tp tin
return;
}
// di ti a tn tp tin
typedef struct {
int day;
// Ngy
int month;
// Thng
int year;
// Nm
} Date;
72
Chng 4: Vo ra trn tp
typedef struct {
char name[20];
// Tn nhn vin
Date birthDay;
char role[20];
float salary;
} Employee;
void main(){
clrscr();
char fileName[length];
// Tn tp tin
// Nhp tn tp tin
/* M tp tin */
// Khai bo v m tp tin
fstream fileIn(fileName, ios::in|ios::binary);
if(!fileIn){
// Khng m c tp
cout << Khong the mo duoc tep tin << fileName << endl;
exit(1);
}
/* c d liu t tp tin ra mn hnh */
Employee myEmployee;
while(fileIn){
fileIn.read(reinterpret_cast<char *>(&myEmployee),
sizeof(Employee));
// c k t t tp tin
// ng tp tin
return;
}
73
Chng 4: Vo ra trn tp
Sau thao tc truy nhp, con tr tp t ng chuyn n v tr tip theo da vo kch thc
n v d liu c truy nhp.
Cch truy nhp tp tun t c nhc im l bao gi cng phi bt u t u tp tin, i tun t
cho n v tr cn truy nhp. Khi tp tin c kch thc ln th cch truy nhp ny rt tn thi gian.
trnh nhc im ny, C++ cho php truy nhp trc tip n mt v tr xc nh trn tp tin
bng cc php ton:
Chng trnh 4.6a minh ho vic xc nh v tr hin thi ca con tr tp sau mt s thao tc c
tp trc .
Chng trnh 4.6a
#include<stdlib.h>
#include<iostream.h>
#include<fstream.h>
#include<conio.h>
const int length = 25;
// di ti a tn tp tin
void main(){
clrscr();
char fileName[length], output;
cout << Ten tep tin: ;
cin >> setw(length) >> fileName;
74
// Nhp tn tp tin
Chng 4: Vo ra trn tp
/* M tp tin */
ifstream fileIn(fileName, ios::in); // Khai bo v m tp tin
if(!fileIn){
// Khng m c tp
cout << Khong the mo duoc tep tin << fileName << endl;
exit(1);
}
/* c d liu t tp tin ra mn hnh
*
int index = 0;
while(fileIn){
fileIn >> output;
// c k t t tp tin
// Ghi k t ra mn hnh
if(index % 5 == 0)
// Ghi ra v tr con tr tp
/* ng tp tin */
fileIn.close();
// ng tp tin
return;
}
Chng trnh 4.6b minh ho vic xc nh v tr hin thi ca con tr tp sau mt s thao tc ghi
vo tp trc .
Chng trnh 4.6b
#include<stdlib.h>
#include<iostream.h>
#include<fstream.h>
#include<conio.h>
const int length = 25;
// di ti a tn tp tin
void main(){
clrscr();
char fileName[length], input;
cout << Ten tep tin: ;
cin >> setw(length) >> fileName;
// Nhp tn tp tin
75
Chng 4: Vo ra trn tp
/* M tp tin */
ofstream fileOut(fileName, ios::out);// Khai bo v m tp tin
if(!fileOut){
// Khng m c tp
cout << Khong the tao duoc tep tin << fileName << endl;
exit(1);
}
/* Ghi d liu vo tp tin
*
int index = 0;
do{
cin >> input;
// c k t t bn phm
// Ghi k t vo tp tin
if(index%5 == 0)
// Hin th v tr con tr tp
/* ng tp tin */
fileOut.close();
// ng tp tin
return;
}
Trong :
76
Chng 4: Vo ra trn tp
V d:
ifstream fileIn(abc.txt, ios::in);
fileIn.seekg(sizeof(char)*7, ios::beg);
s dch chuyn con tr tp tin n k t (kiu char) th 7+1 = 8 trong tp tin abc.txt c (gi s
tp tin abc.txt lu cc k t kiu char).
Lu :
V khong cch cch dch chuyn c kiu s nguyn (int) cho nn c th nhn gi tr m
hoc dng. Nu gi tr dng, dch chuyn v pha sau v tr lm mc, nu gi tr m,
dch chuyn v pha trc v tr lm mc.
Chng trnh 4.7 ci t chng trnh truy nhp tp tin trc tip c gi tr k t (kiu char)
trong tp:
Sau , mi khi ngi dng nhp vo mt s nguyn, chng trnh s dch chuyn n v
tr mi, cch v tr c ng bng tng y k t, tnh t v tr hin thi ca con tr tp.
// di ti a tn tp tin
void main(){
clrscr();
char fileName[length], output;
cout << Ten tep tin: ;
cin >> setw(length) >> fileName;
// Nhp tn tp tin
/* M tp tin */
ifstream fileIn(fileName, ios::in); // Khai bo v m tp tin
if(!fileIn){
// Khng m c tp
cout << Khong the mo duoc tep tin << fileName << endl;
exit(1);
}
/* c d liu t tp tin ra mn hnh
*
77
Chng 4: Vo ra trn tp
int index = 1;
do{
cout << So ki tu dich chuyen: ;
cin >> index;
// Dch chuyn con tr tp t v tr hin thi
fileIn.seekg(sizeof(char)*index, ios::cur);
if(fileIn){
fileIn >> output;
// ng
// c k t t tp tin
// Ghi k t ra mn hnh
cout << Vi tri: << fileIn.tellg() << output;
}else{
fileIn.clear();
// Ra khi phm vi tp
// V v tr u tp
}
}while(index);
/* ng tp tin */
fileIn.close();
// ng tp tin
return;
}
TNG KT CHNG 4
Ni dung chng 4 tp trung trnh by cc vn lin quan n cc thao tc trn tp tin trong
ngn ng C++. Bao gm:
78
M tp tin
ng tp tin
Chng 4: Vo ra trn tp
CU HI V BI TP CHNG 4
1. Mun m mt tp tin tn l abc.txt c d liu, lnh m tp no sau y l ng:
a. fstream
myFile(abc.txt, ios::in);
b. fstream
myFile(abc.txt, ios::out);
c.
d.
2. Mun m mt tp tin abc.txt nm trong th mc xyz ghi d liu vo. Lnh m no sau
y l ng:
a. fstream
myFile(xyz\abc.txt, ios::out);
b. fstream
myFile(xyz\\abc.txt, ios::out);
c.
d.
3. Mun m mt tp tin abc.txt ghi thm d liu vo cui tp, lnh no sau y l ng:
a. fstream
myFile(abc.txt, ios::out);
b. fstream
myFile(abc.txt, ios::app);
c.
d.
Chng trnh s lm g?
a. Ghi ra mn hnh dng ch abc.txt
b. Ghi vo tp tin abc.txt dng ch abc.txt
c. c t tp tin abc.txt dng ch abc.txt
79
Chng 4: Vo ra trn tp
80
Chng 4: Vo ra trn tp
b. 1
c. 8
d. 16
11. Xt on chng trnh sau, nu tp abc.txt cha mt s lng k t ln:
ifstream myFile(abc.txt, ios::in);
if(myFile){
myFile.seekg(sizeof(char)*5, ios::beg);
myFile.seekg(sizeof(char)*5, ios::cur);
cout << myFile.tellg();
}
81
Chng 5: Lp
CHNG 5
LP
Ni dung chng ny tp trung trnh by cc vn lin quan n lp i tng trong C++:
Trong :
V d:
class Car{
};
// nh ngha ng
};
nhng:
Class Car{
};
82
// Li t kha
Chng 5: Lp
Trong :
Sau , ta c th s dng bin myCar trong chng trnh nh cc bin thng thng: truyn tham
s cho hm, gn cho bin khc
Lu :
Khi khai bo bin lp, ta khng dng li t kha class na. T kha class ch c s
dng khi nh ngha lp m khng dng khi khai bo bin lp.
V d, khai bo:
Car myCar;
// ng
// Li c php
l sai c php.
Trong :
83
Chng 5: Lp
Trong :
Tn thuc tnh: l tn thuc tnh ca lp, c tnh cht nh mt bin thng thng. Tn
thuc tnh phi tun theo quy tc t tn bin ca C++.
V d, khai bo:
class Car{
private:
int speed;
public:
char mark[20];
};
l khai bo mt lp xe t (Car), c hai thuc tnh: thuc tnh tc (speed) c tnh cht private,
thuc tnh nhn hiu xe (mark) c tnh cht public.
Lu :
Khng c khi to gi tr ban u cho cc thuc tnh ngay trong lp. V cc thuc tnh
ch c gi tr khi n gn vi mt i tng c th, l mt th hin (bin) ca lp.
V d:
class Car{
private:
int speed;
// ng
84
Chng 5: Lp
};
Kh nng truy nhp thuc tnh ca lp l ph thuc vo thuc tnh y c khai bo trong
phm vi ca t kha no: private, protected hay public.
Nu thuc tnh c dng bn ngoi phm vi lp, c php phi thng qua tn bin lp
(cch ny ch s dng c vi cc bin c tnh cht public):
<Tn bin lp>.<tn thuc tnh>;
V d, vi nh ngha lp:
class Car{
private:
int speed;
public:
char mark[20];
};
Lu :
Khi dng thuc tnh bn trong cc phng thc ca lp, m tn thuc tnh li b trng vi
tn bin ton cc (t do) ca chng trnh, ta phi ch r vic dng tn thuc tnh ca lp
(m khng phi tn bin ton cc) bng cch dng ch th phm vi lp :: vi c php:
<Tn lp>::<Tn thuc tnh>;
Trong :
85
Chng 5: Lp
Tn phng thc: do ngi dng t t tn, tun theo quy tc t tn bin ca C++.
V d, khai bo:
class Car{
private:
int speed;
char mark[20];
public:
void show();
};
l nh ngha mt lp Car c hai thuc tnh cc b l speed v mark, v khai bo mt phng thc
show() m t i tng xe tng ng. Show() l mt phng thc khng cn tham s v kiu
tr v l void.
Lu :
Kh nng truy nhp phng thc t bn ngoi l ph thuc vo phng thc c khai
bo trong phm vi ca t kha no: private, protected hay public.
speed;
// Tc
char
mark[20];
// Nhn hiu
public:
void show(){
86
Chng 5: Lp
<< speed << km/h! << endl;
return;
}
};
speed;
// Tc
char
mark[20];
// Nhn hiu
public:
void show();
// Gii thiu xe
};
/* Khai bo phng thc bn ngoi lp */
void Car::show(){
cout << This is a << mark << having a speed of
<< speed << km/h! << endl;
return;
}
Lu :
Thng thng, ch cc phng thc ngn (trn mt dng) l nn ci t ngay trong lp.
Cn li nn ci t cc phng thc bn ngoi lp chng trnh c sng sa, r rng
v d theo di.
Nu phng thc c dng bn ngoi phm vi lp, c php phi thng qua tn bin lp
(cch ny ch s dng c vi cc phng thc c tnh cht public):
<Tn bin lp>.<Tn phng thc>([<Cc i s>]);
V d, vi nh ngha lp:
class Car{
private:
int
speed;
// Tc
char
mark[20];
// Nhn hiu
public:
void show();
// Gii thiu xe
87
Chng 5: Lp
};
/* Khai bo phng thc bn ngoi lp */
void Car::show(){
cout << This is a << mark << having a speed of
<< speed << km/h! << endl;
return;
}
Lu :
Khi dng phng thc bn trong cc phng thc khc ca lp, m phng thc li b
trng vi cc phng thc t do ca chng trnh, ta phi ch r vic dng phng thc
ca lp (m khng phi dng phng thc t do) bng cch dng ch th phm vi lp ::
vi c php:
<Tn lp>::<Tn phng thc>([<Cc i s>]);
Tc xe (speed)
Gi xe (price)
speed;
// Tc
char
mark[20];
// Nhn hiu
float price;
// Gi xe
public:
void
88
setSpeed(int);
// Gn tc cho xe
Chng 5: Lp
int
getSpeed();
// c tc xe
void
setMark(char);
// Gn nhn cho xe
char[] getMark();
// c nhn xe
void
// Gn gi cho xe
setPrice(float);
float getPrice();
// c gi xe
void
void
show();
// Gii thiu xe
};
/* Khai bo phng thc bn ngoi lp */
void Car::setSpeed(int speedIn){
// Gn tc cho xe
speed = speedIn;
}
int Car::getSpeed(){
// c tc xe
return speed;
}
void Car::setMark(char markIn){
// Gn nhn cho xe
strcpy(mark, markIn);
}
char[] Car::getMark(){
// c nhn xe
return mark;
}
void Car::setPrice(float priceIn){
// Gn gi cho xe
price = priceIn;
}
float Car::getPrice(){
// c gi xe
return price;
}
void Car::init(int speedIn, char markIn[], float priceIn){
speed = speedIn;
strcpy(mark, markIn);
price = priceIn;
return;
}
void Car::show(){
89
Chng 5: Lp
void main(){
clrscr();
Car myCar;
// Khai bo bin lp
// Khi to ln th nht
cout << Xe thu nhat: << endl;
myCar.init(100, Ford, 3000);
cout << Toc do (km/h): << myCar.getSpeed() << endl;
cout << Nhan hieu : << myCar.getMark() << endl;
cout << Gia ($): << myCar.getPrice() << endl;
// Thay i thuc tnh xe
cout << Xe thu hai: << endl;
myCar.setSpeed(150);
myCar.setMark(Mercedes);
myCar.setPrice(5000);
myCar.show();
return;
}
90
Phm vi khi lnh: Trong phm vi gia hai du gii hn {} ca mt khi lnh. V d
cc lnh trong khi lnh lp while(){} s c cng phm vi khi lnh.
Phm vi chng trnh (cn gi l phm vi tp): Cc lp, cc hm, cc bin c khai
bo v nh ngha trong cng mt tp chng trnh th c cng phm vi chng trnh.
Chng 5: Lp
Trong phm vi truy nhp lp, ta ch quan tm n hai phm vi ln nht, l phm vi lp v
phm vi chng trnh. Trong C++, phm vi truy nhp lp c quy nh bi cc t kha v thuc
tnh truy nhp:
protected: Trong cng mt lp, thuc tnh protected cng c nh hng tng t nh
thuc tnh private: cc thnh phn lp c thuc tnh protected ch c th c truy nhp
trong phm vi lp. Ngoi ra n cn c th c truy nhp trong cc lp con khi c k tha
(s c trnh by trong chng 6).
public: cc thnh phn lp c thuc tnh public th c th c truy nhp trong phm vi
chng trnh, c ngha l n c th c truy nhp trong cc hm t do, cc phng thc
bn trong cc lp khc
V d, thuc tnh price ca lp Car c tnh cht private nn ch c th truy nhp bi cc phng
thc ca lp Car. Khng th truy nhp t bn ngoi lp (phm vi chng trnh), chng hn trong
mt hm t do ngoi lp Car.
void Car::setPrice(float priceIn){
price = priceIn;
nhng:
void freeFunction(Car myCar){
myCar.price = 3000;// Li, v freeFunction l mt hm t do
// nm ngoi phm vi lp Car
}
Khi , hm freeFunction phi truy nhp gin tip n thuc tnh price thng qua phng thc
truy nhp c tnh cht public nh sau:
void freeFunction(Car myCar){
myCar.setPrice(3000);// ng, v setPrice l mt phng thc
ca
// lp Car c thuc tnh public
}
Tuy nhin, C++ cho php mt cch c bit truy nhp n cc thnh phn private v protected
ca mt lp bng khi nim hm bn v lp bn ca mt lp: trong cc hm bn v lp bn ca
mt lp, c th truy nhp n cc thnh phn private v protected nh bn trong phm vi lp .
5.3.2 Hm bn
C hai kiu hm bn c bn trong C++:
Mt hm t do l hm bn ca mt lp
Mt hm l bn ca nhiu lp
91
Chng 5: Lp
Hm t do bn ca mt lp
Mt hm bn ca mt lp c khai bo bng t kha friend khi khai bo khun mu hm trong
lp tng ng.
class <Tn lp>{
// Khai bo hm bn
friend <Kiu tr v> <Tn hm bn>([<Cc tham s>]);
};
Lu :
Trong hm bn, c th truy nhp trc tip n cc thnh phn private v protected ca i
tng c kiu lp m n lm bn (truy nhp thng qua i tng c th).
Chng trnh 5.2 minh ha vic nh ngha mt hm bn ca lp Car, hm ny so snh xem hai
chic xe, chic no t hn.
Chng trnh 5.2
#include<stdio.h>
#include<conio.h>
#include<string.h>
/* nh ngha lp */
class Car{
private:
int
speed;
// Tc
char
mark[20];
// Nhn hiu
float price;
// Gi xe
public:
void
// Khai bo hm bn ca lp
friend void moreExpensive(Car, Car);
};
92
Chng 5: Lp
// Khai bo bin lp
// S dng hm bn t do
return;
}
93
Chng 5: Lp
class A;
void f(A);
};
Lu :
// Khai bo nguyn mu lp
/* nh ngha lp Person */
class Person{
private:
94
char
name[25];
// Tn
int
age;
// Tui
Chng 5: Lp
public:
void init(char[], int);
int permission(Car);
// Xc nh quyn iu khin xe
};
/* nh ngha lp Car */
class Car{
private:
int
speed;
// Tc
char
mark[20];
// Nhn hiu
float price;
// Gi xe
public:
void
// Khai bo hm bn ca lp
friend int Person::permission(Car);
};
/* Khai bo phng thc bn ngoi lp */
void Person::init(char nameIn[], int ageIn){
strcpy(name, nameIn);
age = ageIn;
return;
}
void Car::init(int speedIn, char markIn[], float priceIn){
speed = speedIn;
strcpy(mark, markIn);
price = priceIn;
return;
}
/* nh ngha hm bn */
int Person::permission(Car car){
if(age < 18)
return 0;
//Truy nhp thuc tnh private thng qua i tng car
if((age < 21)&&(car.speed > 150))
return 0;
return 1;
}
// Hm main, chng trnh chnh
void main(){
95
Chng 5: Lp
clrscr();
// Khai bo cc bin lp
Car car;
Person person;
// Khi to cc i tng
car.init(100, Ford, 3000);
person.init(Vinh, 20);
// Xc nh quyn iu khin xe
if(person.permission(car))
// S dng hm bn
5.3.3 Lp bn
Khi tt cc cc phng thc ca mt lp l bn ca mt lp khc, th lp ca cc phng thc
cng tr thnh lp bn ca lp kia. Mun khai bo mt lp B l lp bn ca lp A, ta khai bo
theo tun t sau:
Khai bo khun mu lp B:
class B;
// Khai bo lp bn B
friend class B;
};
};
Lu :
96
Chng 5: Lp
5.4 HM KHI TO V HU B
5.4.1 Hm khi to
Hm khi to c gi mi khi khai bo mt i tng ca lp. Ngay c khi khng c khai bo
tng minh, C++ cng gi hm khi to ngm nh khi i tng c khai bo.
Khai bo hm khi to
Hm khi to ca mt lp c khai bo tng minh theo c php sau:
class <Tn lp>{
public:
<Tn lp>([<Cc tham s>]);
// Khai bo hm khi to
};
V d:
class Car{
int
speed;
char
mark[20];
float price;
public:
Car(int speedIn, char markIn[], float priceIn){
speed = speedIn;
strcpy(mark, markIn);
price = priceIn;
}
};
Hm khi to khng c gi tr tr v
S dng hm khi to ca lp
Hm khi to c s dng khi khai bo bin lp. Khi , ta c th va khai bo, va khi to gi
tr cc thuc tnh ca i tng lp theo c php sau:
<Tn lp> <Tn i tng>([<Cc i s khi to>]);
Trong :
97
Chng 5: Lp
V d, nu lp Car c hm khi to Car(int, char[], float) th khi khai bo bin c kiu lp Car, ta
c th s dng hm khi to ny nh sau:
Car myCar(100, Ford, 3000);
Lu :
// Khai bo li
Chng trnh 5.4a minh ha vic nh ngha v s dng lp Car vi hai hm khi to khc nhau.
Chng trnh 5.4a
#include<stdio.h>
#include<conio.h>
#include<string.h>
/* nh ngha lp */
class Car{
private:
int
speed;
// Tc
char
mark[20];
// Nhn hiu
float price;
// Gi xe
public:
Car();
98
show();
// Gii thiu xe
Chng 5: Lp
/* Khai bo phng thc bn ngoi lp */
Car::Car(){
speed = 0;
strcpy(mark, );
price = 0;
}
// Khi to c y tham s
Car::Car(int speedIn, char markIn[], float priceIn){
speed = speedIn;
strcpy(mark, markIn);
price = priceIn;
}
void Car::show(){
Xe thu hai:
This is a Mercedes having a speed of 150km/h and its price is $5000
99
Chng 5: Lp
speed;
// Tc
char
mark[20];
// Nhn hiu
float price;
// Gi xe
public:
// Khi to vi cc gi tr ngm inh cho cc tham s
Car(int speedIn=0, char markIn[]=, float priceIn=0);
void
show();
// Gii thiu xe
};
/* Khai bo phng thc bn ngoi lp */
Car::Car(int speedIn, char markIn[], float priceIn){
speed = speedIn;
strcpy(mark, markIn);
price = priceIn;
}
void Car::show(){
100
// Cc tham s nhn gi tr mc nh
Chng 5: Lp
Car myCar2(150, Mercedes, 5000);// Dng hm khi to tham s
// Gii thiu xe th nht
cout << Xe thu nhat: << endl;
myCar1.show();
// Gii thiu xe th hai
cout << Xe thu hai: << endl;
myCar2.show();
return;
}
5.4.2 Hm hy b
Hm hy b c t ng gi n khi m i tng c gii phng khi b nh. Nhim v ca
hm hy b l dn dp b nh trc khi i tng b gii phng. C php khai bo hm hy b
nh sau:
class <Tn lp>{
public:
~<Tn lp>([<Cc tham s>]);
// Khai bo hm khi to
};
V d:
class Car{
int
speed;
char
*mark;
float price;
public:
~Car(){
delete [] mark;
};
};
Hm hy b khng c gi tr tr v.
101
Chng 5: Lp
speed;
// Tc
char
*mark;
// Nhn hiu
float price;
// Gi xe
public:
// Khi to vi cc gi tr ngm inh cho cc tham s
Car(int speedIn=0, char *markIn=NULL, float priceIn=0);
void
show();
~Car();
// Gii thiu xe
// Hm hy b tng minh
};
/* Khai bo phng thc bn ngoi lp */
Car::Car(int speedIn, char *markIn, float priceIn){
speed = speedIn;
mark = markIn;
price = priceIn;
}
void Car::show(){
// Hm hy b tng minh
delete [] mark;
cout << The object has been destroyed! << endl;
}
102
Chng 5: Lp
// Hm main, chng trnh chnh
void main(){
clrscr();
Car myCar(150, Mercedes, 5000);// Dng hm khi to tham s
// Gii thiu xe
cout << Gioi thieu xe: << endl;
myCar.show();
return;
}
103
Chng 5: Lp
Lu :
Tr n a ch ca mt i tng cng lp
Khi mun truy nhp n cc thnh phn ca con tr i tng, ta dng c php sau:
<Tn con tr i tng> -> <Tn thnh phn lp>([<Cc i s>]);
V d, on chng trnh sau s thc hin phng thc gii thiu xe ca lp Car thng qua con
tr ptrCar:
Car *ptrCar = new Car(100, Ford,3000);
ptrCar->show();
Lu :
104
Cc quy tc phm vi truy nhp vn p dng trong truy nhp cc thnh phn lp thng qua
con tr.
Chng 5: Lp
V d:
Car *ptrCar = new Car();// Khai bo v cp pht b nh
delete ptrCar;
Lu :
// ng.
// Khng c
Chng trnh 5.6 minh ha vic dng con tr i tng c kiu lp l Car.
Chng trnh 5.6
#include<stdio.h>
#include<conio.h>
#include<string.h>
/* nh ngha lp */
class Car{
private:
int
speed;
// Tc
char
mark[20];
// Nhn hiu
float price;
// Gi xe
public:
// Khi to vi cc gi tr ngm inh cho cc tham s
Car(int speedIn=0, char markIn[]=, float priceIn=0);
void
show();
// Gii thiu xe
};
/* Khai bo phng thc bn ngoi lp */
Car::Car(int speedIn, char markIn[], float priceIn){
speed = speedIn;
strcpy(mark, markIn);
price = priceIn;
105
Chng 5: Lp
}
void Car::show(){
V d:
Car cars[10];
106
Chng 5: Lp
V d:
Car *cars = new Car[10];
Sau khi c s dng, mng ng cc i tng cng cn phi gii phng b nh:
delete [] <Tn bin mng ng>;
V d:
Car *cars = new Car[10];// Khai bo v cp pht ng
delete [] cars;
V d:
Car cars[10];
cars[5].show();
s thc hin phng thc show() ca i tng c ch s th 5 (tnh t ch s 0) trong mng cars.
Chng trnh 5.7 s ci t mt chng trnh, trong nhp vo di mng, sau yu cu
ngi dng nhp thng tin v mng cc xe. Cui cng, chng trnh s tm kim v hin th thng
tin v chic xe c gi t nht trong mng.
Chng trnh 5.7
#include<stdio.h>
#include<conio.h>
#include<string.h>
/* nh ngha lp Car */
class Car{
private:
int
speed;
// Tc
char
mark[20];
// Nhn hiu
float price;
// Gi xe
public:
void
setSpeed(int);
// Gn tc cho xe
107
Chng 5: Lp
int
getSpeed();
// c tc xe
void
setMark(char);
// Gn nhn cho xe
char[] getMark();
// c nhn xe
void
// Gn gi cho xe
setPrice(float);
float getPrice();
// c gi xe
show();
// Gii thiu xe
};
/* Khai bo phng thc bn ngoi lp */
Car::Car(int speedIn, char markIn[], float priceIn){
speed = speedIn;
strcpy(mark, markIn);
price = priceIn;
}
void Car::setSpeed(int speedIn){
// Gn tc cho xe
speed = speedIn;
}
int Car::getSpeed(){
// c tc xe
return speed;
}
void Car::setMark(char markIn){
// Gn nhn cho xe
strcpy(mark, markIn);
}
char[] Car::getMark(){
// c nhn xe
return mark;
}
void Car::setPrice(float priceIn){
// Gn gi cho xe
price = priceIn;
}
float Car::getPrice(){
// c gi xe
return price;
}
void Car::show(){
108
Chng 5: Lp
void main(){
clrscr();
int length;
// Chiu di mng
float maxPrice = 0;
// Gi t nht
int index = 0;
// Ch s ca xe t nht
Car *cars;
// (Bin tm) tc
char mark[20];
float price;
// (Bin tm) gi xe
// Nhp tc
// Nhp nhn xe
// Nhp gi xe
break;
}
// Gii phng b nh ca mng
delete [] cars;
return;
109
Chng 5: Lp
}
TNG KT CHNG 5
Ni dung chng 5 tp trung trnh by cc vn c bn v lp i tng trong ngn ng
C++:
Khai bo, nh ngha cc thuc tnh v cc phng thc ca lp: nh ngha cc phng
thc trong hoc ngoi phm vi khai bo lp
Khai bo phm vi truy nhp lp bng cc t kha ch phm vi: private, protected v
public. Gii thiu cc kiu hm c th truy nhp phm vi bt quy tc: hm bn v lp bn
vi t kha friend.
Khai bo, nh ngha tng minh hm khi to ca lp v s dng khi khai bo bin lp
Khai bo, nh ngha tng minh hm hy b ca lp, nhm dn dp, gii phng b nh
trc khi i tng b gii phng khi b nh.
Khai bo, cp pht b nh, s dng v gii phng b nh cho con tr i tng
Khai bo, cp pht b nh ng, s dng v gii phng vng nh ca mng cc i tng.
CU HI V BI TP CHNG 5
1. Trong cc khai bo lp sau, nhng khai bo no l ng:
a. class MyClass;
b. Class MyClass;
c. class MyClass{};
d. Class MyClass{};
2. Gi s ta nh ngha lp MyClass, by gi ta khai bo mt i tng thuc kiu lp
ny. Khai bo no l ng:
a. class MyClass me;
b. MyClass me;
c. MyClass me();
d. MyClass me{};
3. Trong cc khai bo thuc tnh ngay trong phm vi ca khai bo lp nh sau, nhng khai
bo no l ng:
a. int myAge;
b. private int myAge;
c. public int myAge;
d. private: int myAge;
110
Chng 5: Lp
4. Trong cc khai bo phng thc ngay trong phm vi ca khai bo lp MyClass nh sau,
nhng khai bo no l ng:
a. public: void show();
b. void show();
c. void show(){cout << hello!;};
d. void MyClass::show(){cout << hello!;}
5. Xt on chng trnh sau:
class MyClass{
int age;
public:
int getAge();
};
MyClass me;
Khi , trong cc lnh sau, lnh no c th thm vo cui on chng trnh trn:
a. cout << MyClass::age;
b. cout << me.age;
c. cout << me.getAge();
d. cin >> me.age;
6. Trong cc khai bo hm khi to cho lp MyClass nh sau, nhng khai bo no l ng:
a. myClass();
b. MyClass();
c. MyClass(MyClass);
d. void MyClas();
e. MyClass MyClass();
7. Trong cc khai bo hm hy b cho lp MyClass nh sau, nhng khai bo no l ng:
a. ~myClass();
b. ~MyClass();
c. ~MyClass(MyClass);
d. void ~MyClas();
e. MyClass ~MyClass();
8. Gi s ta khai bo lp MyClass c mt thuc tnh age v mt hm khi to:
class MyClass{
int age;
public:
MyClass(MyClass me){
};
int getAge(){return age};
};
111
Chng 5: Lp
Trong cc dng lnh sau, nhng dng no c th xut hin trong hm khi to trn:
a. age = MyClass.age;
b. age = me.age;
c. age = MyClass.getAge();
d. age = me.getAge();
e. age = 10;
9. Xt khai bo lp nh sau:
class MyClass{
public:
MyClass(MyClass);
MyClass(int);
};
112
Chng 5: Lp
14. Vit mt hm khi to khng c tham s cho lp Employee trong bi 13, cc thuc tnh
ca lp nhn gi tr mc nh:
-
22. Vit mt chng trnh nhp d liu cho mt mng ng cc i tng ca lp Employee
trong bi 17. Chiu di mng ng cng c nhp t bn phm.
113
Chng 5: Lp
23. Vit mt chng trnh tm kim trn mng ng c xy dng trong bi 22: tm kim
v gii thiu v nhn vin tr nht v nhn vin gi nht trong mng .
24. Vit mt chng trnh tm kim trn mng ng c xy dng trong bi 22: tm kim
v gii thiu v nhn vin c lng cao nht v nhn vin c lng thp nht trong mng
.
25. Vit mt chng trnh tm kim trn mng ng c xy dng trong bi 22: tm kim
v gii thiu v nhn vin c tn xc nh, do ngi dng nhp t bn phm.
114
CHNG 6
TNH K THA V A HNH
Ni dung chng ny tp trung trnh by cc vn lin quan n tnh k tha v tng ng bi
(a hnh) trong ngn ng C++:
ng gi d liu, c th hin bng cch dng khi nim lp biu din i tng vi
cc thuc tnh private, ch cho php bn ngoi truy nhp vo thng qua cc phng thc
get/set.
Dng li m, th hin bng vic tha k gia cc lp. Vic tha k cho php cc lp tha
k (gi l lp dn xut) s dng li cc phng thc c nh ngha trong cc lp gc
(gi l lp c s).
};
Trong :
V d:
class Bus: public Car{
};
115
l khai bo mt lp Bus (xe but) k tha t lp Car (xe t) vi tnh cht k tha l public.
Dn xut private
Dn xut private quy nh phm vi truy nhp nh sau:
Dn xut protected
Dn xut protected quy nh phm vi truy nhp nh sau:
Dn xut public
Dn xut public quy nh phm vi truy nhp nh sau:
116
Tnh cht lp c s
private
protected
public
protected
private
public
private
private
protected
protected
public
protected
private
protected
protected
public
public
};
};
V d:
Bus():Car(){
117
};
C th thay bng:
Bus(){
};
Chng trnh 6.1 nh ngha lp Car c 3 thuc tnh vi hai hm khi to, sau nh ngha lp
Bus c thm thuc tnh label l s hiu ca tuyn xe but. Lp Bus s c ci t hai hm khi
to tng minh, gi n hai hm khi to tng ng ca lp Car.
Chng trnh 6.1
#include<string.h>
/* nh ngha lp Car */
class Car{
int
speed;
// Tc
char
mark[20];
// Nhn hiu
float price;
// Gi xe
public:
Car();
// Khi to tham s
};
Car::Car(){
speed = 0;
strcpy(mark, );
price = 0;
}
// Khi to tham s
Car::Car(int speedIn, char markIn[], float priceIn){
speed = speedIn;
strcpy(mark, markIn);
price = priceIn;
}
/* nh ngha lp Bus k tha t lp Car */
118
// S hiu tuyn xe
public:
Bus();
label = 0;
}
// Khi to tham s
Bus::Bus(int sIn, char mIn[], float pIn, int lIn):Car(sIn, mIn, pIn){
label = lIn;
}
Trong hm khi to ca lp Bus, mun khi to cc thuc tnh ca lp Car, ta phi khi to gin
tip thng qua hm khi to ca lp Car m khng th gn gi tr trc tip cho cc thuc tnh
speed, mark v price. L do l cc thuc tnh ny c tnh cht private, nn lp dn xut khng th
truy nhp trc tip n chng.
Lu :
Ngay c khi lp dn xut khng nh ngha tng minh hm hy b (do khng cn thit)
m lp c s li c nh ngha tng minh. Chng trnh vn gi hm hy b ngm nh
ca lp dn xut, sau vn gi hm hy b tng minh ca lp c s.
Chng trnh 6.2 ci t lp Bus k tha t lp Car: lp Car c mt thuc tnh c dng con tr
nn cn gii phng bng hm hy b tng minh. Lp Bus c thm mt thuc tnh c dng con
119
*mark;
// Nhn hiu xe
public:
~Car();
// Hy b tng minh
};
Car::~Car(){
// Hy b tng minh
delete [] mark;
}
/* nh ngha lp Bus k tha t lp Car */
class Bus: public Car{
char *voyage[];
public:
~Bus();
// Hy b tng minh
};
Bus::~Bus(){
// Hy b tng minh
delete [] voyage;
}
120
Tnh cht lp c s
private
protected
private
protected
public
public
private
private
protected
protected
public
protected
private
protected
protected
public
public
121
Kiu dn xut
Tnh cht lp c
s
private
protected
public
Tnh cht lp
dn xut
Truy nhp t hm
bn ca lp dn
xut
Truy nhp t i
tng ca lp dn
xut
private
---
---
---
protected
private
ok
---
public
private
ok
---
private
---
---
---
protected
protected
ok
---
public
protected
ok
---
private
---
---
---
protected
protected
ok
---
public
public
ok
ok
i vi con tr i tng:
<Tn i tng>-><Tn thnh phn>([Cc i s]);
Lu :
Chng trnh 6.3 minh ha vic s dng cc thnh phn lp c s t i tng lp dn xut: lp
Bus k tha t lp Car. Lp Bus c nh ngha b sung mt s phng thc v thuc tnh mi.
Khi , i tng ca lp Bus c th gi cc hm public ca lp Bus cng nh ca lp Car.
Chng trnh 6.3
#include<stdio.h>
#include<conio.h>
#include<string.h>
/* nh ngha lp Car */
class Car{
private:
int
122
speed;
// Tc
mark[20];
// Nhn hiu
float price;
// Gi xe
public:
void
setSpeed(int);
// Gn tc cho xe
int
getSpeed();
// c tc xe
void
setMark(char);
// Gn nhn cho xe
char[] getMark();
// c nhn xe
void
// Gn gi cho xe
setPrice(float);
float getPrice();
// c gi xe
show();
// Gii thiu xe
};
/* Khai bo phng thc bn ngoi lp */
Car::Car(int speedIn, char markIn[], float priceIn){
speed = speedIn;
strcpy(mark, markIn);
price = priceIn;
}
void Car::setSpeed(int speedIn){
// Gn tc cho xe
speed = speedIn;
}
int Car::getSpeed(){
// c tc xe
return speed;
}
void Car::setMark(char markIn){
// Gn nhn cho xe
strcpy(mark, markIn);
}
char[] Car::getMark(){
// c nhn xe
return mark;
}
void Car::setPrice(float priceIn){
// Gn gi cho xe
price = priceIn;
}
float Car::getPrice(){
// c gi xe
return price;
}
void Car::show(){
123
// S hiu tuyn xe
public:
// Khi to tham s
Bus(int sIn=0, char mIn[]=, float pIn=0, int lIn=0);
void setLabel(int);
// Gn s hiu tuyn xe
int getLabel();
// c s hiu tuyn xe
};
// Khi to tham s
Bus::Bus(int sIn, char mIn[], float pIn, int lIn):Car(sIn, mIn, pIn){
label = lIn;
}
void Bus::setLabel(int labelIn){
// Gn s hiu tuyn xe
label = labelIn;
}
int Bus::getLabel(){
// c s hiu tuyn xe
return label;
}
// Chng trnh chnh
void main(){
clrscr();
Bus myBus;
124
myBus.setPrice(priceIn);
myBus.setLabel(labelIn);
myBus.show();
return;
}
Trong chng trnh 6.3, i tng myBus c kiu lp Bus, l lp dn xut ca lp c s Car, c
th s dng cc phng thc ca lp Car v lp Bus mt cch bnh ng. Khi , lnh
myBus.show() s gi n phng thc show() ca lp Car, do vy, chng trnh trn s in ra mn
hnh kt qu nh sau (ty theo d liu nhp vo 4 dng u):
Toc do xe bus: 80
Nhan hieu xe bus: Mercedes
Gia xe bus: 5000
So hieu tuyen xe bus: 27
This is a Mercedes having a speed of 80km/h and its price is $5000
Trong dng gii thiu xe bus (v ta ang dng i tng myBus ca lp Bus), khng c gii thiu
s hiu tuyn xe. L do l v ta ang dng hm show ca lp Car. Mun c thm phn gii thiu
v s hiu tuyn xe but, ta phi nh ngha li hm show trong lp Bus. Mc 6.3.3 s trnh by
ni dung ny.
public:
void show();
// Phng thc ca lp c s
};
class Bus: public Car{
public:
void show();
};
khi , phng thc show() ca lp Bus c coi l phng thc np chng t phng thc
show() ca lp Car.
125
i vi con tr i tng:
<Tn i tng>-><Tn thnh phn>([Cc i s]);
V d:
Bus myBus;
myBus.show();
i vi con tr i tng:
<Tn i tng>-><Tn lp c s>::<Tn thnh phn>([Cc i s]);
V d:
Bus myBus;
myBus.Car::show();
speed;
// Tc
char
mark[20];
// Nhn hiu
float price;
// Gi xe
public:
int
getSpeed();
char[] getMark();
// c nhn xe
float getPrice();
// c gi xe
126
// c tc xe
show();
// Gii thiu xe
};
/* Khai bo phng thc bn ngoi lp */
Car::Car(int speedIn, char markIn[], float priceIn){
speed = speedIn;
strcpy(mark, markIn);
price = priceIn;
}
void Car::setSpeed(int speedIn){
// Gn tc cho xe
speed = speedIn;
}
int Car::getSpeed(){
// c tc xe
return speed;
}
char[] Car::getMark(){
// c nhn xe
return mark;
}
float Car::getPrice(){
// c gi xe
return price;
}
void Car::show(){
// S hiu tuyn xe
public:
// Khi to tham s
Bus(int sIn=0, char mIn[]=, float pIn=0, int lIn=0);
void show();
};
// Khi to tham s
Bus::Bus(int sIn, char mIn[], float pIn, int lIn):Car(sIn, mIn, pIn){
label = lIn;
}
127
cout << This is a bus of type << getMark() << , on the line
<< label << , having a speed of << getSpeed()
<< km/h and its price is $ << getPrice() << endl;
return;
}
// Chng trnh chnh
void main(){
clrscr();
Bus myBus(80, Mercedes, 5000, 27);// Bin i tng ca lp Bus
cout << Gioi thieu xe: << endl;
myBus.Car::show();
return;
}
Lu :
Trong phng thc show() ca lp Bus, ta phi dng cc hm get truy nhp n cc
thuc tnh ca lp Car. Khng c truy nhp trc tip n tn cc thuc tnh (speed,
mark v price) v chng c dng private ca lp Car.
128
// ng
// khng c
Chng trnh 6.5 minh ha vic chuyn kiu gia cc i tng ca lp c s v lp dn xut.
Chng trnh 6.5
#include<stdio.h>
#include<conio.h>
#include<string.h>
/* nh ngha lp Car */
class Car{
private:
int
speed;
// Tc
char
mark[20];
// Nhn hiu
float price;
// Gi xe
public:
int
getSpeed();
// c tc xe
char[] getMark();
// c nhn xe
float getPrice();
// c gi xe
show();
// Gii thiu xe
};
/* Khai bo phng thc bn ngoi lp */
Car::Car(int speedIn, char markIn[], float priceIn){
speed = speedIn;
strcpy(mark, markIn);
price = priceIn;
}
129
// c tc xe
return speed;
}
char[] Car::getMark(){
// c nhn xe
return mark;
}
float Car::getPrice(){
// c gi xe
return price;
}
void Car::show(){
// S hiu tuyn xe
public:
// Khi to tham s
Bus(int sIn=0, char mIn[]=, float pIn=0, int lIn=0);
void show();
};
// Khi to tham s
Bus::Bus(int sIn, char mIn[], float pIn, int lIn):Car(sIn, mIn, pIn){
label = lIn;
}
// nh ngha np chng phng thc
void Bus::show(){
cout << This is a bus of type << getMark() << , on the line
<< label << , having a speed of << getSpeed()
<< km/h and its price is $ << getPrice() << endl;
return;
}
// Chng trnh chnh
void main(){
clrscr();
Car myCar(100, Ford, 3000); // Bin i tng lp Car
Bus myBus(80, Mercedes, 5000, 27);// Bin i tng lp Bus
130
6.4 A K THA
C++ cho php a k tha, tc l mt lp c th c dn xut t nhiu lp c s khc nhau, vi
nhng kiu dn xut khc nhau.
};
V d:
class Bus: public Car, public PublicTransport{
};
131
l khai bo lp Bus (xe but) k tha t hai lp xe Car ( t) v PublicTransport (phng tin
giao thng cng cng) theo cng mt kiu dn xut l public.
Lu :
Nguyn tc truy nhp vo cc thnh phn lp c s cng hon ton tng t nh trong k
tha n.
speed;
// Tc
char
mark[20];
// Nhn hiu
float price;
// Gi xe
public:
Car();
// Khi to tham s
};
Car::Car(){
speed = 0;
strcpy(mark, );
price = 0;
}
// Khi to tham s
Car::Car(int speedIn, char markIn[], float priceIn){
speed = speedIn;
strcpy(mark, markIn);
price = priceIn;
132
// Gi v phng tin
public:
PublicTransport();
PublicTransport(float);
// Khi to tham s
};
PublicTransport::PublicTransport(){
ticket = 0;
}
// Khi to tham s
PublicTransport::PublicTransport(float ticketIn){
ticket = ticketIn;
}
/* nh ngha lp Bus k tha t lp Car v PublicTransport */
class Bus: public Car, public PublicTransport{ // Th t khai bo
int label;
// S hiu tuyn xe
public:
Bus();
// Theo th t dn xut
label = 0;
}
// Khi to tham s
Bus::Bus(int sIn, char mIn[], float pIn, float tIn, int lIn):
Car(sIn, mIn, pIn), PublicTransport(tIn){ // Theo th t dn xut
label = lIn;
}
Lu :
133
V d, trong chng trnh 6.6, hai cch nh ngha hm khi to khng tham s ca lp Bus sau l
tng ng:
Bus::Bus(): Car(), Transport(){// Theo th t dn xut
label = 0;
}
l tng ng vi:
Bus::Bus(){
label = 0;
}
Hm hu b trong a k tha
V hm hu b l duy nht ca mi lp, hn na hm hu b ca lp c s s c t ng gi
n khi gii phng i tng ca lp dn xut. Cho nn hm hu b trong a k tha hon ton
tng t hm hu b trong n k tha:
Trong trng hp cc lp c s u c cc thnh phn cng tn, vic truy xut n thnh
phn ca lp no phi c ch r bng ton t phm vi: <Tn lp>:: i vi thnh
phn lp c s .
134
v li gi hm:
myBus.show();
// Gi n hm ca lp Bus
myBus.Car::show();
// Gi n hm ca lp Car
myBus.PublicTransport::show();// Gi n hm ca lp PublicTransport
Chng trnh 6.7 minh ho vic truy nhp n cc thnh phn trng nhau trong cc lp c s v
c nh ngha li trong lp dn xut.
speed;
// Tc
char
mark[20];
// Nhn hiu
float price;
// Gi xe
public:
Car();
// Khi to tham s
void show();
// Gii thiu
speed = 0;
strcpy(mark, );
price = 0;
}
// Khi to tham s
Car::Car(int speedIn, char markIn[], float priceIn){
speed = speedIn;
strcpy(mark, markIn);
price = priceIn;
}
135
// Gi v phng tin
public:
PublicTransport();
PublicTransport(float);
// Khi to tham s
void show();
// Gii thiu
ticket = 0;
}
// Khi to tham s
PublicTransport::PublicTransport(float ticketIn){
ticket = ticketIn;
}
// Gii thiu
void PublicTransport::show(){
cout << This public transport had a ticket of $
<< ticket << endl;
return;
}
/* nh ngha lp Bus k tha t lp Car v PublicTransport */
class Bus: public Car, public PublicTransport{ // Th t khai bo
int label;
// S hiu tuyn xe
public:
Bus();
136
// Gii thiu
// Theo th t dn xut
label = 0;
}
// Khi to tham s
Bus::Bus(int sIn, char mIn[], float pIn, float tIn, int lIn):
Car(sIn, mIn, pIn), PublicTransport(tIn){ // Theo th t dn xut
label = lIn;
}
// Gii thiu
void Bus::show(){
cout << This is a bus on the line << label
<< , its speed is << getSpeed()
<< km/h, mark is << getMark()
<< , price is $ << getPrice()
<< and ticket is << getTicket() << endl;
return;
}
// phng thc main
void main(){
clrscr();
Bus myBus(100, Mercedes, 3000, 1.5, 27);
myBus.Car::show();
// Hm ca lp Car
myBus.PublicTransport:: show();
// Hm ca lp PublicTransport
myBus.show();
// Hm ca lp Bus
return;
}
137
Car
PublicTransport
Bus
trnh cc vn ny, C++ cung cp mt khi nim l k tha t lp c s tru tng. Khi ,
ta cho cc lp Car v PublicTransport k tha tru tng t lp Engine. Bng cch ny, cc thnh
phn ca lp Engine ch xut hin trong lp Bus ng mt ln. Lp Engine c gi l lp c s
tru tng ca cc lp Car v PublicTransport.
};
V d:
class Engine{
138
};
l khai bo lp Car, k tha t lp c s tru tng Engine, theo kiu dn xut public.
Lu :
T kho virtual khng nh hng n phm vi truy nhp thnh phn lp c s, phm vi
ny vn c quy nh bi t kho dn xut nh thng thng.
//Lp c s virtual
public:
Car(): Engine(){ };
};
class PublicTransport: public virtual Engine{
//Lp c s virtual
public:
PublicTransport():Engine(){ };
};
class Bus: public Car, public PublicTransport{
public:
// Gi hm khi to tng minh ca lp c s tru tng
Bus():Engine(), Car(), PublicTransport(){ };
};
Lu :
power;
// Cng sut
public:
Engine(){power = 0;};
// Gii thiu
speed;
// Tc
char
mark[20];
// Nhn hiu
float price;
// Gi xe
public:
Car();
// Gii thiu
140
speed = 0;
strcpy(mark, );
price = 0;
}
// Khi to tham s
Car::Car(int pwIn, int sIn, char mIn[], float prIn): Engine(pwIn){
speed = sIn;
strcpy(mark, mIn);
price = prIn;
}
// Gii thiu
void Car::show(){
cout << This is a << mark << having a speed of
<< speed << km/h, its power is << getPower()
<< KWh and price is $ << price << endl;
return;
}
/* nh ngha lp PublicTransport dn xut tru tng t lp Engine */
class PublicTransport: public virtual Engine{
float ticket;
// Gi v phng tin
public:
PublicTransport();
PublicTransport(int, float);
// Khi to tham s
void show();
// Gii thiu
141
// S hiu tuyn xe
public:
Bus();
// Gii thiu
};
// Khi to khng tham s
Bus::Bus(): Engine(), Car(), Transport(){
// Theo th t dn xut
label = 0;
}
// Khi to tham s
Bus::Bus(int pwIn, int sIn, char mIn[], float prIn, float tIn, int lIn):
Engine(pwIn), Car(sIn, mIn, prIn), PublicTransport(tIn){
label = lIn;
}
// Gii thiu
void Bus::show(){
cout << This is a bus on the line << label
<< , its speed is << getSpeed()
<< km/h, power is << Car::getPower()
<< KWh, mark is << getMark()
<< , price is $ << getPrice()
<< and ticket is << getTicket() << endl;
return;
}
// phng thc main
void main(){
clrscr();
Bus myBus(250, 100, Mercedes, 3000, 1.5, 27);
myBus.Car::Engine::show();
142
// Hm ca lp Engine
// Hm ca lp Car
myBus.PublicTransport:: show();
// Hm ca lp PublicTransport
myBus.show();
// Hm ca lp Bus
return;
}
6.6 A HNH
6.6.1 t vn
S k tha trong C++ cho php c s tng ng gia lp c s v cc lp dn xut trong s
tha k:
Tuy nhin, khi thc hin li gi mt phng thc ca lp, trnh bin dch s quan tm n
kiu ca con tr ch khng phi i tng m con tr ang tr ti: phng thc ca lp
m con tr c kiu c gi ch khng phi phng thc ca i tng m con tr ang
tr ti c gi.
143
// ng
V d:
class Car{
public:
virtual void show();
};
l khai bo phng thc tru tng show() ca lp Car: phng thc khng c tham s v khng
cn gi tr tr v (void).
Lu :
Trong trng hp cy k tha c nhiu mc, cng ch cn khai bo phng thc l tru
tng (virtual) mt mc bt k. Khi , tt c cc phng thc trng tn vi phng
thc tt c cc mc u c coi l tru tng.
i khi khng cn thit phi nh ngha chng (trong lp dn xut) mt phng thc
c khai bo tru tng trong lp c s.
144
thc hin phng thc ca lp cng kiu vi con tr. y c gi l hin tng a hnh (tng
ng bi) trong C++.
Chng trnh 6.9 minh ho vic s dng phng thc tru tng: lp Bus k tha t lp Car, hai
lp ny cng nh ngha phng thc tru tng show().
speed;
// Tc
char
mark[20];
// Nhn hiu
float price;
// Gi xe
public:
int
getSpeed(){return speed;};// c tc xe
};
/* Khai bo phng thc bn ngoi lp */
Car::Car(int speedIn, char markIn[], float priceIn){
speed = speedIn;
strcpy(mark, markIn);
price = priceIn;
}
// Phng thc tru tng gii thiu xe
virtual void Car::show(){
cout << This is a << mark << having a speed of
<< speed << km/h and its price is $ << price << endl;
return;
}
145
// S hiu tuyn xe
public:
// Khi to tham s
Bus(int sIn=0, char mIn[]=, float pIn=0, int lIn=0);
void show();
// Gii thiu xe
};
// Khi to tham s
Bus::Bus(int sIn, char mIn[], float pIn, int lIn):Car(sIn, mIn, pIn){
label = lIn;
}
// nh ngha np chng phng thc tru tng
void Bus::show(){
cout << This is a bus of type << getMark() << , on the line
<< label << , having a speed of << getSpeed()
<< km/h and its price is $ << getPrice() << endl;
return;
}
// Chng trnh chnh
void main(){
clrscr();
Car *ptrCar, myCar(100, Ford, 3000);
Bus myBus(150, Mercedes, 5000, 27);// Bin i tng ca lp Bus
ptrCar = &myCar;
// Tr n i tng lp Car
ptrCar->show();
ptrCar = &myBus;
// Tr n i tng lp Bus
ptrCar->show();
return;
}
Trong trng hp lp dn xut khng nh ngha li phng thc tru tng, th chng
trnh s gi phng thc ca lp c s, nhng vi d liu ca lp dn xut.
V d, nu trong chng trnh 6.9, lp Bus khng nh ngha chng phng thc tru tng
show() th kt qu hin th s l hai dng thng bo ging nhau, ch khc nhau d liu ca hai
i tng khc nhau:
This is a Ford having a speed of 100km/h and its price is $3000
This is a Mercedes having a speed of 150km/h and its price is $5000
TNG KT CHNG 6
Ni dung chng 6 trnh by cc vn c bn lin quan n tha k v tng ng bi trong
C++ nh sau:
C ba loi dn xut khc nhau, c quy nh bi ba t kho dn xut khc nhau: private,
protected v public. Kiu dn xut ph bin l dn xut public.
147
C++ cung cp khi nim k tha t lp c s tru tng trnh trng hp trng lp d
liu lp dn xut, khi cc lp c s li cng c dn xut t mt lp khc.
C++ cng cho php c ch tng ng bi (a hnh) bng cch nh ngha mt phng
thc l tru tng trong s tha k. Khi , mt con tr lp c s c th tr n a ch
ca mt i tng lp dn xut, v phng thc c thc hin l tu thuc vo kiu ca
i tng m con tr ang tr ti.
CU HI V BI TP CHNG 6
1. Trong cc khai bo sau, khai bo no l ng c php k tha lp:
a. class A:
b. class A:
public B{};
c. class A:
class B{};
d. class A::
public B{};
2. Trong cc kiu dn xut sau, t cc phng thc lp dn xut, khng th truy nhp n
cc thnh phn private ca lp c s:
a. private
b. protected
c. public
d. C ba kiu trn
3. Trong cc kiu dn xut sau, t i tng ca lp dn xut, c th truy nhp n cc thnh
phn ca lp c s:
a. private
b. protected
c. public
d. C ba kiu trn
4. A l lp dn xut public t lp c s B. Gi s c cc kiu khai bo:
A myA, *ptrA;
B myB, *ptrB;
148
149
d. Khng lnh no c.
10. Gi s B l mt lp c khai bo:
class B{
int x;
public: int getx();
};
150
d. A::B::show();
13. Mun khai bo mt lp A k tha t hai lp c s B v C, nhng lnh no l ng:
a. class A: B, C{};
b. class A: public B, C{};
c. class A: public B, protected C{};
d. class A: public B, public C{};
14. B l mt lp c hai hm khi to:
B();
B(int);
V A l mt lp k tha t B v C:
class A: public B, public C{};
Tn ngi (name)
151
18. B sung cc phng thc truy nhp cc thuc tnh ca lp Human, cc phng thc ny
c tnh cht public.
19. B sung thm cc thuc tnh ca lp Person: a ch v s in thoi. Thm cc phng
thc truy nhp cc thuc tnh ny trong lp Person.
20. Xy dng hai hm khi to cho lp Human: mt hm khng tham s, mt hm vi ba
tham s tng ng vi ba thuc tnh ca n. Sau , xy dng hai hm khi to cho lp
Person c s dng cc hm khi to ca lp Human: mt hm khng tham s, mt hm
nm tham s (ng vi hai thuc tnh ca lp Person v ba thuc tnh ca lp Human).
21. Xy dng mt hm main, trong c yu cu nhp cc thuc tnh to mt i tng c
kiu Human v mt i tng c kiu Person, thng qua cc hm set thuc tnh xy
dng.
22. Xy dng hm show() cho hai lp Human v Person. Thay i hm main: dng mt i
tng c kiu lp Person, gi hm show() ca lp Person, sau li gi hm show() ca
lp Human t chnh i tng .
23. Khai bo thm mt lp ngi lao ng (Worker), k tha t lp Human, c thm thuc
tnh l s gi lm vic trong mt thng (hour) v tin lng ca ngi (salary). Sau ,
khai bo thm mt lp nhn vin (Employee) k tha ng thi t hai lp: Person v
Worker. Lp Employee c b sung thm mt thuc tnh l chc v (position).
24. Chuyn lp Human thnh lp c s tru tng ca hai lp Person v Worker. Xy dng
thm hai hm show() ca lp Worker v lp Employee. Trong hm main, khai bo mt i
tng lp Employee, sau gi n cc hm show() ca cc lp Employee, Person,
Worrker v Human.
25. Chuyn hm show() trong cc lp trn thnh phng thc tru tng. Trong hm main,
khai bo mt con tr kiu Human, sau , cho n tr n ln lt cc i tng ca cc
lp Human, Person, Worker v Employee, mi ln u gi phng thc show() hin th
thng bo ra mn hnh.
152
CHNG 7
MT S LP QUAN TRNG
Ni dung chng ny tp trung trnh by mt s lp c bn trong C++:
Lp vt cha (Container)
Lp tp hp (Set)
Lp chui k t (String)
7.1 LP VT CHA
Lp vt cha (Container) bao gm nhiu lp c bn ca C++: lp Vector, lp danh sch (List) v
cc kiu hng i (Stack v Queue), lp tp hp (Set) v lp nh x (Map). Trong chng ny s
trnh by mt s lp c bn ca Container l: Set, Stack, Queue v List
==:
<:
Ton t so snh nh hn
begin():
end():
size():
empty():
Vt cha l rng
front():
back():
[]:
insert():
erase():
pop_back():
pop_front():
153
Trong :
V d:
Set<int>::iterator iter;
l khai bo mt bin con chy iter cho lp tp hp (Set), trong , cc phn t ca lp vt cha c
kiu c bn int. Hoc:
List<Person>::iterator iter;
l khai bo mt bin con chy iter cho lp danh sch (List), trong , cc phn t c kiu lp do
ngi dng t nh ngha l Person.
Set<int>::iterator i;
// Thm phn t vo
Lu :
154
Bin con chy phi c khi u bng phng thc begin() v kt thc bng phng
thc end() ca i tng cn duyt tng ng.
Mt con chy c th c s dng nhiu ln cho nhiu i tng nu chng c cng kiu
lp vt cha v cc phn t ca chng cng cng kiu.
7.2 LP TP HP
Lp tp hp (Set) cha cc phn t c cng kiu, khng phn bit th t gia cc phn t nhng
li phn bit gia cc phn t: cc phn t l khc nhau tng i mt. Mun s dng lp tp hp,
phi c ch th u tp:
#include<set.h>
// Th vin ring ca lp tp hp
#include<stl.h>
hoc:
7.2.1 Hm khi to
Lp tp hp c ba kiu khi to chnh:
Trong :
V d:
Set<int> mySet;
l khai bo mt i tng mySet ca lp tp hp, mySet khi u cha c phn t no, cc phn
t ca i tng ny c kiu c bn int. Hoc:
Person *myPerson = new Person[10];
// Khai bo tp hp
7.2.2 Ton t
Cc ton t trn lp tp hp l tng ng vi cc ton t s hc trn tp hp thng thng: OR
|, AND &, XOR ^ v php tr -.
Php ton | v |=
Php ton ny tr v php hp (OR) ca hai i tng ca lp tp hp, kt qu cng l mt i
tng ca lp tp hp:
<i_tng_1> = <i_tng_2>
| <i_tng_3>;
<i_tng_1> |= <i_tng_2>;
V d, mySet1 cha hai phn t kiu int {1,2}, mySet2 cha ba phn t kiu int {2,3,4}, v:
mySet3 = mySet1 | mySet2;
155
& <i_tng_3>;
V d, mySet1 cha hai phn t kiu int {1,2}, mySet2 cha ba phn t kiu int {2,3,4}, v:
mySet3 = mySet1 & mySet2;
Php ton ^ v ^=
Php ton ny tr v php hp ngoi (XOR) gia hai i tng tp hp, kt qu cng l mt i
tng tp hp:
<i_tng_1> = <i_tng _2>
^ <i_tng_3>;
<i_tng_1> ^= <i_tng_2>;
V d, mySet1 cha hai phn t kiu int {1,2}, mySet2 cha ba phn t kiu int {2,3,4}, v:
mySet3 = mySet1 ^ mySet2;
Php ton - v -=
Php ton ny tr v php hiu (loi tr) gia hai i tng tp hp, kt qu cng l mt i
tng tp hp:
<i_tng_1> = <i_tng_2>
- <i_tng_3>;
<i_tng_1> -= <i_tng_2>;
V d, mySet1 cha hai phn t kiu int {1,2}, mySet2 cha ba phn t kiu int {2,3,4}, v:
mySet3 = mySet1 - mySet2;
Thm mt phn t vo tp hp
Thm mt phn t vo tp hp
C hai c php thm mt phn t vo tp hp:
pair<iterator, bool> insert(T&);
iterator insert(<V tr con chy>, T&);
Trong :
156
Phng thc th hai cng thm vo mt phn t, nhng ch kim tra xem phn t tn
ti hay cha bt u t v tr con chy c ch ra trong bin <v tr con chy>. Phng
thc ny tr v v tr con chy ca phn t mi thm vo (nu thnh cng) hoc v tr ca
phn t c mt.
Trong :
Trong :
157
Phng th th hai ch kim tra xem phn t c xut hin trong tp hp hay khng: tr
v 1 nu c mt, tr v 0 nu khng c mt.
7.2.4 p dng
Chng trnh 7.1 minh ho mt s thao tc trn mt tp hp cc phn t c kiu char: thm phn
t, loi b phn t, duyt cc phn t.
Chng trnh 7.1
#include<stdio.h>
#include<conio.h>
#include<set.h>
void main(){
clrscr();
Set<char> mySet;
int function;
do{
clrscr();
cout << CAC CHUC NANG: << endl;
cout << 1: Them mot phan tu vao tap hop << endl;
cout << 2: Loai bo mot phan tu khoi tap hop << endl;
cout << 3: Xem tat ca cac phan tu cua tap hop << endl;
cout << 5: Thoat! << endl;
cout << ===================================== << endl;
cout << Chon chuc nang: << endl;
cin >> function;
switch(function){
case 1:
// Thm vo
char phantu;
cout << Ki tu them vao: ;
cin >> phantu;
mySet.insert(phantu);
break;
case 2:
// Loi ra
char phantu;
cout << Loai bo ki tu: << endl;
cin >> phantu;
158
// Duyt
7.3 LP CHUI
Lp chui (String) cng l mt loi lp cha, n cha mt tp cc phn t l mt dy cc k t c
phn bit th t, cc phn t khng nht thit phi phn bit nhau. Mun s dng lp String, cn
thm vo ch th u tp:
#include <string.h>
7.3.1 Hm khi to
Lp String c ba hm khi to chnh:
Hm khi to t mt mng cc k t:
String <tn bin>(char*, <chiu di mng>);
V d:
String myStr;
V d:
String myStr(12);
159
7.3.2 Ton t
Lp String c cc ton t c bn l:
Php gn chui
Php vo/ra
Php gn chui =
C php php gn chui l tng t c php gn cc i tng c bn:
<Tn bin 1>
V d:
String s1(12), s2;
s2 = s1;
V d:
String s1(12), s2(3);
s1+= s2;
160
chui_1 == chui_2;
Lu :
Php so snh chui thc hin so snh m ASCII ca tng k t hai chui theo th t
tng ng cho n khi c s khc nhau u tin gia hai k t.
Php so snh l php so snh da trn t in, c phn bit ch hoa v ch thng.
V d:
12 < a;
// c gi tr ng
a <= A;
// c gi tr sai
Php vo/ra
V d:
String s(hello!);
cout << s;
Ly chiu di chui
Tm mt chui con
Xo mt chui con
Chuyn kiu k t
Ly chiu di chui
C php:
<bin_chui>.length();
s in ra mn hnh di chui s l 6.
Tm mt chui con
C php:
<bin_chui>.find(<Chui con>, <V tr bt u>, <Kiu so khp>);
Trong :
161
V d:
s.find(12, 0, SM_IGNORE);
Trong :
V d:
s.insert(0, 12);
Xo mt chui con
C php:
<bin_chui>.delete(<v tr bt u>, < di chui xo>);
Trong :
V d:
s.delete(0, 2);
s xo hai k t u ca chui s.
Chuyn kiu k t
<bin_chui>.toUpper();
<bin_chui>.toLower();
V d:
162
s.toUpper();
s.toLower();
7.3.4 p dng
Chng trnh 7.2 minh ho mt s thao tc c bn trn lp chui, c s dng th vin lp chui
chun ca C++: cng thm mt chui, chn thm mt chui con, xo mt chui con, tm mt
chui con
Chng trnh 7.2
#include<stdio.h>
#include<conio.h>
#include<string.h>
void main(){
clrscr();
String myStr;
int function;
do{
clrscr();
cout << CAC CHUC NANG: << endl;
cout << 1: Cong them mot chuoi << endl;
cout << 2: Chen them mot chuoi << endl;
cout << 3: Xoa di mot chuoi << endl;
cout << 4: Tim mot chuoi con << endl;
cout << 5: Chuyen thanh chu hoa << endl;
cout << 6: Chuyen thanh chu thuong << endl;
cout << 7: Xem noi dung chuoi << endl;
cout << 8: Xem chieu dai chuoi << endl;
cout << 9: Thoat! << endl;
cout << ===================================== << endl;
cout << Chon chuc nang: << endl;
cin >> function;
switch(function){
case 1:
// Thm vo cui
String subStr;
cout << Chuoi them vao: ;
cin >> subStr;
myStr += subStr;
break;
case 2:
// Chn vo chui
String subStr;
int position;
cout << Chuoi them vao: ;
cin >> subStr;
cout << Vi tri chen:;
cin >> position;
163
// Xo i mt chui con
// Tm chui con
String subStr;
int position;
cout << Chuoi con can tim:;
cin >> subStr;
cout << Vi tri bat dau tim:;
cin >> position;
if(myStr.find(position, subStr))
cout << Co xuat hien! << endl;
else
cout << Khong xuat hien! << endl;
break;
case 5:
myStr.toUpper();
cout << myStr << endl;
break;
case 6:
myStr.toLower();
cout << myStr << endl;
break;
case 7:
// Duyt
// Duyt
164
Hm khi to
Lp Stack c hai cch khi to:
Trong :
V d:
Stack<int> myStack;
Ton t
Lp Stack ch dng n cc ton t gn = v ton t so snh bng ==:
Php gn =:
<ngn xp 1> = <ngn xp 2>;
Dng kim tra xem hai i tng ngn xp c bng nhau hay khng. Kt qu tr v c
kiu bool (true/false).
Phng thc
Thm mt phn t:
<bin ngn xp>.push(T);
Loi mt phn t:
<bin ngn xp>.pop();
165
p dng
Trong phn ny, ta s vit li chng trnh 3.4c c minh ho trong phn vit v cu trc
ngn xp (chng 3). Nhng thay v phi nh ngha cu trc ngn xp, ta dng lp ngn xp ca
th vin C++: o ngc mt xu k t c nhp vo t bn phm.
Chng trnh 7.3
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<stack.h>
void main(){
clrscr();
Stack<char> myStack;
char strIn[250];
cout << Nhap chuoi: ;
cin >> strIn;
// t vo ngn xp
myStack.push(strIn[i]);
while(!myStack.empty())
// Ly ra t ngn xp
7.4.2 Lp hng i
Lp hng i (queue) cng l mt loi lp vt cha, n cha cc phn t cng kiu, khng bt
buc phi phn bit nhau nhng c phn bit v th t: cc thao tc thm phn t c thc hin
mt u, cc thao tc ly phn t ra c thc hin mt u cn li ca hng i. Phn t no
c thm vo trc th s b ly ra trc.
Mun dng lp Queue phi dng ch th u tp:
#include<queue.h>
Hm khi to
Lp Queue c hai cch khi to:
166
Trong :
V d:
Queue<int> myQueue;
Ton t
Lp Queue ch dng n cc ton t gn = v ton t so snh bng ==:
Php gn =:
<hng i 1> = <hng i 2>;
Dng kim tra xem hai i tng hng i c bng nhau hay khng. Kt qu tr v c kiu
bool (true/false).
Phng thc
Thm mt phn t:
<bin hng i>.push(T);
Loi mt phn t:
<bin hng i>.pop();
p dng
Trong phn ny, ta s ci t li chng trnh trong phn cu trc hng i (chung 3). Nhng
thay v phi t nh ngha cu trc hng i, ta dng lp Queue ca th vin C++ m phng
chng trnh qun l tin trnh ca h iu hnh.
167
// Thm vo hng i
int maso;
cout << Ma so tien trinh vao hang doi: ;
cin >> maso;
myQueue.push(maso);
break;
case 2:
// Ly ra khi hng i
// Duyt hng i
Queue<int>::iterator i;
for(i=myQueue.begin(); i<myQueue.end(); i++)
cout << myQueue[i] << ;
break;
}while(function != 5);
return;
}
168
#include<stl.h>
hoc:
7.5.1 Hm khi to
Lp List c ba kiu khi to:
Trong :
T: l kiu ca cc phn t cha trong danh sch lin kt. T c th l cc kiu c bn, cng
c th l cc kiu phc tp do ngi dng t nh ngha.
V d:
List<int> myList;
7.5.2 Ton t
Ton t gn =
C php:
<danh sch 1> = <danh sch 2>;
s tr v mt gi tr kiu bool, tng ng vi vic hai danh sch ny c bng nhau hay khng.
Vic so snh c tin hnh trn tng phn t v tr tng ng nhau.
Lu :
Ngoi ra cn c cc php ton so snh khc cng c th thc hin trn danh sch: <, >,
<=, >=, !=.
169
Trong :
V d:
List<int> myList;
myList.push_front(7);
Xo i mt phn t
C php:
<bin danh sch>.erase(<v tr xo>);
<bin danh sch>.pop_front();
<bin danh sch>.pop_back();
Trong :
V d:
List<int> myList;
cout << myList.pop_front();
tr v gi tr bool, tng ng vi trng thi hin ti ca bin danh sch l rng hay khng.
V d:
170
Trong :
Phng thc th hai tr v phn t tip theo, v con chy cng di chuyn sang phn t .
V d:
List<int> myList;
cout << myList.get();
7.5.4 p dng
Trong phn ny, ta ci t li chng trnh 3.6c c trnh by trong phn cu trc danh sch
lin kt (chng 3). Nhng thay v t to danh sch lin kt, ta dng lp List trong th vin ca
C++ qun l nhn vin vn phng.
Chng trnh 7.5
#include<stdio.h>
#include<conio.h>
#include<string.h>
#include<list.h>
typedef struct{
char name[25];
// Tn nhn vin
int age;
float salary;
} Employee;
void main(){
clrscr();
List<Employee> myList;
int function;
do{
clrscr();
cout << CAC CHUC NANG: << endl;
cout << 1: Them mot nhan vien << endl;
cout << 2: Xoa mot nhan vien << endl;
cout << 3: Xem tat ca cac nhan vien trong phong << endl;
171
// Thm vo ds
int position;
Employee employee;
cout << Vi tri can chen: ;
cin >> position;
cout << Ten nhan vien: ;
cin >> employee.name;
cout << Tuoi nhan vien: ;
cin >> employee.age;
cout << Luong nhan vien: ;
cin >> employee.salary;
myList.insert(position, employee);
break;
case 2:
// Ly ra khi ds
int position;
cout << Vi tri can xoa: ;
cin >> position;
Employee result = myList.erase(position);
if(result != NULL){
cout << Nhan vien bi loai: endl;
cout << Ten: << result.name << endl;
cout << Tuoi: << result.age << endl;
cout << Luong: << result.salary << endl;
}
break;
case 3:
// Duyt ds
172
TNG KT CHNG 7
Ni dung chng 7 trnh by mt s lp c bn ca lp vt cha (Container) trong th vin
ca C++:
Lp tp hp (Set)
Lp chui (String)
Lp ngn xp (Stack)
Lp hng i (Queue)
Thm vo mt phn t
Ly ra mt phn t
CU HI V BI TP CHNG 7
1. Dng th vin lp stack kim tra mt s t nhin nhp vo t bn phm c phi l mt
s parlindom hay khng: Mt s t nhin l parlindom nu i ngc th t cc ch s, ta
vn thu c chnh s , v d, 87278 l mt s nh vy.
2. Vit li chng trnh 7.1 dng lp tp hp, nhng dng kiu ca cc phn t l lp Car
c nh ngha trong chng 5.
3. Dng th vin lp String vit chng trnh chia nh mt chui ban u thnh mt s
chui con, ranh gii phn chia l mt chui con c nhp vo t bn phm. V d abc
acb, m chia nh theo chui con c s thu c cc chui: ab, ca, cb.
4. Dng th vin lp String vit chng trnh thay th cc chui con ca mt chui ban
u bng mt chui con khc. Cc chui con c nhp t bn phm.
5. Vit li chng trnh 7.5 , vn dng th vin lp List, nhng thay th kiu phn t bng
kiu lp Car c nh ngha trong chng 5.
173
Hng dn tr li cu hi v n tp
HNG DN TR LI CU HI V BI TP
Chng 1
Chng 2
1. c v e.
2. a v d.
3. c.
4. b.
5. c.
6. c.
7. d.
8. b v c.
9. b.
10. c.
11. d.
12. c.
13. d.
Chng 3
1. a.
2. c.
3. a.
4. b.
5. b v d.
6. Gi :
struct Subject{
char subject[20];
float note;
};
Hoc:
typedef struct {
char subject[20];
float note;
}Subject;
7. Gi :
typedef struct {
char name[20];
174
Hng dn tr li cu hi v n tp
int age;
char class[20];
Subject* subjects;
char type[20];
}Student;
Chng 4
1. a.
2. b.
3. c.
4. a.
5. a.
6. b.
7. c.
8. d.
9. a.
10. b.
11. c.
Chng 5
1. a v c.
2. b.
3. d.
4. a, b v c.
5. c.
6. b v c.
7. b v c.
8. b, d v e.
9. c v d.
10. a v d.
11. a, b, c v d.
12. Gi (t bi 12 n bi 17):
class Employee{
char* name;
int age;
float salary;
public:
Employee();
Employee(char*
salaryIn=100);
nameIn=,
int
ageIn=18,
float
175
Hng dn tr li cu hi v n tp
void setName(char*);
char* getName();
void setAge(int);
int getAge();
void setSalary(float);
float getSalary();
void show();
~Employee();
};
Chng 6
1. b.
2. d.
3. c.
4. b, d v f.
5. b v d.
6. d.
7. a, b, c v d.
8. a v c.
9. d.
10. d.
11. b.
12. b.
13. c v d.
14. a, b, c v d.
15. c v d.
16. b v c.
17. Gi (t bi 17 n bi 25):
class Human{
char* name;
int age;
int sex;
public:
Human();
Human(char*, int, int);
void setName(char*);
char* getName();
void setAge(int);
int getAge();
void setSex(int);
176
Hng dn tr li cu hi v n tp
int getSex();
void show();
~Human();
};
class Person: public virtual Human{
char* address;
char* phone;
public:
Person();
Person(char*, int, int, char*, char*);
void setAddress(char*);
char* getAddress();
void setPhone(char*);
char* getPhone();
void show();
~Person();
};
class Worker: public virtual Human{
int hour;
float salary;
public:
Worker();
Worker(int, float);
void setHour(int);
int getHour();
void setSalary(float);
float getSalary();
void show();
};
class Employee: public Person, public Worker{
char* position;
public:
Employee();
Employee(char*,
int,
int,
char*,
char*,
int,
float,
char*);
void setPosition(char*);
char* getPosition();
void virtual show();
~Employee();
};
Chng 7
2. Gi
177
Hng dn tr li cu hi v n tp
void main(){
clrscr();
Set<Car> mySet;
int function;
do{
clrscr();
cout << CAC CHUC NANG: << endl;
cout << 1: Them mot phan tu vao tap hop << endl;
cout << 2: Loai bo mot phan tu khoi tap hop << endl;
cout << 3: Xem tat ca cac phan tu cua tap hop << endl;
cout << 5: Thoat! << endl;
cout << =========================================== << endl;
cout << Chon chuc nang: << endl;
cin >> function;
switch(function){
case 1:
// Thm vo
// Loi ra
Set<Car>::iterator index;
cout << Loai bo xe o vi tri: ;
cin >> index;
if(index >= mySet.begin())&&(index < mySet.end())
mySet.erase(mySet[index]);
break;
case 3:
// Duyt
178
Hng dn tr li cu hi v n tp
break;
}while(function != 5);
return;
}
5. Gi
void main(){
clrscr();
List<Car> myList;
int function;
do{
clrscr();
cout << CAC CHUC NANG: << endl;
cout << 1: Them mot xe o to << endl;
cout << 2: Xoa mot xe o to << endl;
cout << 3: Xem tat ca cac o to << endl;
cout << 5: Thoat! << endl;
cout << ======================================= << endl;
cout << Chon chuc nang: << endl;
cin >> function;
switch(function){
case 1:
// Thm vo ds
int possition;
Car car = new Car();
cout << Vi tri can chen: ;
cin >> possition;
cout << Toc do: ;
int speed;
cin >> speed;
car.setSpeed(speed);
cout << Nhan hieu:;
char[] mark;
cin >> mark;
car.setMark(mark);
float price;
cout << Gia xe:;
cin >> price;
car.setPrice(price);
myList.insert(possition, car);
break;
case 2:
// Ly ra khi ds
int possition;
cout << Vi tri can xoa: ;
cin >> possition;
Car result = myList.erase(possition);
if(result != NULL){
cout << O to bi loai: endl;
cout<<Toc do:<<result.getSpeed()<<endl;
179
Hng dn tr li cu hi v n tp
cout << Nhan hieu: << result.getMark()
<< endl;
cout<<Gia: <<result.getPrice()<<endl;
}
break;
case 3:
// Duyt ds
180
[2]
Nell Dale, Chip Weems and Mark Headington, Programming and Problem Solving with
C++, John & Barlett Publisher, 1996.
[3]
Michael T. Goodrich, Roberto Tamassia and David Mount, Data Structures and Algorithms
in C++, John Wiley & Sons Inc, 2004.
[4]
Scott R.Ladd, C++ Components and Algorithms. 2nd edition. . M&T Books, 1994.
[5]
[6]
Robert Lafore, Object Oriented Programming in C++, Fourth edition, SAMS, 2001.
[2]
Cc a ch web
1.
http://www.angelfire.com/country/aldev0/cpphowto/
2.
http://www.gnacademy.org/text/cc/Tutorial/tutorial.html
3.
http://sophia.dtp.fmph.uniba.sk/cpptut/tutorial.us.html
4.
http://www.brpreiss.com/books/opus4/html/book.html
5.
http://www.fredosaurus.com/notes-cpp/index.html
181
Mc lc
MC LC
GII THIU .....................................................................................................................................3
CHNG 1.......................................................................................................................................5
GII THIU V CC PHNG PHP LP TRNH ...................................................................5
1.1 LP TRNH TUYN TNH...................................................................................................5
1.2 LP TRNH HNG CU TRC .......................................................................................5
1.2.1 c trng ca lp trnh hng cu trc............................................................................5
1.2.2 Phng php thit k trn xung (top-down) ..................................................................6
1.3 LP TRNH HNG I TNG .....................................................................................7
1.3.1 Lp trnh hng i tng ...............................................................................................7
1.3.2 Mt s khi nim c bn..................................................................................................8
1.3.3 Lp trnh hng i tng trong C++ .............................................................................9
TNG KT CHNG 1............................................................................................................10
CHNG 2.....................................................................................................................................11
CON TR V MNG ...................................................................................................................11
2.1 KHI NIM CON TR .......................................................................................................11
2.1.1 Khai bo con tr.............................................................................................................11
2.1.2 S dng con tr ..............................................................................................................11
2.2 CON TR V MNG .........................................................................................................14
2.2.1 Con tr v mng mt chiu ............................................................................................14
2.2.2 Con tr v mng nhiu chiu .........................................................................................17
2.3 CON TR HM...................................................................................................................18
2.4 CP PHT B NH NG...............................................................................................20
2.4.1 Cp pht b nh ng cho bin .....................................................................................21
2.4.2 Cp pht b nh cho mng ng mt chiu...................................................................22
2.4.3 Cp pht b nh cho mng ng nhiu chiu ................................................................23
TNG KT CHNG 2............................................................................................................25
CU HI V BI TP CHNG 2........................................................................................26
CHNG 3.....................................................................................................................................30
KIU D LIU CU TRC .........................................................................................................30
3.1 NH NGHA CU TRC..................................................................................................30
3.1.1 Khai bo cu trc ...........................................................................................................30
3.1.2 Cu trc lng nhau .........................................................................................................31
3.1.3 nh ngha cu trc vi t kho typedef........................................................................32
3.2 THAO TC TRN CU TRC ..........................................................................................33
3.2.1 Khi to gi tr ban u cho cu trc .............................................................................33
3.2.2 Truy nhp n thuc tnh ca cu trc...........................................................................34
3.3 CON TR CU TRC V MNG CU TRC ...............................................................38
3.3.1 Con tr cu trc..............................................................................................................38
3.3.2 Mng cu trc ................................................................................................................41
3.4 MT S KIU D LIU TRU TNG.........................................................................44
3.4.1 Ngn xp ........................................................................................................................45
3.4.2 Hng i.........................................................................................................................48
3.4.3 Danh sch lin kt..........................................................................................................53
TNG KT CHNG 3............................................................................................................60
CU HI V BI TP CHNG 3........................................................................................60
CHNG 4.....................................................................................................................................64
182
Mc lc
VO RA TRN TP ..................................................................................................................... 64
4.1 KHI NIM TP................................................................................................................. 64
4.1.1 Tp d liu .................................................................................................................... 64
4.1.2 Tp vn bn................................................................................................................... 65
4.1.3 Tp nh phn.................................................................................................................. 65
4.2 VO RA TRN TP ........................................................................................................... 66
4.2.1 Vo ra tp vn bn bng >> v <<......................................................................... 66
4.2.2 Vo ra tp nh phn bng read v write......................................................................... 70
4.3 TRUY NHP TP TRC TIP.......................................................................................... 74
4.3.1 Con tr tp tin ............................................................................................................... 74
4.3.2 Truy nhp v tr hin ti ca con tr tp ........................................................................ 74
4.3.3 Dch chuyn con tr tp ................................................................................................ 76
TNG KT CHNG 4........................................................................................................... 78
CU HI V BI TP CHNG 4....................................................................................... 79
CHNG 5.................................................................................................................................... 82
LP ................................................................................................................................................ 82
5.1 KHI NIM LP I TNG......................................................................................... 82
5.1.1 nh ngha lp i tng .............................................................................................. 82
5.1.2 S dng lp i tng................................................................................................... 83
5.2 CC THNH PHN CA LP......................................................................................... 83
5.2.1 Thuc tnh ca lp ........................................................................................................ 84
5.2.2 Phng thc ca lp ..................................................................................................... 85
5.3 PHM VI TRUY NHP LP............................................................................................. 90
5.3.1 Phm vi truy nhp lp ................................................................................................... 90
5.3.2 Hm bn ........................................................................................................................ 91
5.3.3 Lp bn ......................................................................................................................... 96
5.4 HM KHI TO V HU B ......................................................................................... 97
5.4.1 Hm khi to................................................................................................................. 97
5.4.2 Hm hy b................................................................................................................. 101
5.5 CON TR I TNG V MNG I TNG........................................................ 103
5.5.1 Con tr i tng ........................................................................................................ 103
5.5.2 Mng cc i tng..................................................................................................... 106
TNG KT CHNG 5......................................................................................................... 110
CU HI V BI TP CHNG 5..................................................................................... 110
CHNG 6.................................................................................................................................. 115
TNH K THA V A HNH ................................................................................................. 115
6.1 KHI NIM K THA .................................................................................................... 115
6.1.1 Khai bo tha k ......................................................................................................... 115
6.1.2 Tnh cht dn xut....................................................................................................... 116
6.2 HM KHI TO V HU B TRONG K THA ...................................................... 117
6.2.1 Hm khi to trong k tha......................................................................................... 117
6.2.2 Hm hy b trong k tha........................................................................................... 119
6.3 TRUY NHP TI CC THNH PHN TRONG K THA LP ............................... 120
6.3.1 Phm vi truy nhp ....................................................................................................... 120
6.3.2 S dng cc thnh phn ca lp c s t lp dn xut ............................................... 122
6.3.3 nh ngha chng cc phng thc ca lp c s ...................................................... 125
6.3.4 Chuyn i kiu gia lp c s v lp dn xut......................................................... 128
6.4 A K THA ................................................................................................................... 131
6.4.1 Khai bo a k tha..................................................................................................... 131
6.4.2 Hm khi to v hm hu b trong a k tha ........................................................... 132
6.4.3 Truy nhp cc thnh phn lp trong a k tha .......................................................... 134
183
Mc lc
184