giao trinh c++. thay binh
TRANSCRIPT
-
8/6/2019 Giao Trinh c++. Thay Binh
1/157
1
CHNG 1
CC KHI NIM C S
CA LP TRNH HNG I TNG
Chng 1 trnh by nhng vn sau:
Tho lun v cch tip cn hng i tng, nhng nhc im ca lp
trnh truyn thng v cc c im ca lp trnh hng i tng.
Cc khi nim csca phng php hng i tng:
i tng
Lp
Tru tng ha dliu v bao gi thng tin
Ktha
Tng ng bi
Lin ktng
Truyn thng bo
Cc bc cn thitthit kchng trnh theo hng i tng
Cc u im ca lp trnh hng i tng
Cc ngn nghng i tng
Mt sng dng ca lp trnh hng i tng
1.1. Gii thiu
1.1.1. Tip cn hng i tng
Trong th gii thc, chung quanh chng ta l nhng i tng, l cc
thc th c mi quan h vi nhau. V d cc phng trong mt cng ty kinh
doanh c xem nh nhng i tng. Ccphngy c th l: phng qun
l, phng bn hng, phng k ton, phng tip th,... Mi phng ngoi nhng
cn b m nhim nhng cng vic c th, cn c nhng d liu ring nh
thng tin v nhn vin, doanh s bn hng, hoc cc d liu khc c lin quan
n b phn . Vic phn chia cc phng chc nng trong cng ty s to iu
kin d dng cho vic qun l cc hot ng. Mi nhn vin trong phng siu
khin v x l d liu ca phng . V d phng k ton ph trch v lng
bng nhn vin trong cng ty. Nu bn ang b phn tip th v cn tm thng
tin chi tit v lng ca n v mnh th s gi yu cu v phng k ton. Vi
cch lm ny bn c m bo l ch c nhn vin ca b phn k ton c
quyn truy cp d liu v cung cp thng tin cho bn. iu ny cng cho thy
-
8/6/2019 Giao Trinh c++. Thay Binh
2/157
2
rng, khng c ngi no thuc b phn khc c th truy cp v thay i d liu
ca b phn k ton. Khi nim nh th vi tng hu nh c thc m
rng i vi mi lnh vc trong i sng x hi v hn na - i vi vic t
chc chng trnh. Mi ng dng c thc nh ngha nh mt tp cc thcth - hoc cc i tng, sao cho qu trnh ti to nhng suy ngha ca chng ta
l gn st nht v th gii thc.
Trong phn tip theo chng ta s xem xt phng php lp trnh truyn
thng t thy rng v sao chng ta cn chuyn sang phng php lp trnh
hng i tng.
1.1.2. Nhng nhc im ca lp trnh hng th tc
Cch tip cn lp trnh truyn thng l lp trnh hng th tc (LTHTT).Theo cch tip cn ny th mt h thng phn mm c xem nh l dy cc
cng vic cn thc hin nhc d liu, tnh ton, x l, lp bo co v in n
kt qu v.v... Mi cng vic sc thc hin bi mt s hm nht nh.
Nh vy trng tm ca cch tip cn ny l cc hm chc nng. LTHTT s dng
k thut phn r hm chc nng theo cch tip cn trn xung (top-down) to
ra cu trc phn cp. Cc ngn ng lp trnh bc cao nh COBOL, FORTRAN,
PASCAL, C, v.v..., l nhng ngn ng lp trnh hng th tc. Nhng nhcim chnh ca LTHTT l:
Chng trnh kh kim sot v kh khn trong vic b sung, nng cp
chng trnh. Chng trnh c xy dng theo cch TCHTT thc cht l
danh sch cc cu lnh m theo my tnh cn thc hin. Danh sch cc
lnh c t chc thnh tng nhm theo n v cu trc ca ngn ng lp
trnh v c gi l hm/th tc. Trong chng trnh c nhiu hm/th tc,
thng th c nhiu thnh phn d liu quan trng sc khai bo tng th(global) cc hm/th tc c th truy nhp, c v lm thay i gi tr ca
bin tng th. iu ny s lm cho chng trnh rt kh kim sot, nht l
i vi cc chng trnh ln, phc tp th vn cng trnn kh khn hn.
Khi ta mun thay i, b sung cu trc d liu dng chung cho mt s
hm/th tc th phi thay i hu nh tt c cc hm/th tc lin quan n d
liu .
M hnh c xy dng theo cch tip cn hng th tc khng m tcy , trung thc h thng trong thc t.
-
8/6/2019 Giao Trinh c++. Thay Binh
3/157
3
Phng php TCHTT t trng tm vo hm l hng ti hot ng s
khng thc s tng ng vi cc thc th trong h thng ca th gii thc.
1.1.3. Lp trnh hng i tng
Lp trnh hng i tng (Object Oriented Programming - LTHT) lphng php lp trnh ly i tng lm nn tng xy dng thut gii, xy
dng chng trnh. i tng c xy dng trn csgn cu trc d liu vi
cc phng thc (cc hm/th tc) s th hin c ng cch m chng ta suy
ngh, bao qut v th gii thc. LTHT cho php ta kt hp nhng tri thc bao
qut v cc qu trnh vi nhng khi nim tru tng c s dng trong my
tnh.
im cn bn ca phng php LTHT l thit k chng trnh xoayquanh d liu ca h thng. Ngha l cc thao tc x l ca h thng c gn
lin vi d liu v nh vy khi c s thay i ca cu trc d liu th chnh
hng n mt s t cc phng thc x l lin quan.
LTHT khng cho php d liu chuyn ng t do trong h thng. D liu
c gn cht vi tng phng thc thnh cc vng ring m cc phng thc
tc ng ln v n c bo v cm vic truy nhp ty tin t bn ngoi.
LTHT cho php phn tch bi ton thnh tp cc thc thc gi l cc itng v sau xy dng cc d liu cng vi cc phng thc xung quanh cc
i tng .
Tm li LTHT c nhng c tnh ch yu nhsau:
1. Tp trung vo d liu thay cho cc phng thc.
2. Chng trnh c chia thnh cc lp i tng.
3. Cc cu trc d liu c thit k sao cho c tc cc i tng.
4. Cc phng thc xc nh trn cc vng d liu ca i tng c gnvi nhau trn cu trc d liu .
5. D liu c bao bc, che du v khng cho php cc thnh phn bn
ngoi truy nhp t do.
6. Cc i tng trao i vi nhau thng qua cc phng thc.
7. D liu v cc phng thc mi c th d dng b sung vo i tng no
khi cn thit.
8. Chng trnh c thit k theo cch tip cn bottom-up (di -ln).
-
8/6/2019 Giao Trinh c++. Thay Binh
4/157
4
1.2. Cc khi nim cbn ca lp trnh hng i tng
Nhng khi nim c bn trong LTHT bao gm: i tng; Lp; Tru
tng ha d liu, bao gi thng tin; K tha; Tng ng bi; Lin kt ng;
Truyn thng bo.1.2.1. i tng
Trong th gii thc, khi nim i tng c hiu nh l mt thc th, n
c th l ngi, vt hoc mt bng d liu cn x l trong chng trnh,... Trong
LTHT th i tng l bin th hin ca lp.
1.2.2. Lp
Lp l mt khi nim mi trong LTHT so vi k thut LTHTT. N l
mt bn mu m t cc thng tin cu trc d liu v cc thao tc hp l ca cc
phn t d liu. Khi mt phn t d liu c khai bo l phn t ca mt lp
th n c gi l i tng. Cc hm c nh ngha hp l trong mt lp
c gi l ccphng thc (method) v chng l cc hm duy nht c th x
l d liu ca cc i tng ca lp . Mi i tng c ring cho mnh mt
bn sao cc phn t d liu ca lp. Mi lp bao gm: danh sch cc thuc tnh
(attribute) v danh sch cc phng thc x l cc thuc tnh . Cng thc
phn nh bn cht ca k thut LTHT l:
i tng = D liu + Phng thc
Chng hn, chng ta xt lp HINH_CN bao gm cc thuc tnh: (x1,y1)
to gc trn bn tri, d,r l chiu di v chiu rng ca HCN. Cc phng
thc nhp s liu cho HCN, hm tnh din tch, chu vi v hm hin th. Lp
HINH_CN c thc m t nh sau:
-
8/6/2019 Giao Trinh c++. Thay Binh
5/157
5
Hnh 2.2 M t lp HINH_CN
Ch : Trong LTHT th lp l khi nim tnh, c th nhn bit ngay t vn
bn chng trnh, ngc li i tng l khi nim ng, n c xc nh
trong b nhca my tnh, ni i tng chim mt vng b nhlc thc hin
chng trnh. i tng c to ra x l thng tin, thc hin nhim vc
thit k, sau b hy b khi i tng ht vai tr.1.2.3. Tru tng ha dliu v bao gi thng tin
Tru tng ha l cch biu din nhng c tnh chnh v b qua nhng
chi tit vn vt hoc nhng gii thch. Khi xy dng cc lp, ta phi s dng
khi nim tru tng ha. V d ta c thnh ngha mt lp m t cc i
tng trong khng gian hnh hc bao gm cc thuc tnh tru tng nh l kch
thc, hnh dng, mu sc v cc phng thc xc nh trn cc thuc tnh ny.
Vic ng gi d liu v cc phng thc vo mt n v cu trc lpc xem nh mt nguyn tc bao gi thng tin. D liu c t chc sao cho
th gii bn ngoi (cc i tng lp khc) khng truy nhp vo, m ch cho
php cc phng thc trong cng lp hoc trong nhng lp c quan h k tha
vi nhau mi c quyn truy nhp. Chnh cc phng thc ca lp sng vai
tr nh l giao din gia d liu ca i tng v phn cn li ca chng trnh.
Nguyn tc bao gi d liu ngn cm s truy nhp trc tip trong lp trnh
c gi l s che giu thng tin.
HINH_CN
Thuc tnh :x1,y1
d,r
Phng thc :
Nhp_sl
Din tch
Chu vi
Hin th
-
8/6/2019 Giao Trinh c++. Thay Binh
6/157
6
1.2.4. K tha
Ktha l qu trnh m cc i tng ca lp ny c quyn s dng mt
s tnh cht ca cc i tng ca lp khc. S k tha cho php ta nh ngha
mt lp mi trn cscc lp tn ti. Lp mi ny, ngoi nhng thnh phnc k tha, s c thm nhng thuc tnh v cc hm mi. Nguyn l k tha
h trcho vic to ra cu trc phn cp cc lp.
1.2.5. Tng ng bi
Tng ng bi l kh nng ca mt khi nim (chng hn cc php ton)
c th s dng vi nhiu chc nng khc nhau. V d, php + c th biu din
cho php cng cc s nguyn (int), s thc (float), s phc (complex) hoc
xu k t (string) v.v... Hnh vi ca php ton tng ng bi ph thuc vo kiud liu m n s dng x l.
Tng ng bi ng vai quan trng trong vic to ra cc i tng c cu
trc bn trong khc nhau nhng cng dng chung mt giao din bn ngoi (nh
tn gi).
1.2.6. Lin kt ng
Lin ktng l dng lin kt cc th tc v hm khi chng trnh thc hin
li gi ti cc hm, th tc . Nh vy trong lin kt ng, ni dung ca on
chng trnh ng vi th tc, hm s khng c bit cho n khi thc hin li
gi ti th tc, hm .
1.2.7. Truyn thng bo
Cc i tng gi v nhn thng tin vi nhau ging nh con ngi trao i
vi nhau. Chnh nguyn l trao i thng tin bng cch truyn thng bo cho
php ta d dng xy dng c h thng m phng gn hn nhng h thngtrong th gii thc. Truyn thng bo cho mt i tng l yu cu i tng
thc hin mt vic g . Cch ng x ca i tng c m t bn trong lp
thng qua cc phng thc.
Trong chng trnh, thng bo gi n cho mt i tng chnh l yu cu
thc hin mt cng vic c th, ngha l s dng nhng hm tng ng x l
d liu c khai bo trong i tng . V vy, trong thng bo phi ch ra
c hm cn thc hin trong i tng nhn thng bo. Thng bo truyn i
cng phi xc nh tn i tng v thng tin truyn i. V d, lp
CONGNHAN c th hin l i tng c th c i din bi Hoten nhn
-
8/6/2019 Giao Trinh c++. Thay Binh
7/157
7
c thng bo cn tnh lng thng qua hm TINHLUONG c xc nh
trong lp CONGNHAN. Thng bo sc x l nh sau:
Trong chng trnh hng i tng, mi i tng ch tn ti trong thi
gian nht nh. i tng c to ra khi n c khai bo v s b hy b khi
chng trnh ra khi min xc nh ca i tng . S trao i thng tin ch
c th thc hin trong thi gian i tng tn ti.
1.3. Cc bc cn thit thit k chng trnh theo hng i tngChng trnh theo hng i tng bao gm mt tp cc i tng v mi
quan h gia cc i tng vi nhau. V vy, lp trnh trong ngn ng hng
i tng bao gm cc bc sau:
1. Xc nh cc dng i tng (lp) ca bi ton.
2. Tm kim cc c tnh chung (d liu chung) trong cc dng i tng
ny, nhng g chng cng nhau chia x.
3. Xc nh lp csda trn cscc c tnh chung ca cc dng itng.
4. T lp cs, xy dng cc lp dn xut cha cc thnh phn, nhng c
tnh khng chung cn li ca cc dng i tng. Ngoi ra, ta cn a ra cc lp
c quan h vi cc lp csv lp dn xut.
1.4. Cc u im ca lp trnh hng i tng
Cch tip cn hng i tng gii quyt c nhiu vn tn ti trong
qu trnh pht trin phn mm v to ra c nhng sn phm phn mm ccht lng cao. Nhng u im chnh ca LTHT l:
1. Thng qua nguyn l k tha, c th loi bc nhng on chng
trnh lp li trong qu trnh m t cc lp v mrng kh nng s dng cc lp
c xy dng.
2. Chng trnh c xy dng t nhng n th (i tng) trao i vi
nhau nn vic thit k v lp trnh sc thc hin theo quy trnh nht nh
ch khng phi da vo kinh nghim v k thut nh trc. iu ny m bort ngn c thi gian xy dng h thng v tng nng sut lao ng.
i tng Thng bo Thng tin
-
8/6/2019 Giao Trinh c++. Thay Binh
8/157
8
3. Nguyn l che giu thng tin gip ngi lp trnh to ra c nhng
chng trnh an ton khng b thay bi nhng on chng trnh khc.
4. C th xy dng c nh x cc i tng ca bi ton vo i tng
ca chng trnh.5. Cch tip cn thit kt trng tm vo i tng, gip chng ta xy
dng c m hnh chi tit v gn vi dng ci t hn.
6. Nhng h thng hng i tng d mrng, nng cp thnh nhng h
ln hn.
7. K thut truyn thng bo trong vic trao i thng tin gia cc i
tng gip cho vic m t giao din vi cc h thng bn ngoi trnn n gin
hn.
8. C th qun l c phc tp ca nhng sn phm phn mm.
Khng phi trong h thng hng i tng no cng c tt c cc tnh
cht nu trn. Kh nng c cc tnh cht cn ph thuc vo lnh vc ng
dng ca d n tin hc v vo phng php thc hin ca ngi pht trin phn
mm.
1.5. Cc ngn nghng i tng
Lp trnh hng i tng khng l c quyn ca mt ngn ng no cbit. Cng ging nh lp trnh c cu trc, nhng khi nim trong lp trnh
hng i tng c th ci t trong nhng ngn ng lp trnh nh C hoc
Pascal,... Tuy nhin, i vi nhng chng trnh ln th vn lp trnh s tr
nn phc tp. Nhng ngn ngc thit kc bit, h trcho vic m t, ci
t cc khi nim ca phng php hng i tng c gi chung l ngn
ngi tng. Da vo kh nng p ng cc khi nim v hng i tng, ta
c th chia ra lm hai loi:1. Ngn ng lp trnh da trn i tng
2. Ngn ng lp trnh hng i tng
Lp trnh da trn i tng l kiu lp trnh h trchnh cho vic bao gi,
che giu thng tin v nh danh cc i tng. Lp trnh da trn i tng c
nhng c tnh sau:
Bao gi d liu
Cch che giu v truy nhp d liuTng to lp v xa b cc i tng
-
8/6/2019 Giao Trinh c++. Thay Binh
9/157
9
Php ton ti bi
Ngn ng h trcho kiu lp trnh trn c gi l ngn ng lp trnh da
trn i tng. Ngn ng trong lp ny khng h trcho vic thc hin k tha
v lin kt ng, chng hn Ada l ngn ng lp trnh da trn i tng.Lp trnh hng i tng l kiu lp trnh da trn i tng v b sung
thm nhiu cu trc ci t nhng quan h v k tha v lin kt ng. V
vy c tnh ca LTHT c th vit mt cch ngn gn nh sau:
Cc c tnh da trn i tng + k tha + lin kt ng.
Ngn ng h trcho nhng c tnh trn c gi l ngn ng LTHT, v
d nh C++, Smalltalk, Object Pascal v.v...
Vic chn mt ngn ng ci t phn mm ph thuc nhiu vo cc
c tnh v yu cu ca bi ton ng dng, vo kh nng s dng li ca nhng
chng trnh c v vo t chc ca nhm tham gia xy dng phn mm.
1.6. Mt sng dng ca LTHT
LTHT ang c ng dng pht trin phn mm trong nhiu lnh vc
khc nhau. Trong s, c ng dng quan trng v ni ting nht hin nay l h
iu hnh Windows ca hng Microsoft c pht trin da trn k thut
LTHT. Mt s nhng lnh vc ng dng chnh ca k thut LTHT bao gm:+ Nhng h thng lm vic theo thi gian thc.
+ Trong lnh vc m hnh ha hoc m phng cc qu trnh
+ Cc csd liu hng i tng.
+ Nhng h siu vn bn, multimedia
+ Lnh vc tr tu nhn to v cc h chuyn gia.
+ Lp trnh song song v mng n-ron.
+ Nhng h tng ha vn phng v trgip quyt nh....
-
8/6/2019 Giao Trinh c++. Thay Binh
10/157
10
CHNG 2
CC M RNG CA NGN NG C++
Chng 2 trnh by nhng vn sau y:
Gii thiu chung vngn ngC++Mt smrng ca ngn ngC++ so vi ngn ngC
Cc c tnh ca C++ htrlp trnh hng i tng
Vo ra trong C++
Cp pht v gii phng b nh
Bin tham chiu, hng tham chiu
Truyn tham scho hm theo tham chiu
Hm tr vgi tr tham chiuHm vi tham sc gi tr mc nh
Cc hm ni tuyn (inline)
Hm ti bi
2.1. Gii thiu chung v C++
C++ l ngn ng lp trnh hng i tng v l s mrng ca ngn ng
C. V vy mi khi nim trong C u dng c trong C++. Phn ln cc
chng trnh C u c th chy c trong C++. Trong chng ny ch tptrung gii thiu nhng khi nim, c tnh mi ca C++ h tr cho lp trnh
hng i tng. Mt s kin thc c trong C++ nhng c trong ngn ng C
s khng c trnh by li y.
2.2. Mt s mrng ca C++ so vi C
2.2.1. t li ch thch
Ngoi kiu ch thch trong C bng /* ... */ , C++ a thm mt kiu ch
thch th hai, l ch thch bt u bng //. Kiu ch thch /*...*/c dng
cho cc khi ch thch ln gm nhiu dng, cn kiu //c dng cho cc ch
thch trn mt dng. Chng trnh dch s b qua tt c cc ch thch trong
chng trnh.
V d: /* y l
cu ch thch trn nhiu dng */
//y l ch thch trn mt dng
-
8/6/2019 Giao Trinh c++. Thay Binh
11/157
11
2.2.2. Khai bo bin
Trong C tt c cc cu lnh khai bo bin, mng cc b phi t ti u
khi. V vy v tr khai bo v v tr s dng ca bin c thcch kh xa nhau,
iu ny gy kh khn trong vic kim sot chng trnh. C++ khc phcnhc im ny bng cch cho php cc lnh khai bo bin c tht bt k ch
no trong chng trnh trc khi cc bin c s dng. Phm vi hot ng ca
cc bin kiu ny l khi trong bin c khai bo.
V d 2.1 Chng trnh sau y nhp mt dy s thc ri sp xp theo th t
tng dn:
#include
#include #include
void main()
{
int n;
printf("\n So phan tu cua day N=");
scanf("%d",&n);
float *x=(float*)malloc((n+1)*sizeof(float));for (int i=0;i
-
8/6/2019 Giao Trinh c++. Thay Binh
12/157
12
getch();
}
2.2.3. Php chuyn kiu bt buc
Ngoi php chuyn kiu bt buc c vit trong C theo c php:(kiu) biu thc
C++ cn s dng mt php chuyn kiu mi nh sau:
Kiu(biu thc)
Php chuyn kiu ny c dng nh mt hm s chuyn kiu ang c gi.
Cch chuyn kiu ny thng c s dng trong thc t.
V d 2.2 Chng trnh sau y tnh sau tng S =n
1...
3
1
2
11
Vi n l mt s nguyn dng nhp t bn phm.
#include
#include
void main()
{
int n;
printf("\n So phan tu cua day N=");
scanf("%d",&n);
float s=0.0;
for (int i=1;i
-
8/6/2019 Giao Trinh c++. Thay Binh
13/157
13
#include
#include
void main()
{
float a[20][20],smax;
int m,n,i,j,imax,jmax;
clrscr();
puts(" Cho biet so hang va so cot cua ma tran: ");
scanf("%d%d",&m,&n);
for (i=0;i
-
8/6/2019 Giao Trinh c++. Thay Binh
14/157
14
printf("\n Co gia tri=%6.1f", smax);
printf("\n\n Tai hang %d cot %d",imax,jmax);
getch();
}
2.3. Vo ra trong C++
xut d liu ra mn hnh v nhp d liu t bn phm, trong C++ vn c
th dng hm printf() v scanf(), ngoi ra trong C++ ta c th dng dng
xut/nhp chun nhp/xut d liu thng qua hai bin i tng ca dng
(stream object) l cout v cin.
2.3.1. Xut dliu
C php: cout >bin N;
Ton tcinc nh ngha trc nh mt i tng biu din cho thit b vo
chun ca C++ l bn phm, cinc s dng kt hp vi ton t trch >>
nhp d liu t bn phm cho cc bin 1, 2, ..., N.
Ch :
nhp mt chui khng qu n k t v lu vo mng mt chiu a (kiu
char) c th dng hm cin.get nh sau: cin.get(a,n);
Ton t nhp cin>> s li k t chuyn dng \n trong bm. K t ny
c th lm tri phng thc cin.get. khc phc tnh trng trn cn dng
phng thc cin.ignore(1) b qua mt k t chuyn dng.
s dng cc loi ton t v phng thc ni trn cn khai bo tp tin dn
hng iostream.h
2.3.3. nh dng khi in ra mn hnh
quy nh s thc c hin th ra mn hnh vi p ch s sau du chm
thp phn, ta s dng ng thi cc hm sau:
setiosflags(ios::showpoint); // Bt chiu showpoint(p)setprecision(p);
-
8/6/2019 Giao Trinh c++. Thay Binh
15/157
15
Cc hm ny cn t trong ton t xut nh sau:
cout
-
8/6/2019 Giao Trinh c++. Thay Binh
16/157
16
cout >ts[i].d1>>ts[i].d2>>ts[i].d3;
ts[i].td=ts[i].d1+ts[i].d2+ts[i].d3;
}
for (i=0;i
-
8/6/2019 Giao Trinh c++. Thay Binh
17/157
17
cout
-
8/6/2019 Giao Trinh c++. Thay Binh
18/157
18
2.4.1. Ton tnew cp pht b nh
Ton t new thay cho hm malloc() v calloc() ca C c c php nh sau:
new Tn kiu ;
hoc new (Tn kiu);Trong Tn kiu l kiu d liu ca bin con tr, n c th l: cc kiu d
liu chun nh int, float, double, char,... hoc cc kiu do ngi lp trnh nh
ngha nh mng, cu trc, lp,...
Ch : cp pht b nhcho mng mt chiu, dng c php nh sau:
Bin con tr = new kiu[n];
Trong n l s nguyn dng xc nh s phn t ca mng.
V d: float *p = new float; //cp pht b nhcho bin con tr p c kiu intint *a = new int[100]; //cp pht b nh lu tr mng mt chiu a
// gm 100 phn t
Khi s dng ton t new cp pht b nh, nu khng b nh cp
pht, new s tr li gi tr NULL cho con tr. on chng trnh sau minh ha
cch kim tra li cp pht b nh:
double *p;
int n;cout>n;
p = new double[n]
if (p == NULL)
{
cout
-
8/6/2019 Giao Trinh c++. Thay Binh
19/157
19
gim ca tng im, in danh sch th sinh sau khi sp xp, gii phng b nh
cp pht.
#include
#include #include
#include
#include
struct TS
{
char ht[20];
long sobd;
float td;
};
void main(void)
{
TS *ts;
int n;
coutn;
ts = new TS[n+1];
if (ts == NULL)
{
cout
-
8/6/2019 Giao Trinh c++. Thay Binh
20/157
20
cout>ts[i].td;
}
for (i=0;i
-
8/6/2019 Giao Trinh c++. Thay Binh
21/157
21
cout
-
8/6/2019 Giao Trinh c++. Thay Binh
22/157
22
s thao tc trn cc bn sao ny ch khng x l trc tip vi cc tham s thc
s. Cch ny rt tt nu khi thc hin hm trong chng trnh khng cn lm
thay i gi tr ca bin gc. Tuy nhin, nhiu khi ta li mun nhng tham s
thay i khi thc hin hm trong chng trnh. C++ cung cp thm cch truynd liu cho hm theo tham chiu bng cch dng i l tham chiu. Cch lm
ny c u dim l khng cn to ra cc bn sao ca cc tham s, do d tit kim
b nhv thi gian chy my. Mt khc, hm ny s thao tc trc tip trn vng
nhca cc tham s, do d dng thay i gi tr cc tham s khi cn.
V d 2.7 Chng trnh sau s nhp dy s thc, sp xp dy theo th t tng
dn v hin th ra mn hnh.
#include #include
#include
void nhapds(double *a,int n)
{
for(int i=0;i
-
8/6/2019 Giao Trinh c++. Thay Binh
23/157
23
double x[100];
int i,n;
clrscr();
coutn;
nhapds(x,n);
sapxep(x,n);
cout
-
8/6/2019 Giao Trinh c++. Thay Binh
24/157
24
coutts[i].d2>>ts[i].d3;
ts[i].td=ts[i].d1+ts[i].d2+ts[i].d3;
}
}
void hvts(TS &ts1,TS &ts2)
{
TS tg=ts1;
ts1=ts2;
ts2=tg;
}
void sapxep(TS *ts,int n)
{
for(int i=0;i
-
8/6/2019 Giao Trinh c++. Thay Binh
25/157
25
ints(ts[i]);
else
break;
getch();
}
V d 2.9 Chng trnh sau s nhp mt mng thc kch thc 20x20, in mng
nhp v in cc phn t ln nht v nh nht trn mi hng ca mng.
#include
#include
#include
#include
void nhapmt(float a[20][20],int m,int n)
{
for(int i=0;i
-
8/6/2019 Giao Trinh c++. Thay Binh
26/157
26
for(int i=1;ix[vtmax]) vtmax=i;
if(x[i]>n;
nhapmt(a,m,n);
inmt(a,m,n);
float *p=(float*) a;
int vtmax,vtmin;
for(int i=0;i
-
8/6/2019 Giao Trinh c++. Thay Binh
27/157
27
}
Trong trng hp ny biu thc c tr li trong cu lnh return phi l
tn ca mt bin xc nh t bn ngoi hm, bi v khi mi c th s dng
c gi tr ca hm. Khi ta tr v mt tham chiu n mt bin cc b khai bobn trong hm, bin cc b ny s b mt i khi kt thc thc hin hm. Do vy
tham chiu ca hm s khng cn ngha na.
Khi gi tr tr v ca hm l tham chiu, ta c th gp cc cu lnh gn hi
khc thng, trong v tri l mt li gi hm ch khng phi l tn ca mt
bin. iu ny hon ton hp l, bi v bn thn hm c gi tr tr v l mt
tham chiu. Ni cch khc, v tri ca lnh gn c th l li gi n mt hm c
gi tr tr v l mt tham chiu.Xem cc v d sau:
V d 2.10
#include
#include
int z;
int &f()// ham tra ve mot bi danh cua bien toan bo z
{
return z;
}
void main()
{
f()=50;//z=50
cout
-
8/6/2019 Giao Trinh c++. Thay Binh
28/157
28
clrscr();
int b =10, a= 7, c= 20;
cout
-
8/6/2019 Giao Trinh c++. Thay Binh
29/157
29
{
//Cc cu lnh
}
Ch :i vi cc hm c tham s mc nh th li gi hm cn vit theo quynh: Cc tham s vng mt trong li gi hm tng ng vi cc tham s mc
nh cui cng (tnh t tri sang phi), v d vi hm:
void f(int a, float x, char *st=TRUNG TAM, int b=1, double y = 1.234);
th cc li gi hm ng:
f(3,3.4,TIN HOC,10,1.0);//y tham s
f(3,3.4,ABC); //Thiu 2 tham s cui
f(3,3.4); //Thiu 3 tham s cui
Cc li gi hm sai:
f(3);
f(3,3.4, ,10);
V d 2.12
#include
#include
void ht(char *dc="TRUNG TAM",int n=5);void ht(char *dc,int n)
{
for(int i=0;i
-
8/6/2019 Giao Trinh c++. Thay Binh
30/157
30
mi on chong trnh thc hin nhim v ca hm c thay bng li gi hm.
Tuy nhin hm cng c nhc im l lm l chm tc thc hin chng
trnh v phi thc hin mt s thao tc c tnh th tc mi khi gi hm nh: cp
pht vng nhcho cc tham s v bin cc b, truyn d liu ca cc tham scho cc i, gii phng vng nhtrc khi thot khi hm.
C++ cho kh nng khc phc c nhc im ni trn bng cch dng
hm ni tuyn. bin mt hm thnh hm ni tuyn ta vit thm t kha
inline vo trc khai bo nguyn mu hm.
Ch : Trong mi trng hp, t kha inline phi xut hin trc cc li gi
hm th trnh bin dch mi bit cn x l hm theo kiu inline.
V d hm f() trong chng trnh sau s khng phi l hm ni tuyn v inline
vit sau li gi hm.
V d 2.13
#include
#include
void main()
{
int s ;s=f(5,6);
cout
-
8/6/2019 Giao Trinh c++. Thay Binh
31/157
31
hm theo kiu ni tuyn. T kho inline ch l mt t kho gi cho chng
trnh dch ch khng phi l mt mnh lnh bt buc.
V d 2.14 Chong trnh sau s dng hm inline tnh chu vi v din tch hnh
ch nht.#include
#include
inline void dtcvhcn(int a,int b,int &dt,int &cv)
{
dt=a*b;
cv=2*(a+b);
}void main()
{
int a[20],b[20],cv[20],dt[20],n;
coutn;
for(int i=0;i
-
8/6/2019 Giao Trinh c++. Thay Binh
32/157
32
#include
inline void dtcvhcn(int a,int b,int &dt,int &cv);
void main()
{
int a[20],b[20],cv[20],dt[20],n;
coutn;
for(int i=0;i
-
8/6/2019 Giao Trinh c++. Thay Binh
33/157
-
8/6/2019 Giao Trinh c++. Thay Binh
34/157
34
}
int max(int *x,int n)
{
int s=x[0];
for(int i=1;i
-
8/6/2019 Giao Trinh c++. Thay Binh
35/157
35
Ch : Nu hai hm trng tn v trng i th trnh bin dch khng th phn
bit c. Ngay c khi hai hm ny c cng kiu khc nhau th trnh bin dch
vn bo li. V d sau xy dng hai hm cng c tn l f v cng mt i
nguyn a, nhng kiu hm khc nhau. Hm th nht c kiu nguyn( tr v a*a),hm th hai c kiu void. Chng trnh sau s b thng bo li khi bin dch.
V d 2.17
#include
#include
int f(int a);
void f(int a);
int f(int a){
return a*a;
}
void f(int a)
{
cout
-
8/6/2019 Giao Trinh c++. Thay Binh
36/157
36
BI TP
1. Vit chng trnh thc hin cc yu cu sau y:
- Nhp d liu cho cc sinh vin (dng cu trc danh sch lin kt n),
cc thng tin ca sinh vin bao gm: m sinh vin, h tn, lp, imtrung bnh.
- Chng trnh c s dng ton t new v delete.
- In ra danh sch sinh vin c sp xp v th theo im trung bnh.
2. Vit chng trnh sp xp mt mng thc hai chiu theo th t tng
dn, trong chng trnh c c s dng ton t new v delete.
3. Vit cc hm ti bi tnh din tch tam gic, din tch hnh ch nht,
din tch hnh trn.
4. Vit chng trnh nhn hai ma trn Amxn v Bnxp , mi ma trn c cp
pht ng v cc gi tr ca chng pht sinh ngu nhin.
-
8/6/2019 Giao Trinh c++. Thay Binh
37/157
37
CHNG 3
LP
Chng ny trnh by nhng vn sau y:
nh ngh
a lp
To lp i tng
Truy nhp n cc thnh phn ca lp
Con tri tng
Con tr this
Hm bn
Dliu thnh phn tnh, hm thnh phn tnh
Hm to, hm hy
Hm to sao chp
Lp l khi nim trung tm ca lp trnh hng i tng, n l s m
rng ca cc khi nim cu trc (struct) ca C. Ngoi cc thnh phn d liu,
lp cn cha cc thnh phn hm, cn gi l phng thc (method) hoc hm
thnh vin (member function). Lp c th xem nh mt kiu d liu cc bin,
mng i tng. T mt lp nh ngha, c th to ra nhiu i tng khc
nhau, mi i tng c vng nhring.
Chng ny s trnh by cch nh ngha lp, cch xy dng phng thc,
gii thch v phm vi truy nhp, s dng cc thnh phn ca lp, cch khai bo
bin, mng cu trc, li gi ti cc phng thc .
3.1. nh ngha lp
C php: Lp c nh ngha theo mu :
class tn_lp{
private: [Khai bo cc thuc tnh]
[nh ngha cc hm thnh phn (phng thc)]
public : [Khai bo cc thuc tnh]
[nh ngha cc hm thnh phn (phng thc)]
} ;
Thuc tnh ca lp c gi l d liu thnh phn v hm c gi lphng thc hoc hm thnh vin. Thuc tnh v hm c gi chung l cc
-
8/6/2019 Giao Trinh c++. Thay Binh
38/157
38
thnh phn ca lp. Cc thnh phn ca lp c t chc thnh hai vng: vng
s hu ring (private) v vng dng chung (public) quy nh phm vi s
dng ca cc thnh phn. Nu khng quy nh c th (khng dng cc t kha
private v public) th C++ hiu l private. Cc thnh phn private chc sdng bn trong lp (trong thn ca cc hm thnh phn). Cc thnh phn public
c php s dng c bn trong v bn ngoi lp. Cc hm khng phi l hm
thnh phn ca lp th khng c php s dng cc thnh phn ny.
Khai bo cc thu c tnh ca lp: c thc hin y nh vic khai bo bin.
Thuc tnh ca lp khng th c kiu chnh ca lp , nhng c th l kiu con
tr ca lp ny,
V d:
class A
{
A x; //Khng cho php, v x c kiu lp A
A *p ; // Cho php, v p l con tr kiu lp A
} ;
nh ngha cc hm thnh phn: Cc hm thnh phn c thc xy
dng bn ngoi hoc bn trong nh ngha lp. Thng thng, cc hm thnh
phn n gin, c t dng lnh sc vit bn trong nh ngha lp, cn cc
hm thnh phn di th vit bn ngoi nh ngha lp. Cc hm thnh phn vit
bn trong nh ngha lp c vit nh hm thng thng. Khi nh ngha hm
thnh phn bn ngoi lp, ta dng c php sau y:
Kiu_tr_v_ca_hm Tn_lp::Tn_hm(khai bo cc tham s)
{ [ni dung hm]
}
Ton t :: c gi l ton t phn gii min xc nh, c dng ch ra
lp m hm thuc vo.
Trong thn hm thnh phn, c th s dng cc thuc tnh ca lp, cc hm
thnh phn khc v cc hm t do trong chng trnh.
Ch :
Cc thnh phn d liu khai bo l private nhm bo m nguyn l che
du thng tin, bo v an ton d liu ca lp, khng cho php cc hm
bn ngoi xm nhp vo d liu ca lp .
-
8/6/2019 Giao Trinh c++. Thay Binh
39/157
39
Cc hm thnh phn khai bo l public c thc gi ti t cc hm
thnh phn public khc trong chng trnh .
3.2. To lp i tng
Sau khi nh ngha lp, ta c th khai bo cc bin thuc kiu lp. Cc binny c gi l cc i tng. C php khai bo bin i tng nh sau:
Tn_lp Danh_sch_bin ;
i tng cng c th khai bo khi nh ngha lp theo c php sau:
class tn_lp
{
...
} ;
Mi i tng sau khi khai bo sc cp pht mt vng nhring
cha cc thuc tnh ca chng. Khng c vng nhring cha cc hm thnh
phn cho mi i tng. Cc hm thnh phn sc s dng chung cho tt c
cc i tng cng lp.
3.3. Truy nhp ti cc thnh phn ca lp
truy nhp n d liu thnh phn ca lp, ta dng c php:Tn_i_tng. Tn_thuc_tnh
Cn ch rng d liu thnh phn ring ch c thc truy nhp bi nhng
hm thnh phn ca cng mt lp, i tng ca lp cng khng th truy nhp.
s dng cc hm thnh phn ca lp, ta dng c php:
Tn_i_tng. Tn_hm (Cc_khai_bo_tham_s_thc_s)
V d 3.1
#include
#include
class DIEM
{
private :
int x,y ;
public :
void nhapsl( ){
-
8/6/2019 Giao Trinh c++. Thay Binh
40/157
40
cout >x>>y ;
}
void hienthi( )
{ cout
-
8/6/2019 Giao Trinh c++. Thay Binh
41/157
41
A ob;
ob.nhap();
ob.hienthi();
getch();
}
Ch : Cc hm t do c th c cc i l i tng nhng trong thn hm
khng th truy nhp n cc thuc tnh ca lp. V d gi s nh ngha lp :
class DIEM
{
private :
double x,y ; // toa do cua diem
public :
void nhapsl()
{
cout > x>>y ;
}
void in()
{
cout
-
8/6/2019 Giao Trinh c++. Thay Binh
42/157
42
#include
class Box
{
private:
int dai;
int rong;
int cao;
public:
int get_thetich(int lth,int wdth = 2,int ht = 3);
};
int Box::get_thetich(int l, int w, int h)
{
dai = l;
rong = w;
cao = h;
cout
-
8/6/2019 Giao Trinh c++. Thay Binh
43/157
43
10 2 3 60
10 7 3 210
5 5 5 125
V d 3.4 V d sau minh ha vic s dng hm inline trong lp:
#include
#include
#include
class phrase
{
private:char dongtu[10];
char danhtu[10];
char cumtu[25];
public:
phrase();
inline void set_danhtu(char* in_danhtu);
inline void set_dongtu(char* in_dongtu);inline char* get_phrase(void);
};
void phrase::phrase()
{
strcpy(danhtu,"");
strcpy(dongtu,"");
strcpy(cumtu,"");
}
inline void phrase::set_danhtu(char* in_danhtu)
{
strcpy(danhtu, in_danhtu);
}
inline void phrase::set_dongtu(char* in_dongtu)
{
strcpy(dongtu, in_dongtu);
}
-
8/6/2019 Giao Trinh c++. Thay Binh
44/157
44
inline char* phrase::get_phrase(void)
{
strcpy(cumtu,dongtu);
strcat(cumtu," the ");
strcat(cumtu,danhtu);
return cumtu;
}
void main()
{
phrase text;
cout
-
8/6/2019 Giao Trinh c++. Thay Binh
45/157
45
int number;
public:
void print_it(const int data_value);
};
void constants::print_it(const int data_value)
{
number = data_value;
cout
-
8/6/2019 Giao Trinh c++. Thay Binh
46/157
46
3.4. Con tri tng
Con tri tng dng cha a ch ca bin i tng, c khai bo
nh sau :
Tn_lp * Tn_con_ tr ;V d : Dng lp DIEM, ta c th khai bo:
DIEM *p1, *p2, *p3 ; // Khai bo 3 con tr p1, p2, p3
DIEM d1, d2 ; //Khai bo hai i tng d1, d2
DIEM d [20] ; // Khai bo mng i tng
C th thc hin cu lnh :
p1 = &d2 ; //p1 cha a ch ca d2, p1 tr ti d2
p2 =d ; // p2 tr ti u mng dp3 =new DIEM //to mt i tng v cha a ch ca n vo p3
truy xut cc thnh phn ca lp t con tri tng, ta vit nh sau :
Tn_con_tr -> Tn_thuc_tnh
Tn_con_tr -> Tn_hm(cc tham s thc s)
Nu con tr cha u a ch ca mng, c th dng con tr nh tn mng.
V d 3.6
#include #include
class mhang
{ int maso;
float gia;
public: void getdata(int a, float b)
{maso= a; gia= b;}
void show(){ cout
-
8/6/2019 Giao Trinh c++. Thay Binh
47/157
47
int x,i;
float y;
cout getdata(x,y);
p++;}
for (i = 0; i
-
8/6/2019 Giao Trinh c++. Thay Binh
48/157
48
cin >>this->x>>this->y ;
}
Con trthis l i th nht ca hm thnh phn. Khi mt li gi hm thnh
phn c pht ra bi mt i tng th tham s truyn cho con trthis
chnh la ch ca i tng .
V d: Xt mt li gi ti hm nhapsl() :
DIEM d1 ;
d1.nhapsl();
Trong trng hp ny ca d1 th this =&d1. Do this -> x chnh l d1.x v
this-> y chnh l d1.y
Ch : Ngoi tham sc bit this khng xut hin mt cch tng minh, hm
thnh phn lp c th c cc tham1 khc c khai bo nh trong cc hm
thng thng.
V d 3.7
#include
#include
class time
{ int h,m;public :
void nhap(int h1, int m1)
{ h= h1; m = m1;}
void hienthi(void)
{ cout
-
8/6/2019 Giao Trinh c++. Thay Binh
49/157
49
time ob1, ob2,ob3;
ob1.nhap(2,45);
ob2.nhap(5,40);
ob3.tong(ob1,ob2);
cout
-
8/6/2019 Giao Trinh c++. Thay Binh
50/157
50
...
}
double f2 (...)
{ ...
}
Cch 2: Dng t kha friend xy dng hm trong nh ngha lp . Mu vit
nh sau :
class A
{
private :
// Khai bo cc thuc tnh
public :
...
// Khai bo cc hm bn ca lp A
void f1 (...)
{
...
}
double f2 (...)
{
...
}
} ;
Hm bn c nhng tnh cht sau:
- Hm bn khng phi l hm thnh phn ca lp.
- Vic truy nhp ti hm bn c thc hin nh hm thng thng.
- Trong thn hm bn ca mt lp c th truy nhp ti cc thuc tnh ca i
tng thuc lp ny. y l s khc nhau duy nht gia hm bn v hm thng
thng.
- Mt hm c th l bn ca nhiu lp. Lc n c quyn truy nhp ti tt c
cc thuc tnh ca cc i tng trong cc lp ny. lm cho hm f trthnhbn ca cc lp A, B v C ta s dng mu vit sau :
-
8/6/2019 Giao Trinh c++. Thay Binh
51/157
51
class A ; //Khai bo trc lp A
class B ; // Khai bo trc lp B
class C ; // Khai bo trc lp C
//nh ngha lp Aclass A
{
// Khai bo f l bn ca A
friend void f(... )
} ;
//nh ngha lp B
class B
{
// Khai bo f l bn ca B
friend void f(...)
} ;
//nh ngha lp C
class C
{
// Khai bo f l bn ca C
friend void f(...)
} ;
// Xy dng hm f
void f(...)
{
...
} ;
V d 3.8
#include
#include
class sophuc
{float a,b;
public : sophuc() {}
sophuc(float x, float y)
{a=x; b=y;}
-
8/6/2019 Giao Trinh c++. Thay Binh
52/157
52
friend sophuc tong(sophuc,sophuc);
friend void hienthi(sophuc);
};
sophuc tong(sophuc c1,sophuc c2)
{sophuc c3;
c3.a=c1.a + c2.a ;
c3.b=c1.b + c2.b ;
return (c3);
}
void hienthi(sophuc c)
{cout
-
8/6/2019 Giao Trinh c++. Thay Binh
53/157
53
public:
void nhap(int a)
{ v2=a;}
void hienthi(void)
{ cout
-
8/6/2019 Giao Trinh c++. Thay Binh
54/157
54
cout
-
8/6/2019 Giao Trinh c++. Thay Binh
55/157
55
int A::ts; // Khi gn cho ts gi tr 0
int A::ts = 1234; // Khi gn cho ts gi tr 1234
Ch : Khi cha khai bo th thnh phn tnh cha tn ti. Hy xem chng
trnh sau:V d 3.10
#include
#include
class HDBH
{
private:
char *tenhang;
double tienban;
static int tshd;
static double tstienban;
public:
static void in()
{
cout
-
8/6/2019 Giao Trinh c++. Thay Binh
56/157
56
class HDBH
{
private:
int shd;
char *tenhang;
double tienban;
static int tshd;
static double tstienban;
public:
static void in()
{
cout
-
8/6/2019 Giao Trinh c++. Thay Binh
57/157
57
Tn lp :: Tn hm thnh phn tnh(cc tham s thc s)
- V hm thnh phn tnh l c lp vi cc i tng, nn khng th dng hm
thnh phn tnh x l d liu ca cc i tng trong li gi phng thc
tnh. Ni cch khc khng cho php truy nhp cc thuc tnh (tr thuc tnhtnh) trong thn hm thnh phn tnh. on chng trnh sau minh ha iu ny:
class HDBH
{
private:
int shd;
char *tenhang;
double tienban;
static int tshd;
static double tstienban;
public:
static void in()
{
cout
-
8/6/2019 Giao Trinh c++. Thay Binh
58/157
58
}
static void show_n(void)
{
cout
-
8/6/2019 Giao Trinh c++. Thay Binh
59/157
59
c th thc hin mt s cng vic khc nhm chun b cho i tng mi. Khi
xy dng hm to cn lu nhng c tnh sau ca hm to:
- Tn hm to trng vi tn ca lp.
- Hm to khng c kiu tr v.- Hm to phi c khai bo trong vng public.
- Hm to c thc xy dng bn trong hoc bn ngoi nh ngha lp.
- Hm to c th c tham s hoc khng c tham s.
- Trong mt lp c th c nhiu hm to (cng tn nhng khc cc tham
s).
V d 3.13
class DIEM{
private:
int x,y;
public:
DIEM() //Ham tao khong tham so
{
x = y = 0;}
DIEM(int x1, int y1) //Ham tao co tham so
{
x = x1;y=y1;
}
//Cac thanh phan khac
};
Ch 1: Nu lp khng c hm to, chng trnh dch s cung cp mt hm to
mc nh khng i, hm ny thc cht khng lm g c. Nh vy mt i tng
to ra chc cp pht b nh, cn cc thuc tnh ca n cha c xc nh.
V d 3.14
#include
#inlcule
class DIEM
{
CH
-
8/6/2019 Giao Trinh c++. Thay Binh
60/157
60
private:
int x,y;
public:
void in()
{
cout
-
8/6/2019 Giao Trinh c++. Thay Binh
61/157
61
#include
#include
#include
class DIEM
{
private:
int x,y;
public:
DIEM()
{
x = y = 0;
}
DIEM(int x1, int y1)
{
x = x1; y = y1;
}
friend void in(DIEM d)
{
cout
-
8/6/2019 Giao Trinh c++. Thay Binh
62/157
62
in(*d); // Goi ham ban in()
DIEM(2,2).in();// Goi ham thanh phan in()
DIEM t[3]; // 3 lan goi ham tao khong doi
DIEM *q; // Goi ham tao khong doi
int n;
cout > n;
q = new DIEM [n+1]; //n+1 lan goi ham tao khong doi
for (int i=0;i
-
8/6/2019 Giao Trinh c++. Thay Binh
63/157
63
{
cout
-
8/6/2019 Giao Trinh c++. Thay Binh
64/157
64
{
cout
-
8/6/2019 Giao Trinh c++. Thay Binh
65/157
65
void rectangle::set(int new_dai,int new_rong)
{
dai = new_dai;
rong = new_rong;
}
int rectangle::get_area()
{
return (dai * rong);
}
int rectangle::get_extra()
{
return extra_data++; }
void main()
{
rectangle small, medium, large;
small.set(5, 7);
large.set(15, 20);
cout
-
8/6/2019 Giao Trinh c++. Thay Binh
66/157
66
Gia tri du lieu tinh la : 2
Gia tri du lieu tinh la : 3
3.9. Hm to sao chp
3.9.1. Hm to sao chp mc nh
Gi s nh ngha mt lp ABC no . Khi :
- Ta c th dng cu lnh khai bo hoc cp pht b nh to cc i
tng mi, v d:
ABC p1, p2;
ABC *p = new ABC;
- Ta cng c th dng lnh khai bo to mt i tng mi t mt i
tng tn ti, v d:ABC u;
ABC v(u); // To v theo u
Cu lnh ny c ngha nh sau:
- Nu trong lp ABC cha xy dng hm to sao chp, th cu lnh ny
s gi ti mt hm to sao chp mc nh ca C++. Hm ny s sao chp ni
dung tng bit ca u vo cc bit tng ng ca v. Nh vy cc vng nhca u v
v s c ni dung nh nhau.- Nu trong lp ABC c hm to sao chp th cu lnh:
PS v(u);
s to ra i tng mi v, sau gi ti hm to sao chp khi gn v theo u.
V d sau minh ha cch dng hm to sao chp mc nh:
Trong chng trnh a vo lp PS (phn s):
+ Cc thuc tnh gm: t (t s) v m (mu).
+ Trong lp m khng c phng thc no c m ch c hai hm bn lcc hm ton t nhp (>>) v xut (
-
8/6/2019 Giao Trinh c++. Thay Binh
67/157
67
private: int t,m;
public:
friend ostream& operator
-
8/6/2019 Giao Trinh c++. Thay Binh
68/157
68
public:
PS(const PS &p)
{
t= p.t;
m= p.m;
}
};
Hm to sao chp trong v d trn khng khc g hm to sao chp mc nh.
Ch :
- Nu lp khng c cc thuc tnh kiu con tr hoc tham chiu th dng
hm to sao chp mc nh l .
- Nu lp c cc thuc tnh con tr hoc tham chiu, th hm to sao chp
mc nh cha p ng c yu cu.
class DT
{
private:
int n; // Bac da thuc
double *a; // Tro toi vung nho chua cac he so da thuc a0, a1,
public:
DT()
{
n = 0; a = NULL;
}
DT(int n1)
{n = n1;
a = new double[n1+1];
}
friend ostream& operator> (istream& is,DT &d);
};
-
8/6/2019 Giao Trinh c++. Thay Binh
69/157
69
By gichng ta hy theo di xem vic dng hm to mc nh trong on
chng trnh sau s dn n sai lm nh th no:
DT d;
cin >> d; /* Nhp i tng d gm: nhp mt s nguyn dng v gn cho d.n, cp
pht vng nhcho d.n, nhp cc h s ca a thc v cha vo vng nhc
cp pht
*/
DT u(d);
/* Dng hm to mc nh xy dng i tng u theo d. Kt qu: u.n =
d.n v u.a = d.a. Nh vy hai con tr u.a v d.a cng trn mt vng nh.
*/
Nhn xt: Mc ch ca ta l to ra mt i tng u ging nh d, nhng c lp
vi d. Ngha l khi d thay i th u khng bnh hng g. Th nhng mc tiu
ny khng t c, v u v d c chung mt vng nhcha h s ca a thc,
nn khi sa i cc h s ca a thc trong d th cc h s ca a thc trong u
cng thay i theo. Cn mt trng hp na cng dn n li l khi mt trong
hai i tng u v d b gii phng (thu hi vng nhcha a thc) th i tng
cn li cng s khng cn vng nhna.
V d sau s minh ha nhn xt trn: Khi d thay i th u cng thay i v
ngc li khi u thay i th d cng thay i theo.
V d 3.20
#include
#include
#include
class DT
{
private:
int n; // Bac da thuc
double *a; // Tro toi vung nho chua cac he
//so da thuc a0,a1,...
public:
DT()
{
-
8/6/2019 Giao Trinh c++. Thay Binh
70/157
70
this->n=0; this->a=NULL;
}
DT(int n1)
{
this->n=n1;
this->a= new double[n1+1];
}
friend ostream& operator> (istream& is,DT &d);
};
ostream& operator
-
8/6/2019 Giao Trinh c++. Thay Binh
71/157
71
clrscr();
cout d;
DT u(d);
cout
-
8/6/2019 Giao Trinh c++. Thay Binh
72/157
72
friend ostream& operator> (istream& is,DT &d);
};
DT::DT(const DT &d)
{
this->n = d.n;
this->a = new double[d.n+1];
for (int i=0;ia[i] = d.a[i];
}
ostream& operator
-
8/6/2019 Giao Trinh c++. Thay Binh
73/157
73
clrscr();
cout d;
DT u(d);
cout
-
8/6/2019 Giao Trinh c++. Thay Binh
74/157
74
public:
~A()
{
n = 0;
delete a;
}
};
V d 3.22
#include
class Count{
private:
static int counter;
int obj_id;
public:
Count();
static void display_total();
void display();
~Count();
};
int Count::counter;
Count::Count()
{
counter++;
obj_id = counter;
}
Count::~Count(){
counter--;
cout
-
8/6/2019 Giao Trinh c++. Thay Binh
75/157
75
}
void Count::display()
{
cout
-
8/6/2019 Giao Trinh c++. Thay Binh
76/157
76
BI TP
1. Xy dng lp thi gian Time. D liu thnh phn bao gm gi, pht giy.
Cc hm thnh phn bao gm: hm to, hm truy cp d liu, hm
normalize() chun ha d liu nm trong khong quy nh ca gi(0 gi< 24) , pht (0 pht
-
8/6/2019 Giao Trinh c++. Thay Binh
77/157
77
7. Xy dng lp hng i Queue cha phn t kiu int. Cc hm thnh phn
bao gm: hm to, hm hy v nhng ton t hng i thng thng: hm
insert() thm phn t vo hng i, hm remove() loi b phn
t, hm isEmpty() kim tra hng i c rng khng, hm isFull() kimtra hng i c y khng. S dng mt mng thc hin.
4. Xy dng lp a thc v cc phng thc cng, tr hai a thc.
8. Xy dng lp Sinhvien qun l h tn sinh vin, nm sinh, im thi 9 mn
hc ca cc sinh vin. Cho bit sinh vin no c lm kha lun tt nghip,
bao nhiu sinh vin thi tt nghip, bao nhiu sinh vin thi li, tn mn thi li>
Tiu chun xt nh sau:
- Sinh vin lm kha lun phi c im trung bnh t 7 tr ln, trong khng c mn no di 5.
- Sinh vin thi t nghip khi im trung bnh nh hn 7 v im cc mn
khng di 5.
- Sinh vin thi li mn di 5.
9. Xy dng lp vector lu tr cc vectgm cc s thc. Cc thnh phn
d liu bao gm:
- Kch thc vect.
- Mt mng ng cha cc thnh phn ca vect.
Cc hm thnh phn bao gm hm to, hm hy, hm tnh tch v hng hai
vect, tnh chun ca vect(theo chun bt k no ).
10. Xy dng lp Phanso vi d liu thnh phn l t v mu s. Cc hm
thnh phn bao gm:
- Cng hai phn s, kt qu phi dc ti gin
- Tr hai phn s, kt qu phi dc ti gin
- Nhn hai phn s, kt qu phi dc ti gin
- Chia hai phn s, kt qu phi dc ti gin
-
8/6/2019 Giao Trinh c++. Thay Binh
78/157
78
CHNG 4
TON T TI BI
Chng 4 trnh by cc vn sau:
nh ngh
a ton t
ti b
iMt slu khi xy dng ton tti bi
Mt sv d minh ha
4.1. nh ngha ton tti bi
Cc ton t cng tn thc hin nhiu chc nng khc nhau c gi l ton
t ti bi. Dng nh ngha tng qut ca ton t ti bi nh sau:
Kiu_tr_v operator op(danh sch tham s)
{//thn ton t}Trong : Kiu_tr_v l kiu kt qu thc hin ca ton t.
op l tn ton t ti bi
operator op(danh sch tham s) gi l hm ton t ti bi, n c th
l hm thnh phn hoc l hm bn, nhng khng th l hm tnh. Danh sch
tham sc khai bo tng t khai bo bin nhng phi tun theo nhng quy
nh sau:
- Nu ton t ti bi l hm thnh phn th: khng c tham s cho ton t mtngi v mt tham s cho ton t hai ngi. Cng ging nh hm thnh phn
thng thng, hm thnh phn ton t c i u tin (khng tng minh) l
con tr this .
- Nu ton t ti bi l hm bn th: c mt tham s cho ton t mt ngi v hai
tham s cho ton t hai ngi.
Qu trnh xy dng ton tti bi c thc hin nhsau:
- nh ngha lp xc nh kiu d liu sc s dng trong cc ton tti bi
- Khai bo hm ton t ti bi trong vng public ca lp
- nh ngha ni dung cn thc hin
4.2. Mt s lu khi xy dng ton tti bi
1. Trong C++ ta c th a ra nhiu nh ngha mi cho hu ht cc ton t
trong C++, ngoi tr nhng ton t sau y:
- Ton t xc nh thnh phn ca lp (.)- Ton t phn gii min xc nh (::)
-
8/6/2019 Giao Trinh c++. Thay Binh
79/157
79
- Ton t xc nh kch thc (sizeof)
- Ton tiu kin 3 ngi (?:)
2. Mc du ng ngha ca ton tc mrng nhng c php, cc quy tc vn
phm nh s ton hng, quyn u tin v th t kt hp thc hin ca cc tont vn khng c g thay i.
3. Khng th thay i ngha cbn ca cc ton t nh ngha trc, v d
khng thnh ngha li cc php ton +, - i vi cc s kiu int, float.
4. Cc ton t = , ( ) , [ ] , -> yu cu hm ton t phi l hm thnh phn ca
lp, khng th dng hm bn nh ngha ton t ti bi.
4.3. Mt s v d
V d 4.1 Ton t ti bi mt ngi, dng hm bn#include
#include
class Diem
{
private:
float x,y,z;
public:Diem() {}
Diem(float x1,float y1,float z1)
{ x = x1; y = y1; z=z1;}
friend Diem operator -(Diem d)
{
Diem d1;
d1.x = -d.x; d1.y = -d.y;d1.z=-d.z;
return d1;
}
void hienthi()
{ cout
-
8/6/2019 Giao Trinh c++. Thay Binh
80/157
80
clrscr();
Diem p(2,3,-4),q;
q = -p;
p.hienthi();
q.hienthi();
getch();
}
V d 4.2 Ton t ti bi hai ngi, dng hm bn
#include
#include
class Diem
{
private:
float x,y,z;
public:
Diem() {}
Diem(float x1,float y1,float z1)
{ x = x1; y = y1; z=z1;}
friend Diem operator +(Diem d1, Diem d2)
{
Diem tam;
tam.x = d1.x + d2.x;
tam.y = d1.y + d2.y;
tam.z = d1.z + d2.z;
return tam;
}void hienthi()
{ cout
-
8/6/2019 Giao Trinh c++. Thay Binh
81/157
81
d3=d1+d2;
d1.hienthi();
d2.hienthi();
cout
-
8/6/2019 Giao Trinh c++. Thay Binh
82/157
82
}
V d 4.4 Ton t ti bi hai ngi, dng hm thnh phn
#include
#include class Diem
{
private:
float x,y,z;
public:
Diem() {}
Diem(float x1,float y1,float z1)
{ x = x1; y = y1; z=z1;}
Diem operator +(Diem d2)
{
x = x + d2.x;
y = y + d2.y;
z = z + d2.z;
return (*this);
}
void hienthi()
{ cout
-
8/6/2019 Giao Trinh c++. Thay Binh
83/157
83
}
V d 4.5
#include
#include class Diem
{
private:
int x,y;
public:
Diem() {}
Diem(int x1,int y1)
{ x = x1; y = y1;}
void operator -()
{
x = -x; y = -y;
}
void hienthi()
{ cout
-
8/6/2019 Giao Trinh c++. Thay Binh
84/157
84
sophuc(float x, float y)
{a=x; b=y;}
sophuc operator +(sophuc c2)
{ sophuc c3;
c3.a= a + c2.a ;
c3.b= b + c2.b ;
return (c3);
}
void hienthi(sophuc c)
{ cout
-
8/6/2019 Giao Trinh c++. Thay Binh
85/157
85
{
a= a + c2.a ;
b= b + c2.b ;
return (*this);
}
void hienthi(sophuc c)
{ cout
-
8/6/2019 Giao Trinh c++. Thay Binh
86/157
86
{ cout
-
8/6/2019 Giao Trinh c++. Thay Binh
87/157
87
string string::operator =(string s2)
{
strcpy(s,s2.s) ;
return *this;
}
int string::operator 0 ;
}
int string::operator ==(string s2)
{
return strcmp(s,s2.s)==0 ;
}
void main()
{ clrscr();
string o1 ("Trung Tam "), o2 (" Tin hoc"), o3;
cout
-
8/6/2019 Giao Trinh c++. Thay Binh
88/157
88
if (o2 == o3)
cout
-
8/6/2019 Giao Trinh c++. Thay Binh
89/157
89
}
Diem Diem::operator ++(int)
{
Diem temp = *this;
++*this;
return temp;
}
Diem & Diem::operator --()
{
x--;
y--;
return (*this);
}
Diem Diem::operator --(int)
{
Diem temp = *this;
--*this;
return temp;
}
void main()
{
clrscr();
Diem d1(5,10),d2(20,25),d3(30,40),d4(50,60);
cout
-
8/6/2019 Giao Trinh c++. Thay Binh
90/157
90
--d3;
cout
-
8/6/2019 Giao Trinh c++. Thay Binh
91/157
91
{
private:
int giatri;
public:
SO(int x=0)
{
giatri = x;
}
SO (SO &tso)
{
giatri = tso.giatri;
}
friend istream& operator>>(istream&,SO&);
friend ostream& operator
-
8/6/2019 Giao Trinh c++. Thay Binh
92/157
92
}
-
8/6/2019 Giao Trinh c++. Thay Binh
93/157
93
BI TP
1. nh ngha cc php ton ti bi =, ==, ++, --, +=, trn lp Time (bi
tp 1 chng 3).2. nh ngha cc php ton ti bi =, ==, ++, --, +=, trn lp Date (bi
tp 2 chng 3).
1. nh ngha cc php ton ti bi +, -, *, =, ==, != trn lp cc ma trn vung.
2. nh ngha cc php ton ti bi +, -, * trn lp a thc.
3. nh ngha cc php ton ti bi +, -, *, /, =, ==, +=, -=, *=, /= , , =,
!= , ++, -- trn lp Phanso (bi tp 10 chng 3).
4. Ma trn c xem l mt vectm mi thnh phn ca n l mt vect. Theo
ngha , hy nh ngha lp Matran da trn vect. Tm cch chng
trnh dch hiu c php truy nhp m[i][j], trong m l mt i tng
thuc lp Matran.
-
8/6/2019 Giao Trinh c++. Thay Binh
94/157
94
CHNG 5
K THA
Chng 5 trnh by cc vn sau:
n k
th
a,
a k
th
aHm to v hm hy i vi sktha
Hm o, lp cso
5.1. Gii thiu
K tha l mt trong cc khi nim csca phng php lp trnh hng
i tng. Tnh k tha cho php nh ngha cc lp mi t cc lp c. Mt
lp c th l lp cscho nhiu lp dn xut khc nhau. Lp dn xut s k
tha mt s thnh phn (d liu v hm) ca lp c s, ng thi c thmnhng thnh phn mi. C hai loi k tha l: n k tha v a k tha, c th
minh ha qua cc hnh v sau y:
Hnh 5.1.n k tha, lp A l lp csca lp B
(a) (b) (c)
Hnh 5.2. a k tha
Hnh (a): Lp A l lp csca lp B, lp B l lp csca lp C
Hnh (b): Lp A l lp csca cc lp B, C, D
Hnh (c): Lp A, B, C l lp csca lp D
5.2. n k tha
B
A
B C D
A B C
D
B
C
-
8/6/2019 Giao Trinh c++. Thay Binh
95/157
95
5.2.1. nh ngha lp dn xut tmt lp cs
Gi s nh ngha lp A. C php xy dng lp B dn xut t lp A
nh sau:
class B: mode A{
private:
// Khai bo cc thuc tnh ca lp B
public:
// nh ngha cc hm thnh phn ca lp B
};
Trong mode c th l private hoc public vi ngha nh sau:- K tha theo kiu public th tt c cc thnh phn public ca lp cscng l
thnh phn public ca lp dn xut.
- K tha theo kiu private th tt c cc thnh phn public ca lp css tr
thnh cc thnh phn private ca lp dn xut.
Ch : Trong c hai trng hp trn th thnh phn private ca lp csl
khng c k tha. Nh vy trong lp dn xut khng cho php truy nhp n
cc thnh phn private ca lp cs.5.2.2. Truy nhp cc thnh phn trong lp dn xut
Thnh phn ca lp dn xut bao gm: cc thnh phn khai bo trong lp
dn xut v cc thnh phn m lp dn xut tha k t cc lp cs. Quy tc s
dng cc thnh phn trong lp dn xut c thc hin theo theo mu nh sau:
Tn i tng.Tn_lp::Tn_thnh_phn
Khi chng trnh dch C++ d dng phn bit thnh phn thuc lp no.
V d 5.1 Gi s c cc lp A v B nh sau:class A
{
public: int n;
void nhap()
{
coutn;}
-
8/6/2019 Giao Trinh c++. Thay Binh
96/157
96
};
class B: public A
{
public: int m;
void nhap()
{
coutm;
}
};
Xt khai bo: B ob;
Lc : ob.B::m l thuc tnh n khai bo trong B
ob.A::n l thuc tnh n tha k t lp A
ob.D::nhap() l hm nhap() nh ngha trong lp B
ob.A::nhap() l hm nhap() nh ngha trong lp A
Ch : s dng cc thnh phn ca lp dn xut, c th khng dng tn lp,
ch dng tn thnh phn. Khi chng trnh dch phi t phn on bit
thnh phn thuc lp no: trc tin xem thnh phn ang xt c trng tn
vi cc thnh phn no ca lp dn xut khng? Nu trng th thnh phn
ca lp dn xut. Nu khng trng th tip tc xt cc lp cstheo th t: cc
lp c quan h gn vi lp dn xut sc xt trc, cc lp quan h xa hn
xt sau. Ch trng hp thnh phn ang xt c mt ng thi trong 2 lp c
s c cng mt ng cp quan h vi lp dn xut. Trng hp ny chng
trnh dch khng th quyt nh c thnh phn ny tha k t lp no v s
a ra mt thng bo li.
5.2.3. nh ngha li cc hm thnh phn ca lp cstrong lp dn xut
Trong lp dn xut c thnh ngha li hm thnh phn ca lp cs.
Nh vy c hai phin bn khc nhau ca hm thnh phn trong lp dn xut.
Trong phm vi lp dn xut, hm nh ngha li che khut hm c nh
ngha. Vic s dng hm no cn tun theo quy nh trn.
Ch : Vic nh ngha li hm thnh phn khc vi nh ngha hm qu ti.
Hm nh ngha li v hm bnh ngha li ging nhau v tn, tham s v gitr tr v. Chng ch khc nhau v v tr: mt hm t trong lp dn xut v hm
-
8/6/2019 Giao Trinh c++. Thay Binh
97/157
97
kia th trong lp cs. Trong khi , cc hm qu ti ch c cng tn, nhng
khc nhau v danh sch tham s v tt c chng thuc cng mt lp. nh ngha
li hm thnh phn chnh l cscho vic xy dng tnh a hnh ca cc hm.
C++ cho php t trng tn thuc tnh trong cc lp csv lp dn xut.Cc thnh phn cng tn ny c th cng kiu hay khc kiu. Lc ny bn trong
i tng ca lp dn xut c ti hai thnh phn khc nhau c cng tn, nhng
trong phm vi lp dn xut, tn chung nhm chnh thnh phn c khai
bo li trong lp dn xut. Khi mun chnh thnh phn trng tn trong lp c
sphi dng tn lp ton t:: t trc tn hm thnh phn.
V d 5.2 Xt cc lp A v B c xy dng nh sau:
class A
{
private:
int a, b, c;
public:
void nhap()
{ couta;
coutb;
coutc;
}
void hienthi()
{ cout
-
8/6/2019 Giao Trinh c++. Thay Binh
98/157
98
Xt khai bo : B ob; Lc cc cu lnh sau y l li :
ob.nhap();
ob.d=10;
ob.a = ob.b = ob.c = 5;ob.hienthi();
bi v i tng ob khng th truy nhp vo cc thnh phn private ca lp A v
B.
V d 5.3 Chng trnh minh ha n k tha theo kiu public:
#include
#include
class A
{
int a; //Bien private, khong duoc ke thua
public:
int b; //Bien public, se duoc ke thua
void get_ab();
int get_a(void);
void show_a(void);
};
class B: public A
{
int c;
public:
void mul(void);
void display(void);
};
void A::get_ab(void)
{ a = 5; b = 10;}
int A::get_a()
{ return a;}
void A::show_a()
{ cout
-
8/6/2019 Giao Trinh c++. Thay Binh
99/157
99
void B::display()
{
cout
-
8/6/2019 Giao Trinh c++. Thay Binh
100/157
100
void nhap()
{
coutx;
couty;
}
void hienthi()
{
cout
-
8/6/2019 Giao Trinh c++. Thay Binh
101/157
101
}
Chng trnh cho kt qu:
Nhap toa do tam va ban kinh hinh tron
x = 2y = 3
r = 10
Hinh tron co tam:
x = 2 y = 3
Co ban kinh = 10
5.2.4. Hm to i vi tnh k tha
Cc hm to ca lp csl khng c k tha. Mt i tng ca lpdn xut v thc cht c th xem l mt i tng ca lp cs, v vy vic gi
hm to lp dn xut to i tng ca lp dn xut s ko theo vic gi n
mt hm to ca lp cs. Th t thc hin ca cc hm to s l: hm to cho
lp cs, ri n hm to cho lp dn xut.
C++ thc hin iu ny bng cch: trong nh ngha ca hm to lp dn
xut, ta m t mt li gi ti hm to trong lp cs. C php truyn tham
s t lp dn xut n lp csnh sau:Tn_ lp_dn_xut(danh sch i):Tn_ lp_c_s(danh sch i)
{
//thn hm to ca lp dn xut
};
Trong phn ln cc trng hp, hm to ca lp dn xut v hm to ca
lp css khng dng tham s ging nhau. Trong trng hp cn truyn mt
hay nhiu tham s cho mi lp, ta phi truyn cho hm to ca lp dn xut tt
ccc tham s m c hai lp dn xut v cscn n. Sau , lp dn xut ch
truyn cho lp csnhng tham s no m lp cscn.
V d 5.5 Chng trnh sau minh ha cch truyn tham s cho hm to ca lp
cs:
#include
#include
class Diem
{
private:
-
8/6/2019 Giao Trinh c++. Thay Binh
102/157
102
double x, y;
public:
Diem()
{
x=y=0.0;
}
Diem(double x1, double y1)
{
x=x1; y=y1;
}
void in()
{
cout
-
8/6/2019 Giao Trinh c++. Thay Binh
103/157
103
void main()
{
Hinhtron h(2.5, 3.5, 8);
clrscr();
cout
-
8/6/2019 Giao Trinh c++. Thay Binh
104/157
104
~DX()
{cout
-
8/6/2019 Giao Trinh c++. Thay Binh
105/157
105
5.3. a k tha
5.3.1. nh ngha lp dn xut tnhiu lp cs
Gi s nh ngha cc lp A, B. C php xy dng lp C dn xut t
lp A v B nh sau:class C: mode A, mode B
{
private:
// Khai bo cc thuc tnh
public:
// Cc hm thnh phn
};trong mode c th l private, public hoc protected. ngha ca kiu dn
xut ny ging nh trng hp n k tha.
5.3.2. Mt s v d va k tha
V d 5.7 Chng trnh sau minh ha mt lp k tha t hai lp cs:
#include
#include
#include
class M
{ protected :
int m;
public :
void getm(int x) {m=x;}
};class N
{ protected :
int n;
public :
void getn(int y) {n=y;}
};
class P : public M,public N
-
8/6/2019 Giao Trinh c++. Thay Binh
106/157
106
{
public :
void display(void)
{ cout
-
8/6/2019 Giao Trinh c++. Thay Binh
107/157
107
void nhap()
{ cout
-
8/6/2019 Giao Trinh c++. Thay Binh
108/157
108
};
void main()
{ int i,n; ketqua sv[100];
coutn;
clrscr();
for(i=0;i
-
8/6/2019 Giao Trinh c++. Thay Binh
109/157
109
{ protected : float d1,d2;
public :
void nhap_diem()
{
coutd1>>d2;
}
void hienthi_diem()
{ cout
-
8/6/2019 Giao Trinh c++. Thay Binh
110/157
110
{ int i,n; ketqua sv[100];
coutn;
clrscr();
for(i=0;i
-
8/6/2019 Giao Trinh c++. Thay Binh
111/157
111
class house : public Building
{ int bedrooms; //tong so phong ngu
int bathrooms; //tong so phong tam
public :
house(int f, int r, int ft, int br, int bth)
{ floors=f; rooms=r; footage=ft;
bedrooms=br; bathrooms=bth;
}
void show()
{ cout
-
8/6/2019 Giao Trinh c++. Thay Binh
112/157
112
cout
-
8/6/2019 Giao Trinh c++. Thay Binh
113/157
113
};
class B : public A
{
public:
void xuat()
{
cout
-
8/6/2019 Giao Trinh c++. Thay Binh
114/157
114
p = &a; q = &b; r = &c;
Ta xt cc li gi hm thnh phn t cc con tr p, q, r:
p->xuat(); q->xuat(); r->xuat();
C 3 cu lnh trn u gi ti hm thnh phn xuat() ca lp A, bi v cccon tr p, q, r u c kiu lp A. Sdnh vy l v mt li gi (xut pht t
mt i tng hay con tr) ti hm thnh phn lun lun lin kt vi mt hm
thnh phn c nh v s lin kt ny xc nh trong qu trnh bin dch
chng trnh. Ta bo y l slin kt tnh.
C th tm lc cch thc gi cc hm thnh phn nh sau:
1. Nu li gi xut pht t mt i tng ca lp no , th hm thnh
phn ca lp sc gi.
2. Nu li gi xut pht t mt con tr kiu lp, th hm thnh phn ca lp
sc gi bt k con tr cha a ch ca i tng no.
Vn t ra l: Ta mun ti thi im con trang trn i tng no
th li gi hm phi lin kt ng hm thnh phn ca lp m i tng
thuc vo ch khng ph thuc vo kiu lp ca con tr. C++ gii quyt vn
ny bng cch dng khi nim hm o.
5.4.2. nh ngha hm o
Hm o l hm thnh phn ca lp, n c khai bo trong lp csv
nh ngha li trong lp dn xut. nh ngha hm o th phn khai bo hm
phi bt u bng t kha virtual. Khi mt lp c cha hm o c k tha,
lp dn xut snh ngha li hm o cho chnh mnh. Cc hm o trin khai
t tng ch o ca tnh a hnh l mt giao din cho nhiu hm thnh
phn. Hm o bn trong lp csnh ngha hnh thc giao tip i vi hm
. Vic nh ngha li hm o lp dn xut l thi hnh cc tc v ca hm linquan n chnh lp dn xut . Ni cch khc, nh ngha li hm o chnh l
to ra phng thc c th. Trong phn nh ngha li hm o lp dn xut,
khng cn phi s dng li t kha virtual.
Khi xy dng hm o, cn tun theo nhng quy tc sau:
1. Hm o phi l hm thnh phn ca mt lp;
2. Nhng thnh phn tnh (static) khng th khai bo o;
3. S dng con tr truy nhp ti hm o;
-
8/6/2019 Giao Trinh c++. Thay Binh
115/157
115
4. Hm o c nh ngha trong lp c s, ngay khi n khng c s
dng;
5. Mu ca cc phin bn ( lp csv lp dn xut) phi ging nhau.
Nu hai hm cng tn nhng c mu khc nhau th C++ s xem nh hmti bi;
6. Khng c to ra hm to o, nhng c th to ra hm hy o;
7. Con tr ca lp csc th cha a ch ca i tng thuc lp dn
xut, nhng ngc li th khng c;
8. Nu dng con tr ca lp cs trn i tng ca lp dn xut th
php ton tng gim con tr s khng tc dng i vi lp dn xut, ngha
l khng phi con tr s tr ti i tng trc hoc tip theo trong lp
dn xut. Php ton tng gim ch lin quan n lp cs.
V d:
class A
{
...
virtual void hienthi()
{
cout
-
8/6/2019 Giao Trinh c++. Thay Binh
116/157
116
cout
-
8/6/2019 Giao Trinh c++. Thay Binh
117/157
117
B b; // b l bin i tng kiu B
p = &a; // p v a cng lp A
p = &b; // p l con tr lp cs, b l i tng lp dn xut
Ch : Khng cho php gn a chi tng ca lp cscho con tr ca lpdn xut, chng hn vi khai bo B *q; A a; th cu lnh q = &a; l sai.
V d 5.11 Chng trnh sau y minh ha vic s dng hm o:
#include
#include
class A
{
public:virtual void hienthi()
{
cout
-
8/6/2019 Giao Trinh c++. Thay Binh
118/157
118
A *p;
A a; B b; C c;
a.hienthi(); //goi ham cua lop A
p = &b; //p tro to doi tuong b cua lop B
p->hienthi(); //goi ham cua lop B
p=&c; //p tro to doi tuong c cua lop C
p->hienthi(); //goi ham cua lop C
getch();
}
Chng trnh ny cho kt qu nh sau:
Lop A
Lop B
Lop C
Ch :
Cng mt cu lnh p->hienthi(); c tng ng vi nhiu hm khc
nhau khc nhau khi hienthi() l hm o. y chnh l s tng ng bi.
Kh nng ny cho php x l nhiu i tng khc nhau theo cng mt
cch thc.Cng vi li gi: p->hienthi(); (hienthi() l hm o) th li gi ny khng
lin kt vi mt phng thc cnh, m ty thuc v ni dung con tr.
l s lin ktng v phng thc c lin kt (c gi) thay i
mi khi c s thay i ni dung con tr trong qu trnh chy chng trnh.
V d 5.12 Chng trnh sau to ra mt lp csc tn lnumlu tr mt s
nguyn, v mt hm o ca lp c tn l shownum(). Lpnumc hai lp dn
xut louthex voutoct. Trong hai lp ny snh ngha li hm o shownum() chng in ra s nguyn di dng s h 16 v s h 8.
#include
#include
class num
{
public :
int i;num(int x) { i=x; }
-
8/6/2019 Giao Trinh c++. Thay Binh
119/157
119
virtual void shownum()
{ cout
-
8/6/2019 Giao Trinh c++. Thay Binh
120/157
-
8/6/2019 Giao Trinh c++. Thay Binh
121/157
121
{...};
clacc D : public B, public C
{...};
Vic chnh A l o trong cc lp B v C ngha l A s ch xut hin mtln trong lp D. Khai bo ny khng nh hng n cc lp B v C.
Ch : T kha virtual c th t trc hoc sau t kha public, private,
protected.
V d 5.13
#include
#include
class A
{ float x,y;
public:
void set(float x1, float y1)
{
x = x1; y = y1;
}
float getx()
{ return x;
}
float gety()
{ return y;
}
};
class B : virtual public A
{ };
class C : virtual public A
{ };
class D : public B, public C
{ };
void main()
{ clrscr();
D d;cout
-
8/6/2019 Giao Trinh c++. Thay Binh
122/157
122
d.B::set(2,3);
cout
-
8/6/2019 Giao Trinh c++. Thay Binh
123/157
123
Vi s k tha nh hnh v 5.4., th t gi hm to s l A, B, C v cui
cng l D. Chng trnh sau minh ha iu ny:
V d 5.14
#include #include
class A
{ float x,y;
public:
A() {x = 0; y = 0;}
A(float x1, float y1)
{cout
-
8/6/2019 Giao Trinh c++. Thay Binh
124/157
124
public:
C(float x1, float y1):A(x1,y1)
{
cout
-
8/6/2019 Giao Trinh c++. Thay Binh
125/157
125
B::B(float,float)
C::C(float,float)
D::D(float,float)
D d (2,3)
d.C::getx() = 2
d.B::getx() = 2
d.C::gety() = 3
d.B::gety() = 3
d1 (10,20)
A::A(float,float)
B::B(float,float)
C::C(float,float)
D::D(float,float)
d.C::getx() = 2
d.B::getx() = 2
d.C::gety() = 3
d.B::gety() = 3
-
8/6/2019 Giao Trinh c++. Thay Binh
126/157
126
BI TP
1. Xy dng lp c tn l Stack vi cc thao tc cn thit. T hy dn xut t
lp stack i mt s nguyn dng sang hm bt k.
2. Vit mt phn cp k tha cho cc lp hnh t gic, hnh thang, hnh bnhhnh, hnh ch nht, hnh vung.
3. To mt lp csc tn l airship lu thng tin v s lng hnh khch
ti a v trng lng hng ha ti a m my bay c th chc. T
hy to hai lp dn xut airplane v balloon, lp airplane lu thng tin v kiu
ng c(gm ng ccnh qut v ng cphn lc), lp balloon lu thng
tin v loi nhin liu s dng cho kh cu (gm hai loi l hydrogen v
helium). Hy vit chng trnh minh ha.
4. Mt nh xut bn nhn xut bn sch. Sch c hai loi: loi c hnh nh
trang ba v loi khng c hnh nh trang ba. Loi c hnh nh trang ba
th phi thu ha sv ba. Vit chng trnh thc hin cc yu cu :
- To mt lp csc tn l SACH lu thng tin v tn sch, tc gi, s
trang, gi bn v nh ngha hm thnh phn cho php nhp d liu cho cc
i tng ca lp SACH.
- To lp BIA k tha t lp SACH lu cc thng tin : M hnh nh, tin
v v nh ngha hm thnh phn cho php nhp d liu cho cc i tng
ca lp BIA.
- To lp HOASY lu cc thng tin h tn, a ch ca ha s v nh
ngha hm thnh phn cho php nhp d liu cho cc i tng ca lp
HOASY.
- To lp SACHVEBIA k tha t lp BIA v lp HOASY v nh ngha
hm thnh phn cho php nhp d liu cho cc i tng ca lp
SACHVEBIA. Vit hm main() cho php nhp vo hai danh sch : danh sch
cc sch c v ba v danh sch cc sch khng c v ba (c th dng mng
tnh hoc mng con tr).
5. Xy dng lp hnh vung c tn l HVUONG vi cc d liu thnh phn nh
sau: di cnh. Cc hm thnh phn nhp d liu, hin th d liu, tnh
din tch, chu vi hnh vung. T lp HVUONG, xy dng lp dn xut c tnl CHUNHAT, l lp k tha ca lp HVUONG v c b sung thm thuc
-
8/6/2019 Giao Trinh c++. Thay Binh
127/157
127
tnh sau: di cnh th hai. Cc hm thnh phn nhp d liu, hin th d
liu tnh din tch v chu vi hnh ch nht. Vit chng trnh minh ha.
6. Xy dng lp csCANBO c d liu thnh phn l m cn b, m n v,
h tn, ngy sinh. Cc hm thnh phn bao gm: nhp d liu cn b, hin thd liu. Lp dn xut LUONG k tha lp CANBO v c thm cc thuc
tnh: ph cp, h s lng, bo him. Hm thnh phn tnh lng cn b
theo cng thc:
lng = h s lng *290000 + ph cp - bo him
Hy thit k chng trnh p ng cc yu cu:
- Nhp danh sch cn b
- In bng lng cc cn b theo tng n v.7. Nhn vin trong mt cquan c lnh lng theo cc dng khc nhau. Dng
ngi lao ng hng lng t ngn sch Nh nc gi l cn b, cng chc
(dng bin ch). Dng ngi lao ng lnh lng t ngn sch ca cquan
gi l ngi lm hp ng. Nh vy h thng c hai i tng: bin ch v
hp ng.
- Hai loi i tng ny c c tnh chung l vin chc lm vic cho cquan.
Ty c th to nn lp cs qun l mt vin chc (lp Nguoi) baogm m s, h tn, lng.
- Hai lp k tha t lp cstrn:
+ Lp Bienche gm cc thuc tnh: h s lng, tin ph cp chc v.
+ Lp Hopdong gm cc thuc tnh: tin cng lao ng, s ngy lm
vic trong thng, h s vt gi.
Hy thit k cc lp trn v vit chng trnh minh ha.
8. Vit chng trnh qun l sch bo, tp ch ca th vin trong trng i hc,hng thng gi v khoa h tn ca cc gio vin v sinh vin qu thi hn
mn sch.
9. Vit chng trnh tnh v in bng lng hng thng ca gio vin v ngi
lm hp ng trong mt trng i hc. Gi s vic tnh tan tin lng c
cn c vo cc yu t sau:
- i vi gio vin: s tit dy trong thng, tin dy mt tit.
- i vi ngi lm hp ng: tin cng ngy, s ngy lm vic
-
8/6/2019 Giao Trinh c++. Thay Binh
128/157
128
10. Gi s cui nm hc cn trao phn thng cho cc sinh vin gii, cc gio
vin c tham gia nghin cu khoa hc. iu kin khen thng ca sinh vin
l c im trung bnh ln hn 8. iu kin khen thng ca gio vin l c t
nht mt bi bo nghin cu khoa hc. S cu trc phn cp lp nh sau:
Nguoi
H tn
Ngy sinh
Cc phng
thc
Sinhvien
Lp
im trung
bnh
Cc phng
thc
Yu cu:
- Xy dng cc lp theo s k tha trn, mi lp c cc hm thnh phn nhp, xut d liu, hm kim tra khen thng.
- Hy vit hm main() cho php nhp vo d liu ca khng qu 100 sinh vin
v khng qu 30 gio vin. In ra danh sch sinh vin v gio vin c khen
thng.
Giaovien
B mn
S bi bo
Cc phng
thc
-
8/6/2019 Giao Trinh c++. Thay Binh
129/157
129
11. Gi s ta c s k tha ca cc lp nh sau:
HINHHOC
HAICHIEU
Yu cu:
- Thit k cc lp c th in ra cc thng tin ca cc hnh (trn, ch nht, lp
phng) bao gm: din tch, chu vi, th tch.
- Vit chng trnh minh ha.
12. Vit chng trnh qun l vic mn v tr sch mt th vin theo
phng php lp trnh hng i tng. Chng trnh cho php:- ng k bn c mi vi thng tin l m v tn bn c, sin thoi
- Nhp sch mi vi thng tin l m sch, tn sch, s lng, nh xut bn.
- Mn v tr sch.
- Thng k bn c.
- Thng k sch.
BACHIEU
TRON CHUNHAT LAPPHUONG
-
8/6/2019 Giao Trinh c++. Thay Binh
130/157
130
CHNG 6
KHUN HNH
6.1. Khun hnh hm
6.1.1. Khi nim
Ta bit hm qu ti cho php dng mt tn duy nht cho nhiu hm
thc hin cc cng vic khc nhau. Khi nim khun hnh hm cng cho php
s dng cng mt tn duy nht thc hin cc cng vic khc nhau, tuy nhin
so vi nh ngha hm qu ti, n c phn mnh hn v cht ch hn. Mnh hn
v ch cn vit nh ngha khun hnh hm mt ln, ri sau chng trnh bin
dch lm cho n thch ng vi cc kiu d liu khc nhau. Cht ch hn bi v
da theo khun hnh hm, tt c cc hm th hin c sinh ra bi chng trnhdch s tng ng vi cng mt nh ngha v nh vy s c cng mt gii
thut.
6.1.2. To mt khun hnh hm
Gi thit rng chng ta cn vit mt hmmina ra gi tr nh nht trong
hai gi tr c cng kiu. Ta c th vit mt nh ngha nh th vi kiu int nh
sau:
int min (int a, int b)
{
if (a
-
8/6/2019 Giao Trinh c++. Thay Binh
131/157
131
Nh vy ta phi vit rt nhiu nh ngha hm hon ton tng t nhau, ch
c kiu d liu l thay i. Chng trnh dch C++ cho php gii quyt n gin
vn trn bng cch nh ngha mt khun hnh hm duy nht theo c php:
template tn hm(khai bo tham s){
//nh ngha hm
}
trong l cc kiu d liu c khai bo vi t kho
class, cch nhau bi du phy. Kiu d liu l mt kiu bt k, k c kiu class.
V d 6.1 Xy dng khun hnh cho hm tm gi tr nh nht ca hai s:
template Kieuso min(Kieuso a, Kieuso
b)
{
if (a
-
8/6/2019 Giao Trinh c++. Thay Binh
132/157
132
- Cc bin truyn cho danh sch tham s ca hm phi chnh xc vi kiu
khai bo.
- Mun p dng c vi kiu lp th trong lp phi nh ngha cc ton t
ti bi tng ng.6.1.4. Cc tham s kiu ca khun hnh hm
Khun hnh hm c th c mt hay nhiu tham s kiu, mi tham si lin
sau t kho class. Cc tham s ny c th bt k u trong nh ngha ca
khun hnh hm, ngha l :
- Trong dng tiu (dng u khai bo template).
- Trong cc khai bo bin cc b.
- Trong cc ch th thc hin.Trong mi trng hp, mi tham s kiu phi xut hin t nht mt ln
trong khai bo danh sch tham s hnh thc ca khun hnh hm. iu hon
ton logic, bi v nhcc tham s ny, chng trnh dch mi c th sn sinh ra
hm th hin cn thit.
khun hnh hm min trn, mi ch cho php tm min ca hai s cng
kiu, nu mun tm min hai s khc kiu th khun hnh hm trn cha p ng
c. V d sau s khc phc c iu ny.
V d 6.2
#include
template kieuso1
min(kieuso1 a,kieuso2 b)
{
return a
-
8/6/2019 Giao Trinh c++. Thay Binh
133/157
133
class SO
{
private:
int giatri;
public:
SO(int x=0)
{
giatri = x;
}
SO (SO &tso)
{
giatri = tso.giatri;
}
SO (){}; //Giong nhu ham thiet lap ngam dinh
~SO()
{ }
int operator(istream&,SO&);
friend ostream& operator
-
8/6/2019 Giao Trinh c++. Thay Binh
134/157
134
return a;
else
return b;
}
void main(){
float a =2.5;
int b = 8;
cout
-
8/6/2019 Giao Trinh c++. Thay Binh
135/157
135
Nu khng c hm thng thng no tng ng chnh xc vi li gi, khi
ta kim tra tt c cc khun hnh hm c trng tn vi li gi, khi ta kim
tra tt c cc khun hnh hm c trng tn vi li gi; nu ch c mt tng ng
chnh xc c tm thy, hm th hin tng ng c sn sinh v vn cgii quyt; cn nu c nhiu hn mt khun hnh hm iu s gy ra li bin
dch v qu trnh dng.
Cui cng, nu khng c khun hnh hm ph hp, ta kim tra mt ln na
tt c cc hm thng thng cng tn vi li gi. Trong trng hp ny chng
ta phi tm kim s tng ng da vo c cc chuyn kiu cho php trong
C/C++.
6.2. Khun hnh lp6.2.1. Khi nim
Bn cnh khi nim khun hnh hm, C++ cn cho php nh ngha khun
hnh lp. Cng ging nh khun hnh hm, y ta ch cn vit nh ngha cc
khun hnh lp mt ln ri sau c th p dng chng vi cc kiu d liu
khc nhau c cc lp th hin khc nhau.
6.2.2. To mt khun hnh lp
Trong chng trc ta nh ngha cho lp SO, gi tr cc s l kiu int.
Nu ta mun lm vic vi cc s kii float, double,... th ta phi nh ngha li
mt lp khc tng t, trong kiu d liu int cho d liu giatri sc thay
bng float,double,...
trnh s trng lp trong cc tnh hung nh trn, chng trnh dch C++
cho php nh ngha mt khun hnh lp v sau , p dng khun hnh lp ny
vi cc kiu d liu khc nhau thu c cc lp th hin nh mong mun. V
d :
template class SO
{
kieuso giatri;
public :
SO (kieuso x =0);
void Hienthi();
-
8/6/2019 Giao Trinh c++. Thay Binh
136/157
136
...
};
Cng ging nh cc khun hnh hm, template
xc nh rng l mt khun hnh trong c mt tham s ku kieuso .C++ s dng t kho class ch ni rng kieusoi din cho mt kiu d
liu no .
Vic nh ngha cc hm thnh phn ca khun hnh lp, ngi ta phn bit
hai trng hp:
Khi hm thnh phn c nh ngha bn trong nh ngha lp th khng c
g thay i.
Khi hm thnh phn c nh ngha bn ngoi lp, khi cn phi nhcli cho chng trnh bit cc tham s kiu ca khun hnh lp, c ngha l phi
nhc li template chng hn, trc nh ngha hm. V
d hm Hienthi() c nh ngha ngoi lp:
template void SO::Hienthi()
{
cout
-
8/6/2019 Giao Trinh c++. Thay Binh
137/157
137
#include
#include
template class SO
{
kieuso giatri;
public :
SO (kieuso x =0);
void Hienthi(){
cout
-
8/6/2019 Giao Trinh c++. Thay Binh
138/157
138
T x;
U y;
.....
Z fct1 (int);
.....
};
Mt lp th hin c khai bo bng cch lit k ng sau tn khun hnh
lp cc tham s thc, l tn kiu d liu, vi s lng bng cc tham s trong
danh sch ca khun hnh lp (template)
6.2.5. Tm tt
Khun hnh lp/hm l phng tin m t ngha ca mt lp/hm tngqut, cn lp/hm th hin l mt bn sao ca khun hnh tng qut vi cc kiu
d liu c th.
Cc khun hnh lp/hm thng c tham s ho. Tuy nhin vn c th
s dng cc kiu d liu c th trong cc khun hnh lp/hm nu cn.
-
8/6/2019 Giao Trinh c++. Thay Binh
139/157
139
BI TP
1. Vit khun hnh hm tm s ln nht ca hai s bt k
2. Vit khun hnh hm tr v gi tr trung bnh ca mt mng, cc tham
s hnh thc ca hm ny l tn mng, kch thc mng.
3. Ci t hng i templete.
4. Vit khun hnh hm sp xp kiu d liu bt k.
5. Xy dng khun hnh lp cho cc ta im trong mt phng, cc
thnh phn d liu ca lp l toadox, toadoy.
6. Xy dng khun hnh lp cho vector qun l cc vector c thnh phn
c kiu ty .
-
8/6/2019 Giao Trinh c++. Thay Binh
140/157
140
Ph lc
CC DNG XUT NHP
C++ s dng khi nim dng (stream) v a ra cc lp dng t chc
vic nhp xut. Dng c th xem nh mt dy tun t cc byte. Thao tc nhp lc cc byte t dng (gi l dng nhpinput) vo b nh. Thao tc xut l a
cc byte t b nhra dng (gi l dng xut- output). Cc thao tc ny l c
lp thit b. thc hin vic nhp, xut ln mt thit b c th, chng ta ch cn
gn dng tin vi thit b ny.
1.1. Cc lp stream
C 4 lp stream quan trng l: lp csios, t lp ios dn xut n hai lp
istream v iostream. Hai lp istream v ostream li dn xut vi lp iostream.
S k tha gia cc lp nh sau;
Lp ios: nh ngha cc thuc tnh c s dng lm cc cnh dng
cho vic xut nhp v cc ckim tra li, cc phng thc ca lp ios
phc v vic nh dng d liu nhp xut, kim tra li.
Lp iostream: cung cp ton t nhp >> v nhiu phng thc nhp
khc, chng hn cc phng thc: get, getline, read,ignore, peek, seekg,
tellg, ...
Lp ostream: cung cp ton t xut
-
8/6/2019 Giao Trinh c++. Thay Binh
141/157
141
1.2. Dng cin v ton tnhp >>
1.2.1 Dng cin
cin l i tng ca lp istream. l dng nhp v c ni l b rng
buc ti hoc kt ni ti thit b nhp chun, thng thng l bn phm. Ccthao tc nhp trn dng cinng ngha vi nhp d liu t bn phm.
1.2.2. Ton ttrch >>
Ton t trch >> c s dng nh sau c d liu t dng cin:
cin>> bin;
nhp gi tr ca nhiu bin trn mt dng lnh ta dng c php sau:
cin>>bin 1>>bin 2>>...>>bin n;
1.3. Nhp k tv chui k t
C th dng cc phng thc sau (nh ngha trong lp istream) nhp k
t v chui: cin.get cin.getline cin.ignore
1.3.1. Phng thc get() c 3 dng:
Dng 1: int cin.get();
Dng c mt k t (k c khong trng).
Dng 2: istream& cin.get(char &ch);Dng c mt k t (k c khong trng) v t vo mt bin kiu char c
tham chiu bi ch.
Dng 3: istream& cin.get(char *str, int n, char d = \n);
Dng c mt dy k t (k c khong trng) v a vo vng nhdo str tr
ti. Qu trnh c kt thc khi xy ra mt trong hai tnh hung sau:
+ Gp k t gii hn (cho trong d). K t gii hn mc nh l \n.
+ nhn (n-1) k t.Ch :
+ K t kt thc chui \0 c b sung vo cui chui nhn c.
+ K t gii hn vn cn li trn dng nhp dnh cho cc lnh nhn tip
theo.
+ K t cn li trn dng nhp c th lm tri phng thc get() dng
3. V d: Xt on chng trnh:
char hoten[25], diachi[50], quequan[30];cout
-
8/6/2019 Giao Trinh c++. Thay Binh
142/157
142
cin.get(ht,25);
cout
-
8/6/2019 Giao Trinh c++. Thay Binh
143/157
143
char hoten[25], diachi[50];
cout
-
8/6/2019 Giao Trinh c++. Thay Binh
144/157
144
int m=1234, n=56;
cout
-
8/6/2019 Giao Trinh c++. Thay Binh
145/157
145
cout
-
8/6/2019 Giao Trinh c++. Thay Binh
146/157
146
cout.setf(ios::left); //bat co ios::left
cout
-
8/6/2019 Giao Trinh c++. Thay Binh
147/157
147
+ Khi ios::oct bt: s nguyn c in di dng cs 8
+ khi ios::hex bt: s nguyn c in di dng cs 16
Nhm 3 gm cc cnh dng s thc:
ios::fixed ios::scientific ios::showpointMc nh : c ios::fixed bt (on) v cios::showpoint tt (off).
+ Khi ios::fixed bt v c ios::showpoint tt th s thc in ra di dng thp
phn, s ch s phn phn (sau du chm) c tnh bng chnh xc n nhng
khi in th bi cc ch s 0 cui.
V d nu chnh xc n = 4 th
S thc -87.1500 c in: -87.15
S thc 23.45425 c in: 23.4543
S thc 678.0 c in: 678
+ Khi ios::fixed bt v cios::showpoint bt th s thc in ra di dng thp
phn, s ch s phn phn (sau du chm) c in ra ng bng chnh xc n.
V d nu chnh xc n = 4 th
S thc -87.1500 c in: -87.1500
S thc 23.45425 c in: 23.4543
S thc 678.0 c in: 6780000
+ Khi ios::scientific bt v cios::showpoint tt th s thc in ra di dng
khoa hc. S ch s phn phn (sau du chm) c tnh bng chnh xc n
nhng khi in th bi cc ch s 0 cui.
V d nu chnh xc n=4 th
S thc -87.1500 c in: -87.15e+01
S thc 23.45425 c in: 23.4543e+01
S thc 678.0 c in: 678e+02
+ Khi ios::scientific bt v cios::showpoint bt th s thc in ra di dng
m . S ch s phn phn (sau du chm) ca phn nh trc in ng bng
chnh xc n.
V d nu chnh xc n=4 th
S thc -87.1500 c in: -87.150e+01
S thc 23.45425 c in: 23.4543e+01
S thc 678.0 c in: 67800e+01
Nhm 4 gm cc hin th:
ios::uppercase ios::showpos ios::showbase
-
8/6/2019 Giao Trinh c++. Thay Binh
148/157
148
Cios::showpos
+ Nu c ios::showpos tt (mc nh) th du cng khng c in trc s
dng.
+ Nu cios::showpos tt th du cng c in trc s dng.C ios::showbase bt th s nguyn h 8 c in bt u bng k t 0 v s
nguyn h 16 c bt u bng cc k t 0x. V d nu a = 40 th:
Dng in h 8 l: 050
Dng in h 16 l 0x28
Cios::showbase tt (mc nh) th khng in 0 trc s nguyn h 8 v khng
0x trc s nguyn h 16. V d nu a = 40 th:
Dng in h 8 l: 50
Dng in h 16 l 28
Cios::uppercase
+ Nu cios::uppercase bt th cc ch s h 16 (nh A, B, C,...) c in di
dng ch hoa.
+ Nu c ios::uppercase tt (mc nh) th cc ch s h 16 (nh A, B, C,...)
c in di dng ch thng.
1.4.5. Cc phng thc bt tt cCc phng thc ny nh ngha trong lp ios.
1. Phng thc long cout.setf(long f) ;
s bt cc clit k trong f v tr v mt gi tr long biu th cc cang bt.
2. Phng thc long cout.unsetf(long f) ;
s tt cc clit k trong f v tr v mt gi tr long biu th cc cang bt.
3. Phng thc long cout.flags(long f) ;
c tc dng ging nh cout.setf(long).4. Phng thc long cout.flags() ;
s tr v mt gi tr long biu th cc cang bt.
1.4.6. Cc b phn nh dng
Cc b phn nh dng (nh ngha trong tp tin iostream.h) bao gm:
dec // nh cios::dec
oct // nh cios::oct
hex // nh cios::hexendl // xut k t\n (chuyn dng)
-
8/6/2019 Giao Trinh c++. Thay Binh
149/157
149
flush //y d liu ra thit b xut
V d Xt chng trnh sau:
#include
#include #include
void main()
{
clrscr();
cout.setf(ios::showbase);
cout
-
8/6/2019 Giao Trinh c++. Thay Binh
150/157
150
cout
-
8/6/2019 Giao Trinh c++. Thay Binh
151/157
151
{
clrscr();
float x=-87.1500, y=23.45425,z=678.0;
clog.setf(ios::scientific);
clog.precision(4);
clog.fill('*');
clog
-
8/6/2019 Giao Trinh c++. Thay Binh
152/157
152
- fd(file disciptor) l ch s tp tin. Ch s tp tin nh sn i vi stdprn
(my in chun) l 4.
- Cc tham s buf v n