You are on page 1of 208

Bi tp lp trnh hng i tng vi C#

Nm 2008

MC LC
Chng I: I TNG V LP
A. TM TT L THUYT.............................................................7
1. Khai bo lp .................................................................................7
2. S dng cc i tng ca lp: ...................................................9
3. T kha this ................................................................................10
4. S dng cc t kha mc truy cp........................................11
5. B khi dng( constructor): ...... Error! Bookmark not defined.
6. B sao chp( copy constructor): Error! Bookmark not defined.
7. Hm hy b (destructor) ............................................................12
8. S dng cc thnh vin tnh static: ............................................14
9. Np chng phng thc .............................................................17
10. ng gi d liu thng qua cc thuc tinh: ...............................17
B. BI TP MU ..........................................................................19
1. Xy dng lp ..............................................................................19
2. S dng lp ................................................................................22
3. Lp lng nhau v cch truy xut................................................32
4. Chng trnh khai bo nhiu lp ...............................................34
5. T kha this ................................................................................39
6. Hm thit lp v hm thit lp sao chp, hm sao chp cho lp
vector ................................................................................................45
7. S dng hm thit lp sao chp v hm hy b ........................50
8. Kiu d liu mng, cc phng thc c gi tr tr v ,
constructor sao chp .........................................................................54
9. S dng cc thnh phn tnh ......................................................59
10. Hm khi to private cm to th hin ca i tng ..........62
11. Np chng phng thc .............................................................64
12. Gi ghm d liu thng qua cc thuc tinh ...............................74
C. CU HOI L THUYT V TRC NGHIM ........................80
D. BI TP T GIAI ....................................................................82
E. BI TP TNG HP: ..............................................................87
Chng II: NP CHNG TON T
A. TM TT L THUYT...........................................................90
1. Ton t: ......................................................................................90
2. Chng ton t: ............................................................................90
Ti liu hng dn thc hnh Mn LTHDT vi C#

Bi tp lp trnh hng i tng vi C#

Nm 2008

3. C php np chng ton t: .......................................................90


4. Ton t mt ngi: .......................................................................92
5. Ton t hai ngi: ........................................................................92
6. H tr ngn ng .NET khc: .....................................................92
7. Phm vi s dng ca cc ton t: ..............................................93
8. Mt s trng hp nn s dng cc ton t np chng: ...........94
9. Yu cu khi s dng ton t: .....................................................94
10. u v nhc im ca chng ton t ........................................95
B. BI TP MU ..........................................................................95
I. BI TP TRC NGHIM, L THUYT ..............................95
II. CU HOI L THUYT V BI TP MU ..........................98
1. Chng ton t (+) i vi hai vector .........................................98
2. Chng ton t mt ngi ...........................................................102
3. Xy dng mt lp sophuc v np chng ton t +, - v i du
s phc. ..........................................................................................104
4. Xy dng mt lp phn s vi tn l phanso v np chng ton
t trn lp .......................................................................................107
5. Xy dng mt lp vector v thc hin cc yu cu sau: .........112
C. CU HOI TRC NGHIM L THUYT .............................118
D. BI TP T GIAI ..................................................................119
Chng III: K THA V A HNH:
A. TM TT L THUYT.........................................................124
1. K tha: ....................................................................................124
2. T kho base: ...........................................................................125
3. T kho new:............................................................................126
4. Tinh a hnh : ...........................................................................126
5. Ghi : ......................................................................................126
6. Nghim cm k tha: ...............................................................127
7. Cch truy xut protected: .........................................................127
8. Lp tru tng: ........................................................................127
9. S khc nhau gia phng thc a hnh vi phng thc tru
tng: .............................................................................................128
10. Gc ca tt c cc lp (Lp Object): .......................................128
11. Kiu Boxing v Unxing ...........................................................129
12. Lp lng nhau: .........................................................................130
Ti liu hng dn thc hnh Mn LTHDT vi C#

Bi tp lp trnh hng i tng vi C#

Nm 2008

B. BI TP MU ........................................................................131
I. K tha .....................................................................................131
1. Xy dng lp dn xut tha k t lp c s. ...........................131
2. Mc truy cp Protected .......................................................139
3. Cch truy nhp ca t kha internal v public ........................146
4. Lp c s v i tng thnh phn .........................................152
II. Nghim cm k tha ................................................................160
III. Tinh a hnh. ............................................................................162
IV. Lp tru tng .........................................................................169
V. Xy dng lp lng nhau ...........................................................173
C. MT S CU HOI L THUYT: ........................................176
D. CU HOI T TRA LI ..........................................................179
E. BI TP T GIAI: .................................................................182
Chng IV: GIAO DIN
A. TM TT L THUYT ..........................................................189
1. Khi nim v giao din ............................................................189
2. Ci t mt giao din ...............................................................189
3. Truy xut phng thc ca giao din ......................................190
4. Ton t is:.................................................................................190
5. Ton t as .................................................................................190
6. Thc thi ph quyt giao din ...................................................191
7. Thc hin giao din mt cch tng minh ..............................191
B. BI TP MU ........................................................................191
I. S dng giao din.....................................................................191
II. M rng mt giao din v s thc thi nhiu giao din ca mt
lp 194
III. Xy dng lp thc thi ph quyt mt giao din ......................197
IV. Xy dng lp thc thi giao din mt cch tng minh ...........202
C. CU HOI V TRA LI..........................................................205
D. CU HOI V BI TP T LM .........................................206

Ti liu hng dn thc hnh Mn LTHDT vi C#

Bi tp lp trnh hng i tng vi C#

Nm 2008

LI M U
Ngy nay khoa hc ang pht trin rt nhanh, c bit l s
bng n ca cng ngh thng tin. Tin hc lun thay i v pht
trin tng gi, tng ngy. Ngn ng lp trnh cng vy. Cc ngn
ng mi lun ra i thay th v khc phc nhng hn ch cho cc
ngn ng c.
Ngn ng lp trnh l mt cng c gip con ngi th hin cc
vn thc t trn my tinh mt cch hu hiu. Vi s pht trin
ca tin hc, cc ngn ng ang dn tin ho p ng cc thch
thc ca thc t.
C# c mnh danh l ngn ng lp trnh hng i tng
mnh nht trong b ngn ng lp trnh .NET ca hng Microsoft
hin nay.
Cun sch ny cung cp cho cc bn nhng kin thc c bn
lin quan n vic nh ngha v ci t lp trnh hng i tng
bng ngn ng C# trong ng dng thc tin v p dng chng cho
m hnh i tng mt cch hiu qu.
Gio trnh bao gm 4 chng:
Chng 1: i tng v lp.
Chng 2: Np chng ton t trn lp.
Chng 3: K tha v a hnh.
Chng 4: Giao din
Vi mi mt chng chng ti c trnh by tm tt nht v l
thuyt v c bi tp gii mu theo tng ni dung. Cui mi chng
l h thng bi tp t gii (c hng dn) gip cc bn tin thc
hnh.
Tuy cun sch ny phn no hon thnh xong, nhng do
thi gian v kin thc c hn chc chn s khng trnh khi nhng
sai lm v thiu st. V vy chng ti rt mong nhn c s ng
gp ca thy c v bn b cun sch ny c hon thin hn.
Chng ti xin chn thnh cm n ti cha, m, anh, ch, em;
thy Nguyn Hu ng cng cc thy c trong khoa Cng ngh
thng tin trng HSPKT Hng Yn to iu kin cho chng
em hon thnh ti ny. Xin cm n mi s gip ca bn b.
Ti liu hng dn thc hnh Mn LTHDT vi C#

Bi tp lp trnh hng i tng vi C#

Nm 2008

CHNG I
I TNG V LP
Mc tiu: Sau khi tm hiu xong chng ny ngi hc c th nm
c cc ni dung sau:
Khai bo lp
Khai bo v s dng cc i tng ca lp
T kha this
Cc thuc tinh truy cp
Hm thit lp
Hm thit lp sao chp
Hm hy b
S dng cc thnh vin tnh
Np chng phng thc
ng gi d liu thng qua cc thuc tinh
A.

TM TT L THUYT
1. Khai bo lp
Mt lp bao gm c cc thuc tinh v phng thc. khai
bo mt lp ta s dng t kha class vi cu trc sau y:

Ti liu hng dn thc hnh Mn LTHDT vi C#

Bi tp lp trnh hng i tng vi C#

Nm 2008

[Thuc tnh truy cp] class <tn lp>


{
Khai bo cc thuc tnh ca lp
Khai bo cc phng thc ca lp
}

Cc thuc tinh truy cp gm c cc t kha sau y (s trnh


by chi tit phn sau): public, private, internal, protected, internal
protected.
Trong C#, cho php chng ta khai bo cc class lng nhau.
Thng thng khai bo lp lng nhau khi ng dng c quy m ln.
Class lng cho php s dng trong ni b class cha n khi n c
tm vc public.
Cu trc khai bo mt class lng nh sau:

class class1
{
// khai bo thuc tnh
// khai bo cc phng thc
public class class2
{
// khai bo cc thnh phn d liu
// khai bo cc phng thc
}
}

Ti liu hng dn thc hnh Mn LTHDT vi C#

Bi tp lp trnh hng i tng vi C#

Nm 2008

2. S dng cc i tng ca lp:


s dng lp ta phi khai bo i tng ca lp . Khi mt
i tng ca lp c to ra th n c y cc thuc tinh,
phng thc ca lp v s dng thuc tinh v phng thc ca lp.
Cc thnh phn ca mt lp ch uc s dng khi c th hin ca
lp, tr trng hp trong lp c mt hm khi dng l static.
khai bo mt i tng ca lp ta dng t kha new v khai bo n
theo cu trc sau:
<tn lp> <tn i tng> = new <tn lp> ([cc gi tr khi to nu c])

truy nhp n mt phng thc ta thng qua tn bin i


tng v ton t chm .:
<tn i tng>. <tn phng thc> ([danh sch cc i s nu c])

i vi cc lp lng nhau, truy cp n nhng thuc tinh v


phng thc ca class lng th khi khai bo cn ch ra lp cha
ng n. Mun s dng bin ca lp cha th cc bin ca lp
dng cha phi khai bo l static v phi khai bo i tng
cha n.
Vi d1: Bn khai bo mt lp diem vi y cc thuc
tinh v cc phng thc (gi s l c phng thc hien()), by gi
bn mun to mt i tung tn l A ca lp ny v s dng
phng thc hin im A th phi khai bo A la mt bin i tng
nh sau:
diem A = new diem ();
A.hien();
Vi d 2: nh ngha lp pheptoan v trong lp ny c cha lp
tinhhieu, mun s dng i tng ca lp tinhhieu th bt buc bn
phi khai bo ch r lp cha y l lp pheptoan nh sau:
pheptoan.tinhhieu con = new pheptoan.tinhhieu();

Ti liu hng dn thc hnh Mn LTHDT vi C#

Bi tp lp trnh hng i tng vi C#

Nm 2008

sau vic truy xut n cc phng thc ca lp th tin hnh


bnh thng nhng lp trong th khng s dng c phng
thc ca lp cha n v ch s dng c thnh phn d liu tnh
ca lp cha m thi.
3. T kha this
T kha this dng tham chiu n chinh bn thn ca i
tng .this l mt con tr n nm ngay bn trong ca mi mt
phng thc ca lp v bn thn chng c th tham chiu n cc
hm v cc bin khc ca mt i tng. T kha this trong C#
cng tng t nh this trong C++.
C ba cch s dng t kha this.
- S dng this phn bit r gia cc thnh vin th hin v cc
tham s ca phng thc khi ta s dng bin th hin v tn ca
tham s trong phng thc trng nhau. Tuy nhin nu mun c
c s r rng, minh bch th c th dng tn bin thnh vin v
tn tham s l khc nhau t u.
Vi d: Trong lp pheptoan c bin thnh vin l int y, int y v
phng thc
public int setXY(int x, int y)
{
this.x=x;
this.y=y;
}
this.x, this.y l tham chiu n 2 thnh phn d liu ca
lp x, y. Cn x, y bn phi php gn chinh l hai i s truyn
vo ca phng thc setXY
- S dng this trao i tng hin hnh nh l mt thng s cho
mt hm hnh s khc. Khi mt i tng ng nhin s tr
thnh mt tham s ca phng thc.
Vi d: vi hai lp class1 c cha phng thc
thietlapdoituong(), lp class2 c cha phng thc

Ti liu hng dn thc hnh Mn LTHDT vi C#

10

Bi tp lp trnh hng i tng vi C#

Nm 2008

saochepdoituong() v mun truyn tham s cho n l i tng ca


lp class1 th s dng t kha thi nh sau:
public void saochepdoituong (class1 a)
{
a.thietlapdoituong(this);
}
- S dng this thao tc vi cc indexer thng c s dng
trong bn dy, indexer v cc tp hp.
4 . B khi dng( constructor/ Phng thc khi to/ thit lp)
C php:
public className([ds tham s]){
// Khi to cho cc thnh phn d liu ca lp
}
trong className: Tn lp
Ch : Phng thc khi to l phng thc c tn trng vi tn
ca lp v khng c kiu tr v
5. S dng cc t kha mc truy cp
+ public : Khng c gii hn, c th truy xut mi ni trong
bn thn lp khai bo v bn ngoi hay trong ni b khi assembly.
+ private: ring t ch c phm vi hot ng trong lp m n
khai bo. Cc phng thc bn ngoi lp khng th truy xut n
n.
+ protected: Cc thnh vin trong lp c khai bo bng
protected th ch c cc phng thc bn trong lp v cc lp dn
xut t lp mi c th truy cp n n.
+ internal: Cc phng thc, cc bin thnh vin c khai
bo bng t kha Internal c th c truy cp bi tt c nhng
phng thc ca bt c lp no trong cng mt khi hp ng
assembly vi lp .
+ protected internal: Cc bin thnh vin c khai bo bng
t kha ny trong mt lp A bt k c th c truy xut bi cc
Ti liu hng dn thc hnh Mn LTHDT vi C#

11

Bi tp lp trnh hng i tng vi C#

Nm 2008

phng thc thuc lp A v cc phng thc ca lp dn xut t


lp A v bt c lp no trong cng mt khi hp ng vi lp A.
- Khi hp ng Assembly c hiu l mt khi chia x v
dng li trong CLR. Khi hp ng l tp hp cc tp tin vt l c
lu tr trong mt th mc bao gm cc tp tin ti nguyn.
Cc thuc tinh truy cp c p dng cho thuc tinh, phng
thc ca lp v bn thn lp. Khi nh ngha thuc tinh truy cp
ca lp l internal, protected ch c nh ngha trong lp lng
nhau m thi.
4. Hm hy b (destructor)
Dng gii phng vng nh cp pht cho i tng khi
m i tung khng cn c tham chiu n. Hm hy b l mt
hm khng c gi tr tr v c tn trng tn vi class v c thm
k t ~ trc. Mun khai bo mt destructor chng ta khai bo
n vi c php nh sau:
class className{
public ~className() {

public classname
{
public classname()
{
// code of constructor
// cc cng vic cn thc hin
}
~ classname()
{
// code of descontructor
// cc cng vic cn thc hin
}
}

Tuy nhin, trong ngn ng C# th c php khai bo trn l mt


shortcut lin kt n mt phng thc kt thc Finalize c kt
vi lp c s, do vy khi vit
Ti liu hng dn thc hnh Mn LTHDT vi C#

12

Bi tp lp trnh hng i tng vi C#

Nm 2008

~ classname()
{
// Thc hin mt s cng vic
}
V vit :
class1.Finalize()
{
// Thc hin mt s cng vic
base.Finalize();
}
Th hai cch vit nh th ny s c C# hiu l nh nhau.
Trong C# c mt i tng h tr cho cng vic dn rc mi
khi i tng khng cn c tham chiu n l i tng GC
(garbage collector). i tng ny thc hin cng vic rn rc qua
3 bc nh sau:
- Tm kim nhng i tng khng cn c tham chiu na
- C gng cc hot ng gii phng i tng khng cn
c tham chiu
- Thi hnh phng thc finalize() hy i tng
Ngoi ra, trong c ch hy b ca C# cn c phng thc Dispose
l mt phng thc i lp hon ton so vi phng thc Finalize()
ca i tng GC.
Phng thc Dispose l cho php chng trnh thc hin cc
cng vic dn dp hay gii phng ti nguyn mong mun m khng
phi ch cho n khi phng thc Finalize() c gi. Khi ta
khng c php dng phng thc Finalize() trong i tng m
thay vo ta s gi mt phng thc tnh ca lp GC (garbage
collector) l GC.SuppressFinalize( this). Sau phng thc
Finalize() s dng gi phng thc Dispose() nh sau:
public void Dispose()
{
// Thc hin cng vic dn dp
// Yu cu b thu dc GC trong thc hin kt thc
GC.SuppressFinalize( this );
}
public override void Finalize()
{ dn thc hnh Mn LTHDT vi C#
Ti liu hng
Dispose();
base.Finalize();

13

Bi tp lp trnh hng i tng vi C#

Nm 2008

Cu lnh using:
Mc d phng thc rn rc ca C# l t ng cung cp nhng
khng th chc rng phng thc Dispose() s c gi v vic
gii phng ti nguyn khng th xc nh c. Cu lnh using s
m bo rng phng thc Dispose() s c gi trong thi gian
sm nht. S dng using bng cch gi cu lnh using v truyn
vo tn i tng mun hy b:
using (tn i tng cn hy b)
Khi trong lp khng khai bo mt destructor no th trnh bin
dch s gi tin trnh Garbage collector trong ngn ng C# gii
phng i tng ny trong b nh. Phn ln trong ngn ng C# th
c c ch t ng gom rc mi khi bin khng c tham chiu
n nn chng ta khng cn quan tm nhiu n n nh trong C++.
5. S dng cc thnh vin tnh static:
Thnh vin tnh khng th hin g cho lp v c thuc tinh v
phng thc m n nh l mt thnh phn ca lp.
S dng t kha static khai bo mt thnh vin tnh. Thnh
phn tnh ch c s dng vi lp, phng thc, thuc tinh, s
kin v constructor nhng khng th c s dng vi nhng bn
dy, indexer, destructor hay kiu khc vi nhng lp.
S dng phng thc tnh:
Mt phng thc static c phm vi hot ng ging nh mt
phng thc ton cc m khng cn to ra bt c mt th hin no
ca lp c. Ton cc y hiu theo ngha l ton cc trong lp.
Ti liu hng dn thc hnh Mn LTHDT vi C#

14

Bi tp lp trnh hng i tng vi C#

Nm 2008

Gi mt phng thc static:


V bn cht thnh phn static l mt thnh phn ca lp khng
th hin tr v v vy khng c mt tham chiu this. Mt hm static
khng th trc tip truy xut n cc thnh vin khng static m
phi thng qua mt i tng th hin ca lp nh sau:
Tenlop.tenhamtinh ([danh sach tham so neu co]:
Vi d diem.hien() l li gi n phng thc tnh c tn l hien()
ca lp diem
S dng cc phng thc khi to static:
Trong khai bo mt static constructor khng c t kha truy
cp. Phng thc tnh ch c th truy nhp n thnh phn d liu
cng c tinh cht tnh m thi. Nu trong khai bo lp c mt hm
static constructor th hm ny s c gi trc khi bt c mt th
hin no ca lp c to ra.
Vic s dng hm khi to static cn c cn nhc k lng
v chng ta khng th theo di n c nh trong C++ v th
thng gy ra nhng hu qu kh lng.
- Khi to private constructor:
Vic s dng mt hm khi to private trong lp s c tc
dng ngn chn to ra bt k mt i tng no ca lp. Hm khi
to private ny mc nhin, khng c tham s g c v trng rng.
Khi trong lp s khng c hm khi to public nn s khng
khi to c bt c mt thnh vin th hin no.
Vi d khng mun to ra bt k mt i tng no ca lp
diem th trong khi nh ngha lp ta s nh ngha thm mt hm
khi to tm vc l private nh sau:
private diem ()
{
// khng lm g c
}

Ti liu hng dn thc hnh Mn LTHDT vi C#

15

Bi tp lp trnh hng i tng vi C#

Nm 2008

S dng cc thuc tnh tnh:


Trong C# khng h c mt bin no c phm vi hot ng ton
cc nh trong mt s ngn ng lp trnh khc ( pascal, C, C++,
Visual Basic ) vic s dng mt bin vi mc ich ton cc tr
nn l mt iu khng th. Bin ton cc trong cc ngn ng khc
c hiu l ton cc trong ng dng nhng i vi C# th ton cc
theo ngha hiu ca n l ton cc trong mt lp v khng c khi
nim ton cc trong ton b chng trnh. Nu ta khai bo mt bin
thnh vin tnh ca lp th bin thnh vin tnh ny c tm vc hot
ng theo ngha ton cc . Cc bin thnh vin tnh c hot
ng tich cc trong vai tr ny.
Lp tnh:
Mt lp c th c xy dng l mt lp tnh v ch cha cc
thnh phn tnh m thi v n khng cho php to th hin ca lp
bng vic s dng t kha new. Lp static thng c ti t ng
trong Net.Framework khi chng trnh hoc namespace cha lp
c ti ln.Vic to mt static class ging vi vic to ra mt lp
m ch cha mt private constructor. Nh vy l c th kim tra
chc chn v m bo nhng thnh vin ca lp ny khng th
c to ra.
Khi no th s dng cc thuc tnh tnh v khi no th s dng
phng thc tnh:
+ S dng phng thc tnh khi mun khi to mt gi tr no
ngay khi chng trnh bin dch m khng cn to th hin ca
lp hay vic to mt thit lp duy nht m mt s chun b
(initializer) khng th thc hin c v ch cn thc hin mt ln
m thi. Trong trng hp nu ta mun lp m sau khi ta nh
ngha khng th tao ra mt th hin no ca n th ta s dng
phng thc khi to private (bn trong thn phng thc trng
rng).
+ S dng bin static khi bn mun to ra mt bin c vai tr
ton cc trong lp theo di hot ng ca n. Vi d nh bn to
ra mt bin static theo di xem thi im hin ti c bao nhiu
Ti liu hng dn thc hnh Mn LTHDT vi C#

16

Bi tp lp trnh hng i tng vi C#

Nm 2008

bin i tng c to ra chng hn. Khi i cng vi vic to


i tng bn hy gi phng thc cha thnh phn tnh ny th
bn c th theo di nh dng bin ton cc trong cc ngn ng lp
trnh khc.
+ S dng lp tnh cha cc phng thc m khng lin
quan ti mt i tng c bit. Chng hn nh yu cu to tp
hp phng thc khng hnh ng theo th hin d liu v khng
lin quan n mt i tng c bit no. Mt static class khng
cho php tha k.
6. Np chng phng thc
Chng phng thc l vic to ra nhiu phng thc trng tn
vi nhau nhng nhn cc tham s khc nhau hay tr v d liu khc
nhau. Vic phn bit cc hm ny da vo du n:
+ Khc nhau cc tham s: khc nhau v s lng tham s
+ Khc nhau v kiu d liu ca tham s, kiu d liu tr v
ca phng thc.
Khi np chng mt phng thc ta phi thay i ki hiu (du
n) ca phng thc, s tham s hay kiu d liu ca tham s hoc
c th thay i c v gi tr ca cc tham s. Khi th thc cht
khng phi l np chng phng thc m l hai phng thc
khc nhau c cng tn nhng khc nhau v kiu gi tr tr v. l
mt iu cn ch khi np chng phng thc.
Khi gi mt phng thc c np chng phng thc th cn
ch v s tham s, kiu d liu cho ph hp vi tng phng
thc nu khng th s pht sinh li khi bin dch chng trnh.
7. ng gi d liu thng qua cc thuc tinh:
ng gi d liu vi thuc tinh thc cht l mt qu trnh ta
ly gi tr cho bin thnh vin v thit lp gi tr cho bin n
c truy cp thng qua phng thc ca lp m khng qua i
tng. Trong C# cung cp kh nng khai bo hm chung gi l
thuc tinh cho hm get v set

Ti liu hng dn thc hnh Mn LTHDT vi C#

17

Bi tp lp trnh hng i tng vi C#

Nm 2008

public string (tn thuc tnh)


{
get { //Ly gi tri thuc tnh }
set { //Tr v gi tr cng kiu vi thuc tnh khai bo}
}

+ Phng thc get tr v mt i tng d liu kiu thuc tinh,


phng thc ny ging phng thc ca i tng.
+ Phng thc set: thit lp gi tr ca thuc tinh, c kiu tr v
l void. Khi thit lp mt phng thc set phi dng t kha value
tng trng cho i c trao v c gi bi thuc tinh.
Li ich ca vic gi ghm d liu l che giu thng tin mc d
ngi s dng vn thao tc vi thuc tinh.
Vi im cn ch khi nh ngha mt thuc tinh
+ Ta khng khai bo tng minh cc tham s trong th tc set..
+ C th ch xy dng thuc tinh ch c hoc ch vit bng
cch b i mt trong hai th tc trn.
+ Nu ta mun to mt thuc tinh c public c nhng li
mun hn ch protected trong gn th phi to thuc tinh ch c
public sau to mt hm set() vi truy cp protected bn ngoi
thuc tinh .
+ C# cho php bn to mt thuc tinh virtual hay abstract ( xem
thm k tha v a hnh) c php nh sau:
public abstract string (tn thuc tinh)
{
get;
set;
}

Ti liu hng dn thc hnh Mn LTHDT vi C#

18

Bi tp lp trnh hng i tng vi C#

B.

Nm 2008

BI TP MU
1. Xy dng lp
V d 1:
Xy dng lp diem vi cc thuc tinh tung , honh ca
im , phng thc i ta gia dng v m, phng thc di
chuyn theo mt gi tr nhp vo t bn phim, phng thc hin
im ln mn hnh.
a, Hng dn:
+ cc thuc tinh gm c:
int x ; // ta honh
int y ; // ta tung
+ cc phng thc ca lp:
nhp thng tin
i ta
phng thc move: di chuyn im
phng thc hien: hin thng tin ln mn hnh
b, Bi gii mu:
class Diem
{
public int x, y;
{
x = ox;
y = oy;
}
public void nhap()
{
Console.WriteLine("Nhap toa do cua diem:");
x = int.Parse(Console.ReadLine());
y = int.Parse(Console.ReadLine());
}
public void move(int dx, int dy)
{
x += dx;
y += dy;
}
public void chuyen()
{
x = -x;dn thc hnh Mn LTHDT vi C#
Ti liu hng
y = -y;
}

19

Bi tp lp trnh hng i tng vi C#

Nm 2008

public void hien()


{
Console.Write("toa do :(");
Console.Write("{0},{1}", x, y);
Console.WriteLine(")");
}
}

Trong vi d trn, chng ti ch ra cch khai bo mt lp th cn


phi khai bo tng minh cc thuc tinh (thnh phn d liu), v
c cc phng thc (ci m mt i tng ca lp c th thi hnh).
Vi mt phng thc khng c gi tr tr v th khai bo c t kha
void cn nu c gi tr tr v th phi khai bo c gi tr tr v.
V d 2:
Xy dng lp stack m phng mt stack bao gm
-

Hm khi to s phn t ti a,
Phng thc isEmpty kim tra xem stack c rng khng
Phng thc isFull kim tra xem stack c y khng
Phng thc push v pop thm vo, ly ra mt phn t
a, Hng dn:
Cc thuc tinh ca lp stack gm c:
top: m t phn t u stack
n: s phn t ti a ca stack

Ti liu hng dn thc hnh Mn LTHDT vi C#

20

Bi tp lp trnh hng i tng vi C#

Nm 2008

Cc phng thc ca lp gm c:
public stack(): khi to gi tr ca stack vi s phn t ti a
pubic bool empty(): tr v gi tr kiu ng sai khi stack rng
hay khng
public bool full(): tr v kiu ng sai khi stack y hay khng
y
public void push (int x):thm mt phn t vo stack
public int pop(): Ly ra mt phn t t stack. y l hm v n
c tr ra gi tr, gi tr chinh l phn t m ta va ly ra c t
stack.
b, Bi gii mu:
using System;
namespace Stack
{
class Stack
{
private int top;
private int []s;
public bool empty()
{
return (top == -1);
}
public bool full()
{
return (top >= s.Length);
}
public Stack ()
{
s = new int[20];
top=-1;
}
public void push(int x)
{
if(!full())
{
Ti liu hng dn thc hnh Mn LTHDT vi C#

21

Bi tp lp trnh hng i tng vi C#

Nm 2008

top=top+1;
s[top]=x;
}
else
Console.Write("Stack tran");
}
public int pop()
{
if (empty())
{
Console.Write("Stack can");
return 0;
}
else
return s[top--];
}
}
2. S dng lp
V d 1:
Xy dng lp diem nh bi 1 sau vit chng trnh nhp
ta ca im t bn phim, di chuyn mt ta , ly ta i
xng, hin ta ca im ln mn hnh.
a, Hng dn:
Thuc tinh v phng thc ca lp diem ging ht bi trn, khi
mun xy dng chng trnh ta ch vic s dng i tng ca
lp m thi. Mun vy phi khai bo i tng kiu lp bng s
dmg t kha new cp pht vng nh. truy xut n cc
phng thc ca lp th ta truy xut thng qua cc i tng ca
lp diem
Chng hn nh c i tng ca lp la A mun truy xut ti
phng thc nhap() th ta truy nhp nh sau: A.nhap();

Ti liu hng dn thc hnh Mn LTHDT vi C#

22

Bi tp lp trnh hng i tng vi C#

Nm 2008

b, Chng trnh hon thin nh sau:


using System;
using System.Collections.Generic;
using System.Text;
namespace vidu1
{
class diem
{
public int x, y;
public void move(int dx, int dy)
{
x += dx;
y += dy;
}
public void hien()
{
Console.Write("toa do :(");
Console.Write("{0},{1}", x, y);
Console.WriteLine(")");
}
public void chuyen()
{
x = -x;
y = -y;
}
public void nhap()
{
Console.WriteLine("Nhap toa do cua diem:");
x = int.Parse(Console.ReadLine());
y = int.Parse(Console.ReadLine());
}
}
class tester
{
static void Main(string[] args)
Ti liu hng dn thc hnh Mn LTHDT vi C#

23

Bi tp lp trnh hng i tng vi C#

Nm 2008

{
diem b = new diem();
// bien trong C# luon doc khoi gan gia tri truoc khi su
dung
b.nhap();
Console.Write("diem b ");
b.hien();
Console.WriteLine("toa do doi xung la:");
b.chuyen();
b.hien();
b.move(2, 6);
}
}
}
Kt qu sau khi chy chng trnh l
Nhap toa do cua diem:
8
19
diem b toa do : (8,19)
toa do doi xung la:
toa do(-8,-19)
diem b sau khi di chuyen la:
toa do (-6,-13)

V d 2:
Xy dng chng trnh nhp tam gic, tinh chu vi, din tich v
in ra mn hnh l loi tam gic no: cn, vung, vung cn, u
hay thng.
a, Hng dn:

Ti liu hng dn thc hnh Mn LTHDT vi C#

24

Bi tp lp trnh hng i tng vi C#

Nm 2008

Trong bi ny s ni s qua v mt s thuc tinh truy cp ca mt


s thnh phn trong lp (chi tit v phn ny xin cc bn tham kho
phn sau mang tn l s dng cc t kha ch mc truy cp)
Thuc tinh ca lp l di ba canh ca tam gic
Cc phng thc ca lp:
Phng thc nhp thng tin
Phng thc hin thng tin
Phng thc kim tra loi tam gic
Phng thc tinh chu vi tam gic
Phng thc tinh din tich tam gic
y, v phng thc nhp thng tin v phng thc hin
thng tin chng ta mong mun s c s dng trong bt k hm
no nn ta xy dng c thuc tinh public, cn phng thc cho bit
loi tam gic, tinh din tich tam gic v chu vi tam gic th chng ta
mong mun c tinh cht bo v v khng cho cc thnh phn bn
ngoi tc ng vo n th s xy dng c thuc tinh truy xut la
private. V sao vy? Mun xy dng c thuc tinh truy cp l
public c c khng? Cu tr li l c nhng khng c tinh cht
che chn d liu v mt thnh phn c th lm thay i n n
trong khi tiu chi xp loi tam gic, tinh din tich v chu vi tam
gic th i vi tam gic no cng ging nhau do ta xy dng n
l private.
b, Gii mu:
using System;
namespace VD2
{
class tamgiac
{
private int a;
private int b;
private int c;
private int i=0;
public void nhap()
{
Ti liu hng dn thc hnh Mn LTHDT vi C#

25

Bi tp lp trnh hng i tng vi C#

Nm 2008

Console.WriteLine("nhap thong so cho tam giac");


a=Convert.ToInt32(Console.ReadLine());
b=Convert.ToInt32(Console.ReadLine());
c=Convert.ToInt32(Console.ReadLine());
}
public void hien()
{
Console.WriteLine("tam giac ma ban vua nhap la:");
Console.WriteLine("do dai ba
canh:,{0},{1},{2}",a,b,c);
Console.WriteLine("chu vi:{0}",chuvi());
Console.WriteLine("dien tich:{0}",dientich());
i = loaitg();
switch(i)
{
case 1:
Console.WriteLine("la tam giac deu");break;
case 2:
Console.WriteLine("la tam giac vuong
can");break;
case 3:
Console.WriteLine("la tam giac can");break;
case 4:
Console.WriteLine("la tam giac vuong");break;
case 5:
Console.WriteLine("la tam giac thuong");break;
}
}
private double dientich()
{
return 0.25 * Math.Sqrt((a+b+c) * (a+b-c) * (a-b+c) *
(b+c-a));
}
private double chuvi()
{
Ti liu hng dn thc hnh Mn LTHDT vi C#

26

Bi tp lp trnh hng i tng vi C#

Nm 2008

return (a + b + c);
}
private int loaitg()
{
if((a==b) || (b==c) || (a==c))
{
if (a==b && b==c)
return 1;
else
{
if ((a*a==b*b+c*c) || (b*b==a*a+c*c) ||
(c*c==a*a+b*b))
return 2;
else
return 3;
}
}
else
{
if (a*a==b*b+c*c ||b*b==a*a+c*c ||c*c==a*a+b*b)
return 4;
else
return 5;
}
}
}
class tester
{
static void Main(string[] args)
{
tamgiac tg = new tamgiac();
tg.nhap();
tg.hien();
Console.ReadLine();
}
Ti liu hng dn thc hnh Mn LTHDT vi C#

27

Bi tp lp trnh hng i tng vi C#

Nm 2008

}
}
Kt qu sau khi chy chng trnh nh sau:
nhap thong so cho tam giac
3
4
5
tam giac ma ban vua nhap la:
do dai ba canh: 3,4,5
chu vi: 12
dien tich:6
la tam giac vuong

Cc bn ch vo phn in nghing. l phng thc hien()


ca lp nhng chng li c th truy nhp n phng thc tinh din
tich v phng thc hin ca lp. Nh vy l trong cng mt lp
cc phng thc cng cp c th truy xut ln nhau.
V d 3:
S dng lp stack trn xy dng mt chong trnh chuyn
i c s m t h 10 sang h 2, h 8, h 16 bng cch s dng
php chia lin tip.
a, Hng dn:
Mun i mt s t h 10 sang h 2, 8,16 th ta ly s chia
lin tip cho h s mun i. mi ln chia, c s d th ta
push n vo stack. Thc hin tip cho n khi s d nh hn s
chia th dng li v pop ln lt cc phn t trong stack ra ta c
kt qu.
b, Bi gii mu:
using System;
using System.Collections.Generic;

Ti liu hng dn thc hnh Mn LTHDT vi C#

28

Bi tp lp trnh hng i tng vi C#

Nm 2008

using System.Text;
namespace stack
{
class Stack
{
private int top;
private int[] s;
public bool empty()
{
return (top == -1);
}
public bool full()
{
return (top >= s.Length);
}
public Stack()
{
s = new int[20];
top = -1;
}
public void push(int x)
{
if (!full())
{
top = top + 1;
s[top] = x;
}
else
Console.Write("Stack tran");
}
}
public int pop()
{
if (empty())
{
Ti liu hng dn thc hnh Mn LTHDT vi C#

29

Bi tp lp trnh hng i tng vi C#

Nm 2008

Console.Write("Stack can");
return 0;
}
else
return s[top--];
}
}
class tester
{
static void Main()
{
int n, a, k;
Console.Write("Nhap vao so can doi:");
n = int.Parse(Console.ReadLine());
Console.Write("Nhap vao he so can chuyen:");
a = int.Parse(Console.ReadLine());
Stack T = new Stack();
if (a == 2)
{
while (n != 0)
{
T.push(n % 2);
n = n / 2;
}
Console.Write("Ket qua chuyen sang he nhi phan:");
while (!T.empty())
{
Console.Write("{0}", T.pop());
}
}
if (a == 8)
{
while (n != 0)
{

Ti liu hng dn thc hnh Mn LTHDT vi C#

30

Bi tp lp trnh hng i tng vi C#

Nm 2008

T.push(n % 8) ;
n = n / 8;
}
Console.Write("Ket qua chuyen sang he bat phan:");
while (!T.empty())
{
Console.Write("{0}", T.pop());
}
}
if (a == 16)
{
string st = "0123456789ABCDEF";
while (n != 0)
{
T.push((int)st[n % 16]);
n = n / 16;
}
Console.Write("Ket qua chuyen sang he thap luc
phan:");
while (!T.empty())
{
Console.Write("{0}",(char)T.pop());
}
}
Console.ReadLine();
}
}
}
Kt qu sau khi chy chng trnh l:
Nhap vao so can doi: 8
Nhap vao he can doi: 2
Ket qua: 1000

Ti liu hng dn thc hnh Mn LTHDT vi C#

31

Bi tp lp trnh hng i tng vi C#

Nm 2008

c hai vi d trn c mt phng thc public Stack () y


chinh l mt phng thc thit lp ca lp stack nhng khng c
tham s. Chinh phng thc ny khi to cho chng ta mt
stack vi s phn t ti a l n ( n=20).
3. Lp lng nhau v cch truy xut
Xy dng mt lp n gin c s dng lp lng nhau. Xy
dng lp tinhtong c phng thc nhp, tinh tng. Trong lp c
cha lp nh hn l lp tinh hiu ca ba s trong mt s l
thnh phn d liu ca lp cha.
a, Hng dn:
Thnh phn d liu ca lp cha (lp tinhtong) gm :
public int x;
public int y;
static int c; khai bo l static lp trong sau ny c th s
dng c
Phng thc nhap(), tinhtong()
Thnh phn d liu ca lp trong (lp tinhieu) gm
int a;
int b;
Phng thc gm nhap(), hieu() tinh hiu trong c s dng
bin c ca lp cha.
S dng lp tinhieu: Khai bo mt i tng ca lp tinhhieu th
phi ch r c lp cha n na. Vi d khai bo mt i tng con
ca lp tinhhieu th phi khai bo: tinhtong.tinhhieu con = new
tinhtong.tinhhieu();
b, Bi gii mu:
using System;
namespace loplongnhau
{
class tinhtong // lop chua
{
public int x;
public int y;
Ti liu hng dn thc hnh Mn LTHDT vi C#

32

Bi tp lp trnh hng i tng vi C#

Nm 2008

static int c;
public void nhap()
{
Console.Write("x =");
x = Convert.ToInt32(Console.ReadLine());
Console.Write("y =");
y = Convert.ToInt32(Console.ReadLine());
Console.Write("c =");
c = int.Parse(Console.ReadLine());
}
public double tong()
{
return (x + y);
}
public class tinhhieu // lop long
{
int a;
int b;
public void nhap()
{
Console.WriteLine("nhap thong tin cho doi tuong
lop ben trong:");
Console.Write("a =");
a = int.Parse(Console.ReadLine());
Console.Write("b =");
b = int.Parse(Console.ReadLine());
}
public int hieu()
{
return (a - b - c);
}
}
static void Main(string[] args)
{
Console.WriteLine("khai bao va su dung lop chua:");
Ti liu hng dn thc hnh Mn LTHDT vi C#

33

Bi tp lp trnh hng i tng vi C#

Nm 2008

tinhtong cha = new tinhtong();


cha.nhap(); // phuogn thuc nay cua lop cha
Console.WriteLine("x+y={0}", cha.tong());
Console.WriteLine("khai bao va su dung lop ben
trong:");
tinhtong.tinhhieu con = new tinhtong.tinhhieu();
con.nhap();
Console.Write("a-b-c={0}",con.hieu());
Console.ReadKey();
}
}
}
Kt qu sau khi chy chng trnh:
Khai bao va su dung lop chua:
x =9
y =6
c =3
x+y=15
khai bao va su dung lop con:
nhap thong tin cho doi tuong lop con:
a=8
b=6
a - b - c = -1

4. Chng trnh khai bo nhiu lp


Xy dng 2 lp: lp hocsinh bao gm h tn hc sinh, m s
hc sinh, nm sinh ca hc sinh v lp danhsach dng cha ton
b hc sinh nhp, sp xp th t li theo nm sinh.
a, Hng dn:
Cc thuc tinh ca lp hocsinh:
private string mshv;
private string hoten;
Ti liu hng dn thc hnh Mn LTHDT vi C#

34

Bi tp lp trnh hng i tng vi C#

Nm 2008

private int namsinh;


Cc phng thc:
Phng thc nhp thng tin,
Phng thc hin thng tin
Phng thc so snh nm sinh ca sinh vin tr ra gi tr l 0; 1
hay -1 khi tng ng vi kt qu bng, ln hn, nh hn.
Cc thuc tinh ca lp dachsach chinh l mt mng cc hc sinh
lp hocsinh
Phng thc gm
Nhp: thi hnh phng thc nhap() cho tng i tng kiu
hocsinh
In danh sch: thi hnh phng thc hien() cho tng i tng
kiu hocsinh
Sp xp danh sch theo th t nm sinh gim dn
b, Bi gii mu:
namespace vidu6
{
class Program
{
class Hocsinh
{
private string ms;
private string hoten;
private int namsinh;
public Hocsinh()
{
}
public void nhap()
{
Console.Write("ma so:"); ms = Console.ReadLine();
Console.Write("ho ten:"); hoten =
Console.ReadLine();
Console.Write("nam sinh:");
namsinh = int.Parse(Console.ReadLine());
}
Ti liu hng dn thc hnh Mn LTHDT vi C#

35

Bi tp lp trnh hng i tng vi C#

Nm 2008

public void nhap()


{
Console.Write("ma so:"); ms = Console.ReadLine();
Console.Write("ho ten:"); hoten =
Console.ReadLine();
Console.Write("nam sinh:");
namsinh = int.Parse(Console.ReadLine());
}
public int ssnamsinh(Hocsinh a,Hocsinh b)
{
int k;
if (a.namsinh > b.namsinh)
k =1;
else {
if (a.namsinh == b.namsinh)
k= 0;
else k = -1;
}
return k;
}
public void print()
{
Console.WriteLine("\t{0}\t{1}\t{2}", ms, hoten,
namsinh);
}
}
class Danhsach
{
int n, i;
private Hocsinh[] ds;
public Danhsach(int n)
{
ds = new Hocsinh[n];
}
public void nhapds()
Ti liu hng dn thc hnh Mn LTHDT vi C#

36

Bi tp lp trnh hng i tng vi C#

Nm 2008

{
Console.Write("so hoc sinh = ");
n = Convert.ToInt32(Console.ReadLine());
ds = new Hocsinh[n];
for (i = 0; i < ds.Length; i++)
ds[i] = new Hocsinh();
for (i = 0; i < n; i++)
{
Console.WriteLine("hoc sinh thu {0}:", i + 1);
ds[i].nhap();
}
}
public void printds()
{
Console.WriteLine("danh sach hoc sinh ban dau:");
for (i = 0; i < ds.Length; i++)
{
Console.WriteLine("\t \ t \t ");
Console.Write("\t{0}", i + 1);
ds[i].print();
}
}
public void sapxep()
{
for (i = 0; i < n; i++)
{
Hocsinh max = ds[i];
for (i = 0; i < n; i++)
{
if (max.ssnamsinh(ds[i], ds[i + 1]) == 1)
{
max= ds[i + 1];
ds[i + 1] = ds[i];
ds[i] = max;
}
Ti liu hng dn thc hnh Mn LTHDT vi C#

37

Bi tp lp trnh hng i tng vi C#

Nm 2008

for (i = 0; i < n; i++)


ds[i].print();
}
}
}
}
static void Main(string[] args)
{
Danhsach d = new Danhsach(3);
d.nhapds();
d.printds();
Console.WriteLine("danh sach sap sep theo nam
sinh:");
d.sapxep();
Console.ReadLine();
}
}
}
Kt qu sau khi chy chng trnh:
So hoc sinh = 3
Hoc sinh thu 1:
Ma so: hs1
Ho ten: nguyen thi mai huong
Nam sinh 1987
Hoc sinh thu 2:
Ma so: hs2
Ho ten: nguyen van hai
Nam sinh 1986
Hoc sinh thu 3:
Ma so: hs3
Ho ten: ta van ngoc
Nam sinh 1989
Danh sach hoc sinh ban dau:
Mhs ho ten
nam sinh
hs1 nguyen thi mai huong 1987
hs2 nguyen van hai
1986
hs3 ta van ngoc
1989
Danh
xepMn
theo LTHDT
nam sinh:
Ti liu hng
dnsach
thcsap
hnh
vi C#
hs2 nguyen van hai
1986
hs1 nguyen thi mai huong 1987

38

Bi tp lp trnh hng i tng vi C#

Nm 2008

5. T kha this
1. S dng this phn bit tham s phng thc v bin thnh
vin ca lp.
Xy dng lp phung trnh bc hai n gin v thc hin tinh
nghim cho phng trnh . Trong chng trnh c xy dng hm
thit lp khng tham s v c tham s. S dng t kha thi trong
bi phn bit r bin thnh vin ca lp v tham s ca phng
thc.

a, Hng dn:
V trong bi ch yu cu xy dng mt lp n gin nn thnh phn
thuc tinh v phng thc gm c:
Thuc tinh: Cc h s ca phng trnh bc hai;
public double a, b, c;
Phng thc :
Phng thc khi to khng tham s: public ptbachai()
Phng thc khi to ba tham s:public ptbachai(int a, int b,
int c)
V trong phng thc ny ta s dng tham s ca phng thc
trng vi bin thnh vin ca lp nn ta phi s dng t kha thi
phn bit gia chng.
Phng thc nhp
Phng thc hin phng trnh
Phng thc tinh nghim
b, Bi gii mu:
Ti liu hng dn thc hnh Mn LTHDT vi C#

39

Bi tp lp trnh hng i tng vi C#

Nm 2008

using System;
namespace vidu4
{
class Ptbachai
{
public double a, b, c;
public ptbachai()
{
a = 5;
b = 3;
c = 8;
}
public ptbachai(int a, int b, int c)
{
this.a = a;
this.b = b;
this.c = c;
}
public void nhap()
{
Console.WriteLine("nhap he so cho PTB2:");
a = Convert.ToInt32(Console.ReadLine());
b = Convert.ToInt32(Console.ReadLine());
c = Convert.ToInt32(Console.ReadLine());
}
private void tinhnghiem()
{
double x, y;
double delta;
delta=this.b*this.b-4*this.a*this.c;
if (delta < 0)
{
Console.WriteLine("khong co nghiem");
}
else
Ti liu hng dn thc hnh Mn LTHDT vi C#

40

Bi tp lp trnh hng i tng vi C#

Nm 2008

{
if (delta == 0)
{
x = -this.b / 2 *this. a;
Console.WriteLine("nghiem kep x = y ={0}",x);
}
else
{
x = (-this.b - Math.Sqrt(delta)) / 2 *this.a;
y = (-this.b + Math.Sqrt(delta)) / 2 *this.a;
Console.WriteLine("PT co hai nghiem phan
biet:");
Console.WriteLine("x = {0}; y = {1}", x, y);
}
}
}
public void hien()
{
Console.WriteLine("phuong trinh bac hai:");
Console.WriteLine("{0}*x2 + {1}*x + {2}", this.a,
this.b, this.c);
}
class tester
{
static void Main(string[] args)
{
ptbachai x = new ptbachai();
x.hien(); x.tinhnghiem();
ptbachai y = new ptbachai();
y.nhap();
y.hien();
y.tinhnghiem();
Console.ReadKey();
}
}
Ti liu hng dn thc hnh Mn LTHDT vi C#

41

Bi tp lp trnh hng i tng vi C#

Nm 2008

}
}
Trong phng thc khi to ba tham s c cu lnh this.a=a
th this.a chinh l bin thnh vin ca lp cn a y li l tham s
ca phng thc m bn nhp vo khi chy chng trnh v n
c truyn vo bng cu lnh gn. Cc bin public c truy xut
ti mi ni trong chng trnh. Bin khai bo bng t kha ny
c hiu nh l bin cng cng ca lp v c th truy xut bt k
nu mun.
Kt qu sau khi chy chng trnh:
phuong trinh bac hai:
5*x2 + 3*x + 8
khong co nghiem
nhap he so cho PTB2
5
8
-4
phuong trinh bac hai:
5*x2 + 8*x + -4
PT co hai nghiem phan biet:
x = -50; y = 10

2. S dng t kha th trao i tng hin hnh nh mt tham


s, minh hc
s dng bin khai bo private
Xy dng mt lp nhanvien nhp h tn, chc v nhn vin,
tin lng nhn vin, hin thng tin c lin quan. Xy dng mt
lp dng tinh thu m nhn vin phi np cho nh nc t tin
lng . (S tin ny hin th cng cc thng tin lin quan n
nhn vin trong phng thc hin th ca lp nhanvien).
Ti liu hng dn thc hnh Mn LTHDT vi C#

42

Bi tp lp trnh hng i tng vi C#

Nm 2008

a, Hng dn:
Cc thnh phn ca lp nhanvien chng ta vn xy dng bnh
thng nh cc vi d trc. Ch khc ch trong phng thc hin
c tham chiu ti i tng ca lp Thue dng tinh thu phi
np nh sau: Thue.Thuephainop(this) trong Thuephainop l
phng thc tinh thu ca class Thue c i s l i tng lp
nhanvien.
b, Bi gii mu:
using System;
class Nhanvien
{
private string hoten;
private string chucvu;
private decimal tienluong;
public Nhanvien()
{
}
public Nhanvien(string hoten, string chucvu, decimal
tienluong)
{
Console.WriteLine("Su dung PTTL 3 tham so:");
this.hoten = hoten;
this.chucvu = chucvu;
this.tienluong = tienluong;
}
public void nhap()
{
Console.Write("Ho ten:");
hoten = Console.ReadLine();
Console.Write("Chuc vu:");
chucvu = Console.ReadLine();
Console.Write("Tien luong:");
tienluong = decimal.Parse(Console.ReadLine());
}
Ti liu hng dn thc hnh Mn LTHDT vi C#

43

Bi tp lp trnh hng i tng vi C#

Nm 2008

public void dipslayNV()


{
Console.WriteLine("Ho ten:\t{0}", hoten);
Console.WriteLine("Ma chuc vu:\t{0}", chucvu);
Console.WriteLine("Tien luong la:\t{0:C}", tienluong);
// Trao doi tuong cua lop Thue nhu mot doi so
Console.WriteLine("Thue phai nop:\t{0:C} ",
Thue.Thuephainop(this));
}
// xay dung phuong thuc chi doc gia tri cua doi tuong
public decimal luong
{
get { return tienluong; }
}
}
class Thue
{
public static decimal Thuephainop(Nhanvien E)
{
return 0.03m * E.luong;
// E.luong: doc gia tri cua truong luong
}
}
class MainClass
{
static void Main()
{
Nhanvien E1 = new Nhanvien("Nguyen Tien Quynh
Anh","thu ki", 2200000);
E1.dipslayNV();
Nhanvien E2 = new Nhanvien();
E2.nhap();
E2.dipslayNV();
Console.ReadKey();
}
Ti liu hng dn thc hnh Mn LTHDT vi C#

44

Bi tp lp trnh hng i tng vi C#

Nm 2008

}
Kt qu khi chy chng trnh:
Su dung PTTL 3 tham so:
Hien thi thong tin:
Ho ten: Nguyen Tien Quynh Anh
Chuc vu: thu ki
Tien luong: $2,200,000.00
Thue phai nop: $ 66,000.00
Nhap thong tin:
Ho ten: Chu Thi Minh Ha
Chuc vu: ke toan
Tien luong: 2546000
Hien thi thong tin:
Ho ten: Chu Thi Minh Ha
Chuc vu: ke toan
Tien luong la: $2546000
Thue phai nop: $76,380.00

6. Hm thit lp v hm thit lp sao chp, hm sao chp cho


lp vector
Xy dng mt lp vector n gin c s dng cc hm thit
lp khng tham s, mt tham s v hai tham s.Trong lp c s
dng hm thit lp sao chp, hm sao chp cho i tng ca lp
(phn bit hai cch dng ca constructor)
a, Hng dn:
V vecto l mt i tng m cc thnh phn d liu khng
tnh nn phi khai bo vng nh dng cha cc ta l mt
mng mt chiu: float[] v
i vi cc hm thit lp khng tham s v mt tham s th
khng c g ng ngi c. Ch c hm thit lp hai tham s th cn
ch mt cht: Trong hm thit lp hai tham s th mt tham s l
s chiu ca vecto cn tham s cn li l mt mng mt chiu m
Ti liu hng dn thc hnh Mn LTHDT vi C#

45

Bi tp lp trnh hng i tng vi C#

Nm 2008

ta s c cc phn t ca mng vo cho vecto nn phng thc ny


c khai bo nh sau:public vecto(int size, float[] u) trong float
[] u chinh l mng c cha sn cc phn t.
Vi hm thit lp sao chp th chinh l vic sao chp li gi tr
ca cc thnh phn d liu c trong mt i tng cng lp
vecto v a vo vng nh ca vecto c cp pht b nh.
public vecto(int size, float[] u)
{
int i; n = size;
v = new float[n];
for (i = 0; i < n; i++)
{
v[i] = u[i];
}
}
b, Chng trnh mu:
using System;
namespace vidu7
{
class Vecto
{
int n = 20;
float[] v;
public vecto()
{
int i;
Console.WriteLine("\t Su dung ham thiet lap khong
tham so:");
Console.Write("\t So chieu cua vecto la:");
i = Convert.ToInt32(Console.ReadLine());
n = i;
v = new float[n];
Console.WriteLine("\t nhap thong so cho vecto:");
Ti liu hng dn thc hnh Mn LTHDT vi C#

46

Bi tp lp trnh hng i tng vi C#

Nm 2008

for (i = 0; i < n; i++)


{
Console.Write("\t toa do thu {0}:", i);
Console.Write("\t v[{0}]=", i + 1);
v[i] = int.Parse(Console.ReadLine());
}
}
public vecto(int size)
{
int i;
Console.WriteLine("\t Su dung ham thiet lap mot tham
so:");
n = size;
v = new float[n];
Console.WriteLine("\t nhap thong so cho vecto:");
for (i = 0; i < n; i++)
{
Console.Write("\t toa do thu {0}:", i);
Console.Write("\t v[{0}]=", i + 1);
v[i] = int.Parse(Console.ReadLine());
}
}
public vecto(int size, float[] u)
{
int i;
Console.WriteLine("\t Su dung ham thiet lap hai tham
so:");
n = size;
v = new float[n];
Console.WriteLine("\t tao mot vecto tu mot mang mot
chieu:");
for (i = 0; i < n; i++)
{
v[i] = u[i];
}
Ti liu hng dn thc hnh Mn LTHDT vi C#

47

Bi tp lp trnh hng i tng vi C#

Nm 2008

}
public vecto(vecto u)
{
int i;
Console.WriteLine("\t su dung ham thiet lap sao
chep:");
// xin cap phat vung nho co kich thuoc bang voi doi
tuong cu
v = new float[n = u.n];
// thuc hien gan cac vung nho dong cua doi tuong cu
sang doi tuong moi
for (i = 0; i < n; i++)
{
v[i] = u.v[i];
}
}
public void saochep(vecto b)
{
n = b.n;
Console.WriteLine("\t Su dung ham sao chep");
for (int i = 0; i < n; i++)
{
this.v[i] = b.v[i];
}
}
public void hien()
{
Console.Write(\t "(");
for (int i = 0; i < v.Length; i++)
if (i == v.Length - 1)
Console.Write("{0}", v[i]);
else
Console.Write("{0},", v[i]);
Console.WriteLine(")");
}
Ti liu hng dn thc hnh Mn LTHDT vi C#

48

Bi tp lp trnh hng i tng vi C#

Nm 2008

class tester
{
static void Main(string[] args)
{
vecto v1 = new vecto();
Console.Write("\t v1:");v1.hien();
vecto v2 = new vecto(4);
Console.Write("\t v2:");v2.hien();
float[] a ={ 12, 8, 11, 3, 20 , 85 };
vecto v3 = new vecto(4, a);
Console.Write("\t v3:"); v3.hien();
vecto v4 = new vecto(v3);
Console.Write("\t v4:"); v4.hien();
if (v3.n==v2.n)
v3.saochep(v2);
else
{
Console.WriteLine("\t khong tien hanh sao
chep. Gia tri vecto van la:");
}
Console.Write("\t v3:"); v3.hien();
Console.ReadLine();
}
}
}
}
Kt qu sau khi chy chng trnh:
Su dung ham thiet lap khong tham so:
So chieu cua vecto la: 2
Nhap thong so cho vecto:
v[1]=10

v[2]=89
v1:
(10,89)
dung
ham
thiet
lap mtvi
tham
Ti liu hng dnSu
thc
hnh
Mn
LTHDT
C# so:
Nhap thong so cho vecto:
v[1]=4
v[2]=5

49

Bi tp lp trnh hng i tng vi C#

Nm 2008

7. S dng hm thit lp sao chp v hm hy b


Xy dng lp thoigian ly v thi gian hin hnh. C s dng
phng thc khi to, phng thc sao chp v phng thc hy
b.

a, Hng dn:
ly c thi gian hin hnh th ta s dng hm now.
Cc thuc tinh ca lp gm ngy, thng, nm, gi, pht, giy c
ly theo thi gian h thng thng qua hm System.DateTime.Now
Cc phng thc ca lp gm:
public dipslay() dng hin th thng tin
public ThoiGian (System.DateTime tg): thit lp sao chp thi
gian t mt i tng c
public ThoiGian( int Date,int Month,int Year,int Hour, int
Minute,int Second): PT thit lp 6 tham s khi to gi tr cho bin
i tng.
public ThoiGian(int Date,int Year,int Hour,int Second): PT
thit lp 4 tham s khi to gi tr cho bin i tng.
Ti liu hng dn thc hnh Mn LTHDT vi C#

50

Bi tp lp trnh hng i tng vi C#

Nm 2008

public void saochep(ThoiGian TG) dng sao chp i


tng.
~ ThoiGian(): l phng thc hy b i tng ca
lp.Phng thc ny s c gi t ng bi trnh thu gom rc ca
C#
b, Bi gii mu
using System;
namespace saochep
{
public class ThoiGian
{
private int Nam ;
private int Thang = 7;
private int Ngay = 30;
private int Gio = 5;
private int Phut = 19;
private int Giay = 23;
System.DateTime now = System.DateTime.Now;
public void dipslay()
{
System.Console.WriteLine("\t Ngay:{0}/{1}/{2}",
Ngay, Thang, Nam);
System.Console.WriteLine("\t Gio:{0}:{1}:{2}", Gio,
Phut, Giay);
}
public ThoiGian( System.DateTime tg)
// hm thit lp sao chp
{
Nam = tg.Year;
Thang = tg.Month;
Ngay = tg.Day;
Gio = tg.Hour;
Phut = tg.Minute;
Giay = tg.Second;
}
-

Ti liu hng dn thc hnh Mn LTHDT vi C#

51

Bi tp lp trnh hng i tng vi C#

Nm 2008

public void saochep(ThoiGian TG)


{
this.Gio=TG.Gio;
this.Phut=TG.Phut;
this.Giay=TG.Giay;
this.Ngay = TG.Ngay;
this.Thang = TG.Thang;
this.Nam = TG.Nam;
}
public ThoiGian( int Date,int Month,int Year,int Hour,
int Minute,int Second)
// ham thiet lap 6 tham so
{
Nam = Year;
Thang = Month;
Ngay = Date;
Gio = Hour;
Phut = Minute;
Giay = Second;
}
public ThoiGian(int Date, int Year, int Hour, int
Second)
{
Nam = Year;
Ngay = Date;
Gio = Hour;
Giay = Second;
}
~ThoiGian()
{
Console.WriteLine("\t\t doi tuong da duoc huy");
GC.SuppressFinalize(this);
Console.ReadKey();
}
}
Ti liu hng dn thc hnh Mn LTHDT vi C#

52

Bi tp lp trnh hng i tng vi C#

Nm 2008

public class Tester


{
static void Main()
{
System.DateTime currentTime =
System.DateTime.Now;
Console.WriteLine("\t Thoi gian hien hanh la:\t\t");
ThoiGian tghh = new ThoiGian( currentTime );
tghh.dipslay();
Console.WriteLine("\t t1 khoi tao tu ham thiet lap sao
chep:\t");
ThoiGian t1 =tghh;
t1.dipslay();
Console.WriteLine("\t t2 goi ham thiet lap 6 tham
so:\t");
ThoiGian t2 = new ThoiGian(12,12,2007,4,56,39);
t2.dipslay();
Console.WriteLine("\t t1 sao chep tu doi tuong t2:\t\t");
t1.saochep(t2);
t1.dipslay();
Console.WriteLine("\t t3 goi tu ham thiet lap 4 tham
so:\t");
ThoiGian t3 = new ThoiGian(15, 2008, 12, 40);
t3.dipslay();
Console.ReadKey();
}
}
}
Kt qu sau khi chy chng trnh:
Thoi gian hien hanh la:
Ngay: 8/6/2007
Gio: 2:29:26
T1 khoi tao tu ham thiet lap sao chep:
Ngay: 8/6/2007
Ti liu hng dnGio:
thc2:29:26
hnh Mn LTHDT vi C#
T2 goi tu ham thiet lap 6 tham so:
Ngay: 12/12/2007

53

Bi tp lp trnh hng i tng vi C#

Nm 2008

Trong vi d trn, hm hy b i tng bng phng thc


SuppressFinalize ca i tng GC (Garbage Collector). Dng
thng bo doi tuong da duoc huy xut hin ngay sau khi ta g
mt phim bt k cho thy phng thc hy b c goi t ng
trc khi kt thc chng trnh v gii phng vng nh cho cc i
tng. Trong phng thc thit lp 4 tham s, cc tham s khng
c khi to s ly gi tr mc nh ca bin hay gi tr khi gn
ban u nn c kt qu nh trn.
8. Kiu d liu mng, cc phng thc c gi tr tr v ,
constructor sao chp
Xy dng lp Matrix cho cc ma trn cc phng thc nhp
ma trn t bn phim, hin ma trn ra mn hnh, cng hai ma trn,
tr hai ma trn, nhn hai ma trn.
a, Hng dn:
Ma trn c lu tr cc phn t trong mng hai chiu nn phi
khai bo mt mng int[,] lu tr cc thnh phn .
Cc phng thc thao tc vi ma trn:
- Phng thc nhp: s tin hnh nhp cc phn t ca ma trn
theo tng hng
Phng thc hin ma trn ln mn hnh

Ti liu hng dn thc hnh Mn LTHDT vi C#

54

Bi tp lp trnh hng i tng vi C#

Nm 2008

Phng thc chuyn v hai ma trn c gi tr tr v l mt ma


trn. y ch l vic i v tri: cv.m[i,j]=this.m[j,i]
Phng thc tong(matran b) lm cng vic cng hai ma trn:
tmp.m[i, j] = this.m[i, j] + b.m[i, j]
Phng thc tich(int k:): tinh tich ca ma trn vi mt s
- Phng thc tich(matran b): tinh tich ca hai ma trn (y l
phng thc chng vi phng thc tich ca ma trn vi mt s)
Phng thc hieu(matran b): tinh hiu ca hai ma trn
-

tinh c tng, hiu, tich ca hai ma trn th chng phi tng


thich nhau v iu kin c th hai ma trn cng c s hng v s
ct th mi cng, tr c, ma trn ny phi c s ct bng s hng
ca ma trn kia thi mi thc hin c php nhn hai ma trn.
Trong nhng trng hp khc th sinh li. V vy cn c cng vic
kim tra iu kin tng thich. V cc phng thc ny u tr ra
gi tr l mt i tng lp ma trn
b, Bi gii mu:
using System;
namespace matran
{
class Matrix
{
int i, j;
int[,] m;// mmg lu tr phn t ca ma trn
public Matrix()
{
m = new int[10, 20];
}
public Matrix(int h, int c)
{
m = new int[h, c];
}
public void nhap()
{
int i, j;
for (i = 0; i < m.GetLength(0); i++)
{
Console.WriteLine("Nhap cac phan tu cho hang thu {0} :", i + 1);
for (j = 0; j < m.GetLength(1); j++)
{
i, j);
Ti liu hngConsole.Write("m[{0},{1}]=
dn thc hnh Mn LTHDT ",vi
C#
m[i, j] = Convert.ToInt32(Console.ReadLine());
}

55

Bi tp lp trnh hng i tng vi C#

Nm 2008

}
public Matrix chuyenvi()
{
Matrix cv = new Matrix(this.m.GetLength(0), this.m.GetLength(1));
for (i=0;i< this.m.GetLength(0);i++)
{
for (j=0;j<this.m.GetLength(1);j++)
cv.m[i,j]=this.m[j,i];
}
return cv;
}
public Matrix tong(Matrix b)
{
Matrix tmp = new Matrix(this.m.GetLength(0), this.m.GetLength(1));
for (i = 0; i < this.m.GetLength(0); i++)
{
for (j = 0; j < this.m.GetLength(1); j++)
tmp.m[i, j] = this.m[i, j] + b.m[i, j];
}
return tmp;
}
public Matrix hieu(Matrix b)
{
Matrixdn
tmpthc
= new
Matrix(this.m.GetLength(0),
this.m.GetLength(1));
Ti liu hng
hnh
Mn LTHDT vi C#
for (i = 0; i < this.m.GetLength(0); i++)
{

56

Bi tp lp trnh hng i tng vi C#

Nm 2008

{
Matrix tmp = new Matrix(this.m.GetLength(0), b.m.GetLength(1));
for (i = 0; i < this.m.GetLength(1); i++)
for (j = 0; j < b.m.GetLength(0); j++)
{
tmp.m[i, j] = 0;
for (int k = 0; k < tmp.m.GetLength(1); k++)
tmp.m[i, j] = tmp.m[i, j] + this.m[j, k] * b.m[k, j];
}
return tmp;
}
public bool tuongthichcongtru(Matrix b)
{
return (this.m.GetLength(0) == b.m.GetLength(1));
}
Ti liupublic
hngbool
dntuongthichnhan(Matrix
thc hnh Mn LTHDTb)vi C#
{
return (this.m.GetLength(1) == b.m.GetLength(0));

57

Bi tp lp trnh hng i tng vi C#

Nm 2008

Console.WriteLine("hai ma tran khong tuong thich hang va cot");


}
Console.ReadKey();
}
}
}
}
Ti liu hng dn thc hnh Mn LTHDT vi C#

58

Bi tp lp trnh hng i tng vi C#

Nm 2008

Kt qu sau khi chy chng trnh:


nhap ma tran a:
m[0,0]=1
m[0,1]=2
m[1,0]=3
m[1,1]=1
ma tran a:
1
2
2
1
nhap ma tran b:
m[0,0]=0
m[0,1]=1
m[0,2]=3
m[1,0]=5
m[1,1]=2
m[1,2]=3
ma tran b la:
0 1 3
5 2 3
tich cua ma tran a va b la:
10 5 9
5 5 12
ma tran chuyen vi cua a la;
10
5
5
5
9
12

9. S dng cc thnh phn tnh


Xy dng lp Nhanvien qun l nhn vin bao gm m
nhn vin, chc v ca nhn vin v h tn nhn vin. Trong lp s
dng thnh phn tnh nh bin ton cc trong phm vi lp theo di
Ti liu hng dn thc hnh Mn LTHDT vi C#

59

Bi tp lp trnh hng i tng vi C#

Nm 2008

khi mt i tng c to ra (bng cch cho bit s th t ca


nhn vin mi ).
a, Hng dn:
Thnh phn d liu ca lp gm c: M nhn vin, chc v v
h tn ca nhn vin u l d liu kiu string.
theo di i tng mi khi mt nhn vin c to ra th
dng mt bin static int demnhanvien c mc truy cp l public
c th truy cp bt c khi no.
Phng thc ca lp bao gm: Cc phng thc nhp, hin, thit
lp thng thng. Ngoi ra cn c phng thc
public static int sttnhanvien()
{
return ++demnhanvien;
}
tng s lng nhn vin hin thi. S th t ca nhn vin mc
nh chinh bng s lng nhn vin hin thi.
b, Bi gii mu:
using System;
public class nhanvien
{
public string manv;
public string hoten;
public string chucvu;
public static int demnhanvien;
public nhanvien() // pt thiet lap
{
}
public nhanvien(string manv, string chucvu, string hoten)
{// phng thc thit lp
this.manv= manv;
this.chucvu = chucvu;
this.hoten = hoten;
}
public void nhap()
{
Console.Write("\t Nhap vao ma cua nhan vien: ");
string nvid = Console.ReadLine();
NhapMn
vao chu
vu cua
Ti liuConsole.Write("\t
hng dn thc hnh
LTHDT
vinhan
C# vien:");
string cv=Console.ReadLine();
Console.Write("\t Nhap vao ho ten cua nhan vien: ");

60

Bi tp lp trnh hng i tng vi C#

Nm 2008

manv = nvid;
chucvu = cv;
}
public void hienthi()
{
Console.WriteLine("\t Ma nhan vien \t: {0}", this.manv);
Console.WriteLine("\t Chuc vu \t: {0}", this.chucvu);
Console.WriteLine("\t Ho ten cua nhan vien \t: {0}", this.hoten);
// truy nhp n thnh phn d liu tnh thng qua tn lp
Console.WriteLine("\t So thu tu \t: {0}", nhanvien.demnhanvien);
}
public static int sttnhanvien()
{
return ++demnhanvien;
}
}
class tester
{
static void Main()
{
Console.Write("\t So luong nhan vien hien thoi \t:");
string n = Console.ReadLine();
nhanvien.demnhanvien = Int32.Parse(n);
Console.WriteLine("\t tao mot doi tuong:");
nhanvien nv1 = new nhanvien();
nv1.nhap();
// gi phng thc tnh thng qua tn lp
nhanvien.sttnhanvien();
nv1.hienthi();
Console.WriteLine("\t them mot doi tuong:");
nhanvien nv2 = new nhanvien("gd","giam doc","Nguyen Ngoc Minh");
nhanvien.sttnhanvien();
nv2.hienthi();
Ti liuConsole.ReadKey();
hng dn thc hnh Mn LTHDT vi C#
}
}

61

Bi tp lp trnh hng i tng vi C#

Nm 2008

Kt qu khi chy chng trnh:


So luong nhan vien hien thoi :445
Tao mot doi tuong:
Nhap vao ma cua nhan vien: nvkh

Nhap vao chuc vu cua nhan vien: Nhan vien ke hoach


Nhap vao ho ten cua nhan vien: Nguyen Van Hai Lam
Thong tin ve nhan vien:
Ma nhan vien :nvkh
Chuc vu :Nhan vien ke hoach
Ho ten
:Nguyen Van Hai Lam
So thu tu :446
Them mot doi tuong:
Thong tin ve nhan vien:
Ma nhan vien :gd
Chuc vu :giam doc
Ho ten
:Nguyen Ngoc Minh
So thu tu :447

10. Hm khi to private cm to th hin ca i tng


Chng trnhmu mt vi d n gin nh sau:
namespace Static_class
{
classdn
vatnuoi
Ti public
liu hng
thc hnh Mn LTHDT vi C#
{
static vatnuoi()
{

62

Bi tp lp trnh hng i tng vi C#

Nm 2008

// v trong lp khng c hm khi to public


//vatnuoi cho = new vatnuoi(); // loi
vatnuoi.dem = 15;
Console.WriteLine("So luong vat nuoi luc dau la:{0}",vatnuoi.dem);
Console.WriteLine("Them moi mot con vat nuoi: meo tam the");
Console.WriteLine("So luong vat nuoi hien thoi la:{0}",
vatnuoi.Soluong());
Console.ReadLine();
}
}
}

Ti liu hng dn thc hnh Mn LTHDT vi C#

63

Bi tp lp trnh hng i tng vi C#

Nm 2008

Trong chng trnh nu bn c tnh khai bo:vatnuoi cho =


new vatnuoi(); th s pht sinh li nh sau trong qu trnh
chy:Static_class.vatnuoi.vatnuoi()' is inaccessible due to its
protection level: khng to ra c i tng lp vatnuoi bi n
c mc bo v. iu ny chng t rng chinh phng thc khi to
tnh ngn cm to i tng th hin ca lp. Do vy ta ch c
th truy cp ti cc phng thc tnh ca lp m thi.
Kt qu khi chy chng trnh:
Loi goi nay duoc goi dau tien tu phuong thuc khoi tao static
So luong vat nuoi luc dau la: 15
Them mot con vat nuoi: meo tam the
So luong vat nuoi hien thoi la: 16

T kt qu trn cho thy Mt phng thc khi to tnh s c


gi ngay khi chng trnh bin dch m khng cn to i tng
th hin no ca lp.
11. Np chng phng thc
1. Xy dng lp phanso v thao tc vi lp vi cc phng thc
bao gm:
Phng thc khi to phn s c t bng 0 v mu bng 1
Phng thc khi to (int ts, int ms) khi to phn s c t
s bng ts v mu s bng ms
Phng thc nhp thng tin cho phn s
Phng thc cng hai phn s
Phng thc cng phn s vi mt s
Phng thc tr hai phn s
Phng thc tr 1 phn s cho mt s
Phng thc in kt qu ra mn hnh
a, Hng dn:
Thuc tinh ca lp: int ts,ms: t s v mu s ca phn s
Cc phng thc ca lp:
Khi to khng tham s: pulic phanso() v gn gi tr ca t
=0, mu s=1
Ti liu hng dn thc hnh Mn LTHDT vi C#

64

Bi tp lp trnh hng i tng vi C#

Nm 2008

Khi to hai tham s: public phanso(int tu,int mau)


Cng phn s vi phn s
cng phn s vi mt s
Tr phn s cho phn s
Tr phn s cho mt s
Phng thc hin kt qu ln mn hnh
V trong bi ny c nhiu phng thc chng nhau (s chng
phng thc) nn cc bn ch cch gi cc phng thc.
b, Bi gii mu:
using System;
using System.Collections.Generic;
using System.Text;
namespace phanso
{
class phanso
{
public int ts;
public
int *ms;
kq.ts
= a.ts
b.ms + a.ms * b.ts;
//ham
thiet
lap
ko tham so
kq.ms =a.ms * b.ms;
public phanso()
Console.WriteLine("tong
cua hai phan so la:{0}/{1}", kq.ts, kq.ms);
} {
ts =
0; cong(phanso a, int c)
private
void
ms
=
1;
{
}
phanso
kq = new phanso();
//phuong
thiet* lap
kq.ts
= a.tsthuc
+ a.ms
c; hai tham so
public= phanso(int
t, int m)
kq.ms
a.ms ;
{
Console.WriteLine("{0}/{1}", kq.ts, kq.ms);
ts = t;
}
msvoid
= m;hieu(phanso a, phanso b)
private
{ }
publickq
void
nhap()
phanso
= new
phanso();
{ = a.ts * b.ms - a.ms * b.ts;
kq.ts
Console.Write("nhap
tu so:");
kq.ms
= a.ms * b.ms;
ts = Convert.ToInt32(Console.ReadLine());
Console.WriteLine(":{0}/{1}",
kq.ts, kq.ms);
Console.Write("nhap
mau
so:");
}
msvoid
= Convert.ToInt32(Console.ReadLine());
private
hieu(phanso a, int c)
{ }
privatekq
void
cong(phanso
phanso
= new
phanso();a,phanso b)
{ = a.ts - a.ms * c;
kq.ts
phanso
kq = new phanso();
kq.ms
= a.ms;
Console.WriteLine("{0}/{1}", kq.ts, kq.ms);
}
Tiprivate
liu hng
thc hnhp)Mn LTHDT vi C#
voiddn
hien(phanso
{
Console.WriteLine("phan so:{0}/{1}",p.ts,p.ms);

65

Bi tp lp trnh hng i tng vi C#

Ti liu hng dn thc hnh Mn LTHDT vi C#

Nm 2008

66

Bi tp lp trnh hng i tng vi C#

Nm 2008

c = Convert.ToInt32(Console.ReadLine());
Console.Write("tong cua phan so thu nhat voi c la:");
KQ.cong(P, c);
Console.Write("hieu cua phan so thu nhat voi c la:");
KQ.hieu(P, c);
Console.Write("tong cua phan so thu hai voi c la:");
KQ.cong(Q, c);
Console.ReadKey();
}
}
}
}

Kt qu sau khi chy chng trnh l:


goi phuong thuc thiet lap khong tham so:
phan so: 0/1
nhap P:
tu so = 5
mau so = 6
phan so : 5/6
nhap Q:
tu so = dn
3 thc hnh Mn LTHDT vi C#
Ti liu hng
mau so = 6
phan so: 3/6

67

Bi tp lp trnh hng i tng vi C#

Nm 2008

Trong vi d trn c ti 6 phng thc chng nhau tng i


mt l hm thit lp khng tham s public phanso() v hm
thit lp hai tham s public phanso(int t, int m) dng khi to
cc gi tr ban u cho bin i tng phn s; hai phng thc
cng (gia hai phn s: private void cong(phanso a,phanso b), gia
phn s vi mt s private void cong(phanso a, int c)) v hai
phng thc tr (gia phn s vi mt s private void hieu(phanso
a, phanso b), gia phn s v mt s private void hieu(phanso a, int
c)). Cc phng thc trng nhau v tn nhng khc nhau v s
lng tham s, khc nhau v thnh phn d liu ca tng i s
ca phng thc. Ngoi ra th chng phng thc cn khc nhau
v kiu d liu tr v ca phng thc na. Tt nhin l vic s
dng chng cn phi phn bit r tng phng thc da vo s
khc nhau ca tng phng thc. Nu khng th s pht sinh li do
trnh bin dch.
2. Xy dng mt lp vecto v hin cc php ton trn vector
a, Hng dn:
Thuc tinh:
- Cn cp pht mt vng nh ng lu cc thnh phn d
liu ca mt vecto.
Phng thc:
Ti liu hng dn thc hnh Mn LTHDT vi C#

68

Bi tp lp trnh hng i tng vi C#

Nm 2008

Phng thc khi to


Phng thc sao chp
- Phong thc tinh tng, hiu, tich hai vecto (ch v phng
thc tr ra gi tr )
Phng thc nhp, hin vecto
b, Bi gii mu:
-

using System;
class vecto
{
//Khai bao mang v chua cc thnh phn ta ca vector
int[] v;
//Phuong thuc khoi tao khong tham so
public vecto()
{
v=new int[10];
}
public vecto(int n)// phuong thuc khoi co tham so khoi tao vecto n chieu
{
v=new int[n];
}
public double dodai()
{
return Math.Sqrt(this.tichvohuong(this));
}
public void nhap()
{
Console.WriteLine("nhap cac thanh phan cua vecto :");
for (int i = 0; i < v.Length; i++)
{
Console.Write("v[{0}]=", i + 1);
v[i] = int.Parse(Console.ReadLine());
}

}
// Cong hai vecto
public vecto cong(vecto u)
Ti {liu hng dn thc hnh Mn LTHDT vi C#
vecto tmp=new vecto(v.Length);
if (v.Length == u.v.Length)
for (int i = 0; i < v.Length; i++)

69

Bi tp lp trnh hng i tng vi C#

Ti liu hng dn thc hnh Mn LTHDT vi C#

Nm 2008

70

Bi tp lp trnh hng i tng vi C#

Nm 2008

{
vecto tmp = new vecto(v.Length);
for (int i = 0; i < v.Length; i++)
tmp.v[i] = v[i] * k;
return tmp;
}
public bool vuonggoc(vecto a)
{
return (this.tichvohuong(a) == 0);
}
// Tich vo huong hai vecto
public int tichvohuong(vecto u)
{
int tmp = 0;
if (v.Length == u.v.Length)
for (int i = 0; i < v.Length; i++)
tmp = tmp + v[i] * u.v[i];
else
Console.WriteLine("Khong thuc hien duoc.Hai vecto khong cung
chieu");
return tmp;
}
}
public void print(vecto c)
{
Console.Write("(");
for (int i = 0; i < v.Length; i++)
if (i == v.Length - 1)
Console.Write("{0}", v[i]);
else
Console.Write("{0},",v[i]);
Console.WriteLine(")");
}
}
class Tester
{
void dn
Main()
Ti static
liu hng
thc hnh Mn LTHDT vi C#
{
vecto A= new vecto(3);

71

Bi tp lp trnh hng i tng vi C#

int k;
A.nhap();
B.nhap();
Console.Write("vecto A"); A.print(A);
Console.WriteLine("Do dai = {0}", A.dodai());
Console.Write("vecto B"); B.print(B);
Console.WriteLine("Do dai = {0}", B.dodai());
if (A.vuonggoc(B) == true)
Console.Write("Hai vec to vuong goc");
else
Console.WriteLine("Hai vecto khong vuong goc !");
Console.Write("Tong hai vecto la:");
S = A.cong(B);
Console.Write(" S = "); S.print(S);
Console.Write("Hieu hai vecto la:");
S = A.hieu(B);
Console.Write("S = "); S.print(S);
Console.WriteLine("Tich vo huong cua hai vecto: S = {0}",
A.tichvohuong(B));
Console.Write("Ban hay nhap vao mot so k =");
k = int.Parse(Console.ReadLine());
Console.Write("Tich cua vecto A voi k la:");
S = A.tich(k);
Console.Write("S = "); S.print(S);
Console.Write("Tich cua vecto B voi k la:");
S = B.tich(k);
Console.Write("S = "); S.print(S);
Ti liuConsole.ReadKey();
hng dn thc hnh Mn LTHDT vi C#
}
}

Nm 2008

72

Bi tp lp trnh hng i tng vi C#

Nm 2008

Kt qu sau khi chy chng trnh:


Nhap cac thanh phan cua vecto
V[1]=4
V[2]=7
V[3]=6
Vecto A(4,7,6)
Do dai = 10,0498756211209
Nhap cac thanh phan cua vecto
V[1]=1
V[2]=0
V[3]=9

Vecto B(1,0,9)
Do dai = 9.05538513813742
Hai vecto khong vuong goc
Tong cua hai vecto la: S=(5,7,15);
Hieu cua hai vecto la: S=(3,7,-3)
Tich vo huong cua hai vecto la: S=58
Ban hay nhap vao so k: 3
Tich cua A voi k la: S=(12,21,18)
Tich cua B voi k la: S=(3,0,27)

Ti liu hng dn thc hnh Mn LTHDT vi C#

73

Bi tp lp trnh hng i tng vi C#

Nm 2008

12. Gi ghm d liu thng qua cc thuc tinh


Xy dng mt thuc tinh ten cho lp tentoi v hin th h tn
ra mn hnh
a, Hng dn:
xy dng mt thuc tinh ten ban u ta i khai bo thuc
tinh h trong lp tentoi bng t kha public trong lp tester c
th gi n ra thc hin.
Khai bo mt thuc tinh c tn bt k(vi d hoten) bng t kha
private n ch c th s dng trong lp tentoi vi mc ich ghi
gi tr cho thuc tinh ten.
S dng hm set v get ghi v c gi tr cho thuc tinh.
b, Bi gii mu:
using System;
namespace hoten
{
public class tentoi
{
public string ho;
private string hoten;
public string ten
{
get
{
return hoten;
}
set
{
hoten = value;
}
}
class tester
{
static void Main()
{

Ti liu hng dn thc hnh Mn LTHDT vi C#

74

Bi tp lp trnh hng i tng vi C#

Nm 2008

tentoi T = new tentoi();


T.ten ="Hoa";
T.ho = "Nguyen thi";
Console.WriteLine(" Ten cua toi la {0} {1}",T.ho,T.ten);
Console.WriteLine(" Xin chao tat ca cac ban!");
Console.ReadKey();
}
}
}
}

Kt qu sau khi chy chng trnh:


Ten cua toi la Nguyen thi Hoa
Xin chao tat ca cac ban!

Bi tp 4:
Xy dng mt chng trnh thc hin yu cu sau:
- Nhp vo thng tin ca cc hc sinh vi s lng hc sinh
ty ngi s dng. Thng tin ca hc sinh bao gm: H tn, im
ton, im li, im ha.
- Hin th danh sch cc sinh vin phi thi li. Nu khng c
sinh vin no thi li th a ra thng bo Khng c hc sinh no
phi thi li
a, Hng dn:
- Theo yu cu ca bi ton thng tin v hc sinh rt nhiu bao
gm h tn, im ton, im li, im ha v vy hin th danh
sch hoc sinh ra bng cch truy xut ti n t bn ngoi lp th ta
phi khai bo t kha truy xut n cc thuc tinh c phm vi hot
ng ngoi lp v vy s lm chng trnh s gim tinh r rng, d
liu khng c bo v v vy ta cn phi ng gi d liu trnh
c nhng iu trn.
Trong bi tp ny ta cn phi xy dng 2 lp
- class hocsinh
Ti liu hng dn thc hnh Mn LTHDT vi C#

75

Bi tp lp trnh hng i tng vi C#

Nm 2008

+ Khai bo cc bin thnh vin gm s(tn), dt(im ton),


dh(im ha), dl(im li) ch c s dng trong lp hocsinh nn
n c khai bo bng t kha private. Cc d liu ny c ng
gi.
+ Phng thc nhp, hin th, hm ng gi d liu (im
ton, l, ha) c lp dshs truy xut n nn n c khai bo
bng t kha public.
- class dshs
+ Phng thc nhp v hin th cc thng tin cho hc sinh theo
danh sch bng cch gi phng thc nhp v hin th lp
hcsinh.
+ Thnh phn d liu: (n: s hc sinh, ds kiu mng ) c
khai bo bng t kha private v n ch c s dng trong lp
dshs.
b, Bi gii mu:
using System;
class hocsinh
{
private string s;
private double dt, dl, dh;
public void nhap()
{
Console.Write("Nhap ho ten: ");
s = Console.ReadLine();
Console.Write("Diem toan: ");
dt = double.Parse(Console.ReadLine());
Console.Write("Diem li: ");
dl = double.Parse(Console.ReadLine());
Console.Write("Diem hoa: ");
dh = double.Parse(Console.ReadLine());
}
public void hien()
{
Console.Write("Thong tin can hien thi\n");
Console.WriteLine("Ho ten:{0}", s);
Console.WriteLine("Diem toan:{0}",dt);
Console.WriteLine("Diem li:{0}", dl);
Console.WriteLine("Diem hoa:{0}", dh);
}
public Double tdl
Ti liu
{ hng dn thc hnh Mn LTHDT vi C#
set
{ dl = value; }

76

Bi tp lp trnh hng i tng vi C#

Nm 2008

public Double tdh


{
set
{ dh = value; }
get
{ return dh; }
}
}
class dshs
{
private int n;
private hocsinh[] ds;
public void nhap()
{
Console.Write("Nhap so hs=");
Ti liun =
hng
dn thc hnh Mn LTHDT vi C#
Convert.ToInt32(Console.ReadLine());
ds = new hocsinh[n];
for (int i = 0; i < n; i++)

77

Bi tp lp trnh hng i tng vi C#

static void Main()


{
dshs a = new dshs();
a.nhap();
a.hien();
Ti liuConsole.ReadLine();
hng dn thc hnh Mn LTHDT vi C#
}
}

Nm 2008

78

Bi tp lp trnh hng i tng vi C#

Nm 2008

Kt qu sau khi chy chng trnh:


Nhap so hs=2
Nhap thong tin cho tung hoc sinh
Nhap thong tin cho hoc sinh thu 1
Nhap ho ten: Nguyen thi Trang
Diem toan: 8
Diem hoa: 9
Diem li: 10
Nhap thong tin cho hoc sinh thu 2
Nhap ho ten: Nguyen hai hau
Diem toan:6
Dem hoa: 7
Diem li: 4
Danh sach cac hoc sinh thi lai
Ho ten: Nguyen hai hau
Diem toan: 6
Diem hoa: 7
Diem li: 4

Ti liu hng dn thc hnh Mn LTHDT vi C#

79

Bi tp lp trnh hng i tng vi C#

C.

Nm 2008

CU HOI L THUYT V TRC NGHIM


Cu 1: S khc nhau gia khai bo thnh phn d liu public va
khng public l nh th no? Ly vi d minh ha.
Cu 2: Tham s this c s dng nh th no? Khi no th s
dng this?
Cau 3: Trnh by v cch thc s dng cc thnh phn static. Cc
thnh phn static c s dng khi nao? Mun lp khng to c
th hin ca i tng th phi lm g?
Cu4: Cu no trong nhng cu sau ng:
a, Mt lp lun lun c lp cha.
b, Mt lp lun c mt hoc nhiu lp con.
c, Th hin ca mt lp c s cng l th hin ca mt lp dn
xut.
d, Th hin ca lp dn xut cng l th hin ca lp c s.
Cu 5: Cu no trong nhng cu sau ng
Mt lp tru tng l:
a, Mt lp m tt c th hin l khng xc nh.
b, Mt lp khong c nh ngha phng thc v cc thuc tinh.
c, Mt lp k tha t nhiu lp khc nhau.
d, Mt lp m khng th c th hin cho n.
Cu 6: Ch ra cu tr li ng nht li ca cc khai bo sau:
class A
{
public void nhap(int a, int b)
{
//nhap a,b
}
public int tong(int c);
}
int nhap( ):A
class main()
{
}

Ti liu hng dn thc hnh Mn LTHDT vi C#

80

Bi tp lp trnh hng i tng vi C#

Nm 2008

a, Dng 3 bi li
b, Dng 7 b li.
c, Dng 7 v Dng 9 b li
Cu 7: on chng trnh sau y c li. Hy tm ra li v sa li
cho ng:
using System;
using System.Console;
class VD1
{
public string first;
}
class tester
{
static void Main(string[] args)
{
VD1 vd=new VD1();
Write("Nhap vao mot chuoi:");
vd.first=ReadLine();
Write("Chuoi nhap vao: {0}",vd.first);
}
}
Hng dn: - Khng c khai bo using System.Console;
- Khng tn ti cu lnh Write, ReadLine c lp
Cu 8: Tm v sa li trong on chng trnh sau:
using System;
class Tester
{
static void Main()
{
Display();
}
public static void Display()
{

Ti liu hng dn thc hnh Mn LTHDT vi C#

81

Bi tp lp trnh hng i tng vi C#

Nm 2008

System.Console.WriteLine("Xin chao tat ca moi


nguoi");
return 0;
}
}
Hng dn: Sai phng thc public static void Display()
Cu 9: Hy sa li sai trong on code sau cho ng nht:
using System;
class Class1
{
public static void Getnumber(ref int x, ref int y)
{
x = 5;
y = 7;
}
public static void Main()
{
int a = 0; int b = 0;
Getnumber(a,b);
System.Console.WriteLine("a={0} \nb={1}", a, b);
System.Console.ReadKey();
}
}
Hng dn: Sai cch truyn tham s cho phng thc
Getnumber(), cn phi c hai tham chiu ref.
D.

BI TP T GIAI
Bi 1
Xy dng lp hnh trn, thuc tinh l bn kinh ca hnh trn,
cc phng thc tinh chu vi v din tich ca hnh trn
Hng dn:
Thnh phn d liu ca lp hnh trn ch gm bn knh hnh trn
.
Phng thc:

Ti liu hng dn thc hnh Mn LTHDT vi C#

82

Bi tp lp trnh hng i tng vi C#

Nm 2008

public nhap(): nhp bn kinh cho hnh trn


public double chuvi(): tnh chu vi hnh trn
public double hien(): hin th thng tin v hnh trn (bk, cv,
dt)
Hai phng thc tinh chu vi v din tich l hai phng thc c tr
ra gi tr.
Bi 2
Xy dng lp hnh tr vi thuc tinh gm bn kinh hnh trn,
chiu cao hnh tr v cc phng thc thit lp. Sau tinh chu vi,
din tich xung quanh, din tich ton phn v th tich ca hnh tr

Hng dn:
Thnh phn d liu gm c: bn kinh hnh trn v chiu cao hnh
tr
Phng thc:
nhp thng tin cho i tng
hin th thng tin lin quan ti i tng
tnh chu vi
tinh din tich xung quanh
tinh din tich ton phn
tinh th tich ca hnh tr ()
Bi 3
Xy dng lp Point cho cc im trong khng gian ba chiu
(x,y,z). Lp cha mt constructtor mc nh, mt hm Nagate bin
i im thnh i lng c du m, mt hm Norm dng tinh
khong cch t im ti gc ta v mt hm in kt qu ln mn
hnh.
Hng dn:
Thuc tinh: ba thnh phn d liu x, y, z
Phng thc:
constructor mc nh dn khi to gi tr cho i tng
Nagate(): bin i ta ca im
Norm(): tinh khong cch t im ti gc ta
Nhp thng tin
Hin th thng tin
Ti liu hng dn thc hnh Mn LTHDT vi C#

83

Bi tp lp trnh hng i tng vi C#

Nm 2008

Bi 4
Xy dng lp dy s gm m t cc dy s gm cc phng thc
sau:
phng thc nhp dng nhp thng tin t bn phim
phng thc print dng hin th thng tin ln bn phim
phng thc khi to dayso(int n) khi to mt mng gm
n phn t
Bi 5
Vit chng trnh nhp vo mt ngy thng sau in ln mn
hnh. Sau xy dng chng trnh tinh s ngy cch nhau gia
hai mc thi gian c nhp vo t bn phim
Hng dn:
Thnh phn d liu gm c int day, int month, int year miu t
ngy, thng, nm ca i tng. Ngao ra, cn khai bo hai mng
hng s l mng thng v mng ngy theo di l thng no vi
tng ng bao nhiu ngy trong thng :
unsafe public string(char *) = (mot, hai, ba, bon, nam,
su, bay, tam, chin, muoi, muoi mot, muoi hai );
ngaythang = new int [] { 31, 28, 31, 30, 31, 30, 31, 31, 30 ,31, 30,
31}
Cc phng thc thit lp: khng tham s, mt tham s, hai
tham s hay ba tham s. Trong lp cn xy dng phng thc kim
tra tinh hp l ca d liu nhp vo.
Phng thc nhp v hin thng tin ca i tng. Trong
phng thc hin cn ch in r l nm nhun hay khng: Mt
nm nhun nu nm chia ht cho 4 hoc chia ht cho 400, nhng
khng chia ht cho 100. Trong nm nhun th thng hai co ti 29
ngy.
Bi6

Ti liu hng dn thc hnh Mn LTHDT vi C#

84

Bi tp lp trnh hng i tng vi C#

Nm 2008

Vit lp ConvertUtil thc hin chuyn mt s t h c s 10


sang h c s 2, 8, 16 v c s a bt k.
Hng dn:
Trong bi ny bn nht thit phi s dng stack thc hin
chuyn i. Vic chuyn i t h c s 10 sang cc c s bt k
thng qua php chia lin tip ging vi bi ton vi d trn. Bn
hy tham kho v t hon thin tng.

Bi 7
Vit chng trnh xy dng lp Timer vi cc hm thit lp v
cc tham s mc nh, thnh phn d liu: hour, minute, second.
Cc phng thc Time(int = 0, int = 0, int = 0) phng thc thit
lp vi ba tham s ngm nh dng khi to d liu cho i
tng, Settime() dng thit lp d liu cho i tng, cc
phng thc in gi di dng chun v in gi dng gi qun i.
Hng dn:
Thnh phn d liu gm c: hour, minute, second
Phng thc:
Cc phng thc khi to cho i tng
Phng thc kim tra tinh hp l ca d liu nhp vo: 0<=
hour <= 24; 0<= minute <= 60; 0<= second <= 60;
Phng thc nhp thng tin
Phng thc in gi qun i: (vi d 16:4:30)
Phng thc in gi chun: (vi d: 4:4:30 PM)
Bi 8
Xy dng lp Employee bao gm tn v chng minh nhn dn.
Ngoi phng thc thit lp, mt copy constructor, mt destructor
v cn c phng thc nhp, hin h tn v chng minh th ln
mn hnh.
Bi 9
Xy dng lp sophuc thc hin cc php ton trn s phc vi
cc thuc tinh phn thc phn o v cc phng thc bao gm
- Phng thc khi to (float pt, float pa) dng khi to cc
thnh phn cho s phc vi phn thc bng pt, phn o bng pa
Ti liu hng dn thc hnh Mn LTHDT vi C#

85

Bi tp lp trnh hng i tng vi C#

Nm 2008

Phng thc khi to phn thc bng 0, phn o bng 0


Phng thc cng hai s phc
Phng thc tr hai s phc
Phng thc hin th s phc ra m hnh
Bi 10
Xy dng lp hnh tr Cyliender d liu gm bn kinh chiu
cao ca hnh tr v phng thc tinh chu vi, th tich ca hnh tr
. Trong lp ngoi cc phng thc tinh ton cn c cc phng
thc thit lp v sao chp.

Hng dn:
Cc thuc tinh ca lp gm:
float bk: bn kinh ca hnh trn y tr
float cc: chiu cao ca hnh tr
Cc phng thc gm c:
phng thc thit lp khi to d liu cho i tng
thuc lp hinhtru ny
phng thc sao chp i tng ca lp hnh tr
phng thc tinh chu vi hnh tr
phng thc tinh th tich ca hnh tr
Bi 11:
Xy dng lp ma trn vung vi cc hm tinh nh thc, ma
trn nghch o, ma trn chuyn v, phng thc ma trn, xut ma
trn ln mn hnh. Cng, tr, nhn hai ma trn.
Hng dn:
Ma trn vung l mt mng hai chiu c s hng bng s ct.
nhp thng tin cho ma trn ta nhp cho tng phn t theo hng.
Hin thng tin cng hin theo hng v ct ca ma trn.
Ap dng cc kin thc v ma trn tinh nh thc, ma trn
nghch o, ma trn chuyn v cho ma trn, cng, tr, nhn hai ma
trn.
(xem thm phn bi tp gii mu trn v ma trn)
Bi 12:
Xy dng lp sinh vin qun l h tn, ngy sinh, im ba mn
hc tr nn, a ra s lng sinh vin c lm n tt nghip
Ti liu hng dn thc hnh Mn LTHDT vi C#

86

Bi tp lp trnh hng i tng vi C#

Nm 2008

hay thi tt nghip, bao nhiu sinh vin khng c thi tt nghip
vi cc tiu chun xt:
- lm n nu im trung bnh =>7 v khng c mn no
di 5
- thi tt nghip nu im tb < 7 v khng c mn no di 5
- thi li nu c it nht mt mn
(Xem li vi d trong phn bi gi mu. nh ngha thm trong lp
mt phng thc kim tra a ra danh sch sinh vin c lm
n, thi tt nghip hay khng c thi tt nghip)
E.

BI TP TNG HP:

Bi 1:
Cho mt dy cc hnh ch nht. Bng lp trnh hng i tng,
hy vit chng trnh thc hin cc chc nng sau:
Nhp vo mt dy hnh ch nht
Tm v in ra hnh ch nht c chu vi ln nht v hnh ch nht
c din tich ln nht
Bi 2:
Cho mt dy cc im. Hy tm ra tam gic c chu vi nh nht,
tam gic c din tich ln nht trong cc tam gic c to ra t dy
im trn.
Hng dn:
gii quyt bi ton trn th ta cn nh ngha hai lp: lp
diem vi cc phng thc nhp, hin thng tin, tinh di on
thng ( di gia hai im). Lp tamgiac vi mi tam gic c 3
im chinh l i tng lp im. nh ngha cc phng thc tinh
chu vi tam giac, phng thc tinh din tich tam gic, phng thc
hin thng tin. Thi hnh cc phng tinh chu vi, din tich ca i
tng tam gic. So sanh chu vi, din tich a ra tam gic c chu
vi nh nht, din tich ln nht.
Bi 3:
Bng phng php lp trnh hng i tng, hy vit chng
trnh qun l nhn s cho mt t dn c (khu ph), chi tit v c

Ti liu hng dn thc hnh Mn LTHDT vi C#

87

Bi tp lp trnh hng i tng vi C#

Nm 2008

ngy thang nm sinh, ni sinh v ch hin ti. a ra thng tin v


gia nh c ngi cao tui nht hay ngi it tui nht.
Hng dn:
Hng gi quyt ging bi 2:
Gia nh l mt mng cc phn t kiu ngi
Khu ph li l mt mng cc i tng kiu gia nh.
V vy cn nh ngha ba lp:
+ Lp nguoi:
M t r h tn, ngy thng nm sinh, ni sinh, ngh nghip,
ch ca i tng. Cc phng thc nhp, hin thng tin.
+ Lp giadinh
M t gia nh ny c bao nhiu ngi, ai cao tui nht trong
gia nh, ai km tui nht trong gia nh. Nhp thng tin cho gia
inh chinh l nhp thng tin cho tng thnh vin. Phng thc hin
th tm tt thng tin v gia nh.
+ Lp khupho
Khu ph c bao nhiu gia nh, ai l ngi cao tui nht trong
khu ph, ai l ngi km tui nht. (So snh ngi cao tui, km
tui nht trong gia cc gia nh a ra kt qu cho khu ph).
Phng thc hin th thng tin.
C th xy dng thuc tinh ch c cho cc thuc tinh trong lp
nguoi v lp giadinh

Ti liu hng dn thc hnh Mn LTHDT vi C#

88

Bi tp lp trnh hng i tng vi C#

Nm 2008

CHNG II
NP CHNG TON T TRN LP
Mc tiu: Sau khi tm hiu xong chng ny ngi hc c th nm
c cc ni dung sau:
a ra c cc nguyn tc nh ngha chng ton t.
So snh s ging v khc nhau gia vic xy dng mt hm
chng ton t v hm thng thng.
Bit c cc yu cu cn thit khi s dng ton t.
Ti liu hng dn thc hnh Mn LTHDT vi C#

89

Bi tp lp trnh hng i tng vi C#

Nm 2008

Chng c cc hm ton t tiu biu tng trng cho cc


php ton( +, - ,= ,!=, = =, [])
Chuyn i kiu ngm nh trong kiu d liu i tng.
A.

TM TT L THUYT
1. Ton t:
Ton t c ki hiu bng mt biu tng dng thc hin
mt hnh ng. Cc kiu d liu c bn ca C# nh kiu nguyn
h tr rt nhiu cc ton t gn, ton t ton hc, ton t logic..
2. Chng ton t:
Ton t c nh ngha chng bng cch nh ngha mt hm
ton t, hm ton t l cc phng thc tnh, gi tr tr v ca n
th hin kt qu ca mt php ton v nhng tham s l ton hng.
Khi chng ta to mt ton t cho mt lp l chng ta np chng
ton t(overloaded) cng ging nh l chng ta np chng bt c
phng thc thnh vin no.
Vic chng ton t thc cht cng ging nh ta xy dng mt hm
thng thng v kt qu thu c nh nhau nhng chng ton t
gip ngi lp trnh c th s dng cc ki hiu ton hc thng
gp(+ , +, *, / ) , d nh v gn gi hn
3. C php np chng ton t:
Hm ton t bao gm t kha operator theo sau l ki hiu ca
ton t c nh ngha chng. Trong t kho operator l mt
b xung phng thc.
C# cho php np chng ton t nh sau:
Type Operator operator_symbol(parameter_list);

Trong :
- Type l kiu gi tr tr v ca hm.
- parameter_list l danh sch cc i s nu c

Ti liu hng dn thc hnh Mn LTHDT vi C#

90

Bi tp lp trnh hng i tng vi C#

Nm 2008

- Operator_symbol l cc ton t. Trong C# c cc


hm ton t c th np chng v cc phng thc thay th nh sau:
Ton
t
+
*
/
%
^
&
|
&&
||
=
<<
>>
==

Tn phng
thay th
Add
Subtract
Multiply
Divide
Mod
Xor
BitwiseAnd
Bitwiseor
Add
Or
Assign
leftshift
Rightshift
Equals

-++

Decrement
Increment

thc

Ton
t
>
<
!=
>=
<=
*=
-=
^=
<<=
%=
+=
&=
|=
/=

Tn phng
thay th
Compare
Compare
Compare
Compare
Compare
Multiply
Subtract
Xor
leftshift
Mod
Add
BitwiseAnd
Bitwiseor
Divide

Negate

thc

Vi d 1: S dng np ton t (+) cng hai phn s


Public static phanso operator +(phanso rhs ,phanso lhs)
{
//cc cu lnh
}
Gii thich: rhs l phn s bn phi, lhs l phn s bn tri.
Vi d 2: S dng np chng ton t(-) mt ngi i du cho
mt s nh sau:
Public static So operator (So s)
{
}
Ti liu hng dn thc hnh Mn LTHDT vi C#

91

Bi tp lp trnh hng i tng vi C#

Nm 2008

4. Ton t mt ngi:
Cc ton t dng cho mt i tng hay tham chiu n i
tng trong lp. Vi d cc ton t mt ngi nh: + ( +a ) , - (-a) ,
++ (++a)
5. Ton t hai ngi:
Cc ton t nh ton t (= =) so snh gia hai i tng. ton
t (!=) so snh khng bng gia hai i tng, < so snh nh
hn, > so snh ln hn y l cc ton t phi c cc cp ton
hng hay ta cn gi l ton t hai ngi.Trong C# cn c ton t ba
ngi.
Ch : Trong ngn ng C# khng to c ton t nonstatic, do
vy ton t nh phn phi ly hai ton hng.
6. H tr ngn ng .NET khc:
C# cung cp kh nng cho php np chng ton t cho cc lp
m chng ta xy dng. Trong khi cc ngn ng .NET khc
khng cho php iu ny.
+ m bo lp h tr cc phng thc thay th cho php
cc ngn ng khc c th gi . lm c iu ny th khi np
chng ton t no th phi xy dng cho n mt phng thc c
chc nng tng t nh ton t chng.
Vi d:
Khi chng ta np chng ton t (+) th phi cung cp mt
phng thc Add( ) cng lm chc nng cng hai i tng.
Khi s dng chng ton t (= =) th nn cung cp thm
phng thc Equals() bi i tng v hng chc nng ny n
ton t (= =) cho php lp ca ta a hnh v cung cp kh nng hu
ich cho ngn ng .Net khc.
+ Ton t so snh : C 6 ton t so snh ng vi 3 cp. Gia
cc cp ny lun lun c kt qu i nghch nhau: Nu ton hng
u tr v gi tr true th ton hng kia tr v gi tr false. C# lun
lun yu cu bn np chng c hai ton t . Nu bn np chng
ton t "= =" th phi np chng ton t"!=" nu khng trnh bin
dch s bo li.
Ti liu hng dn thc hnh Mn LTHDT vi C#

92

Bi tp lp trnh hng i tng vi C#

Nm 2008

C mt hn ch l ton t so snh phi tr v kiu bool. v


cng l im khc nhau gia cc ton hng ny v ton hng s
hc.
Cu trc ca phng thc c chc nng tng t nh ton t
so snh chng c xy dng nh sau:
public override bool Equals(object obj)
{
Console.WriteLine("phuong thuc equals");
if (!(obj is phanso))
{
return false;
}
return this = = (phanso)obj;
}
Trong ton t is dng kim trnh kiu i tng lc
chng trnh ang thc hin c thich ng vi ton hng hay khng.
Nu kim tra thy kiu i tng thich ng vi ton hng th kt
qu tr ra l true v ngc li l false.
+ Ton t chuyn i : Dng t kha implicit v explicit n c
tc dng chuyn i mt s t kiu c kich thc nh sang kich
thc ln v (ngc li) m khng b mt thng tin.
7. Phm vi s dng ca cc ton t:
Phm tr
Nh phn ton
hc
Thp phn ton
hc
Nh phn bit
Thp phn bit
So snh

Ton t
+, *, /, -, %

Hn ch
Khng

+, -, ++, --

Khng

&, |, ^, <<, >>


!, ~, true, false
= =,!=,>=,<, <=,
>

Khng
Khng
Phi np chng theo
tng cp.

Ti liu hng dn thc hnh Mn LTHDT vi C#

93

Bi tp lp trnh hng i tng vi C#

Nm 2008

8. Mt s trng hp nn s dng cc ton t np chng:


1. Trong ton hc, mi i tng ton hc nh: ta , vector,
ma trn, hm s vv Nu bn vit chng trnh lm nhng m
hnh ton hc hay vt l, bn nht nh s m t nhng i tng
ny.
2. Nhng chng trnh ha s s dng cc i tng ton
hc v to khi tinh ton v tri ca trn mn hnh.
3. Mt lp m t s lng tin.
4. Vic s l t hay chng trnh phn tich vn bn c lp
m t cc cu vn, mnh v bn phi s dng cc ton hng
lin kt cc cu li vi nhau.
9. Yu cu khi s dng ton t:
+ nh ngha nhng ton t trong kiu d liu gi tr, kiu d
liu xy dng sn.
+ Cung cp phng thc np chng ton t
ch bn trong ca lp ni m nhng phng thc c nh ngha.
+ S dng tn v cc ki hiu c m t trong trong Common
Language speci-fication (CLS). Tc l ta khng c chng
mt ton t mi
+ S dng chng ton t trong trng hp kt qu tr v r
rng.
V d:
Khi ta s dng ton t or hoc and gia mt gi tr thi
gian ny vi mt thi gian khc th kt qu tr v s khng r rng
v vy trong trng hp ny ta khng nn s dng chng ton t.
+ Np chng ton t c tinh cht i xng. Ngha l:
Khi dng ton t ( = = ) th phi dng ton t (!=)
Khi dng ton t ( < ) th phi dng ton t ( > ).
Khi dng ton t ( > = ) th phi dng ton t (<=).
+ Phi cung cp cc phng thc thay th cho ton t c np
chng. Bi v hu ht cc ngn ng khc khng cho php chng
ton t nn khi ta s dng thm phng thc c chc nng tng
t nh ton t gip cho chng trnh c th ph hp vi nhiu
ngn ng khc nhau.

Ti liu hng dn thc hnh Mn LTHDT vi C#

94

Bi tp lp trnh hng i tng vi C#

Nm 2008

10. u v nhc im ca chng ton t


u im :
+ Np chng ton t l mt phng thc ngn gn gip m
ngun d nhn hn, d qun li,sng sa hn.
+ Np chng ton t l ng dn cho nhng i tng
Nhc im:
+ Ta phi s dng np chng ton t mt cch hn ch v ph
hp vi cc ton t ca lp c xy dng sn, khng s dng ton
t qu mi hay qu ring r. Nu s dng ton t mt cch lm
dng th s lm chng trnh nhm ln
B.

BI TP MU
I. BI TP TRC NGHIM, LY THUYT
Cu 1: Phng thc thay th:
Nu ta khng xy dng phng thc thay th cho cc ton t
c np chng th chng trnh c bin dch hay khng.
Tr li:
Nu ta khng xy dng phng thc cho ton t c np
chng th
- Chng trnh s bin dch nu trong ngn ng C# v
cc ngn ng cho php chng ton t.
- Chng trnh s khng bin dch nu n s dng trong
ngn ng lp trnh khc khng cho php s dng chng ton t.
Bi v: Cc phng thc c chc nng tng t nh ton t
chng c tc dng thay th hm ton t khi s dng tt c cc ngn
ng khng nn trong ngn ng khng cho php s dng hm ton
t th vn s dng c vi cc ton t thng qua cc phng thc.
Cu 2: Hn ch khi s dng ton t:
Xy dng mt lp Employee vi cc thng tin cn b: H
tn, gii tinh, tin lng, qu qun. Vy gi mt phng thc
gia tng mc lng ca nhn vin ta c th s dng ton t gia tng
(++) trong lp Employee hay khng.
Tr li:

Ti liu hng dn thc hnh Mn LTHDT vi C#

95

Bi tp lp trnh hng i tng vi C#

Nm 2008

Ta khng th s dng ton t gia tng (++) gia tng mc


lng ca cn b. Bi v bn trong ca lp Employee cn c nhiu
thuc tinh khc nh h tn, gii tinhNn ta khng s dng ton
t gia tng duy nht mt thuc tinh lng c .
Cu 3: Chuyn i kiu
Cho cc dng lnh sau:
Int a = 3;
Uint b = 5;
Double c= 9;
Long
x = a + b;
Double y =c + a;
Hy gii thich khi trnh bin dch gp mt ton hng.
Tr li:
- Xt dng lnh : x = a + b;
C ngha l cng hai s c kiu integer (a v b). Bnh thng
kt qu tr ra s l kiu Integer nhng chng trnh s p cho n tr
ra kt qu l kiu long v iu ny trong ngn ng C# cho php.
- Xt dng lnh : y = c + a;
Ta thy trong np chng ny c kiu double v kiu Integer,
cng chng li v tr ra kiu double. Vy chng ta phi i a(c
gi tr kiu int) sang kiu double sau mi cng vi c(double)
Nh vy vic np chng ton t y nh mt phin bn ca
ton t nhn hai s double nh hai tham s v trnh bin dch phi
chc chn rng n c th p kiu kt qu v mt kiu thich hp nu
cn.
Cu 4: Cho an chng trnh sau:
Int myInt = 12;
Long myLong;
mylong = myInt;
(1) //Ngm nh
myInt = (Int)myLong; (2) // Tng minh
Bn hy chn ra mt phng n ng nht trong cc phng n
sau:
a, Cch chuyn i (1) ng.
b, Cch cuyn i (2) ng.
c, C hai cch u ng.
Ti liu hng dn thc hnh Mn LTHDT vi C#

96

Bi tp lp trnh hng i tng vi C#

Nm 2008

d,C hai cch u ng nhng ta phi xy dng thm cc hm


chuyn i.
e, Ch c phng n (1) l sai v n gy mt thng tin.
Tr li: Phng n (d) l ng nht.
Gii thch :
- Gi s khi ta chuyn i mt s nguyn sang mt phn s th
c th chuyn i s nguyn c mu l 1.
Vi d: a = 12 c chuyn thnh 12/1
- Ngc li khi chuyn i mt phn s sang mt s nguyn
th s lm mt thng tin (vd: 9/4 = 2). V vy ta phi xy dng mt
hm chuyn i c s dng t ng ngm nh (implicit) m
bo khng b mt thng tin.
Trng hp tng minh (explicit) khng m bo an ton d
liu sau khi chuyn i do vic ny s c thc hin mt cch
cng khai.
Cu 5: Ton t ()
Cho on chng trnh sau:
Using System
{
Struct point
{
Public int x,y;
}
Class main class
{
Unsafe static void main
Point pt =new point()
Point *pp = &pt;
pp x =123;
pp y=456;
Console.WriteLine({0} {1},pt.x, pt.y);
}
}
Output 12345 (1)
123 456 (2)
Ti liu hng dn thc hnh Mn LTHDT vi C#

97

Bi tp lp trnh hng i tng vi C#

Nm 2008

123 (3)
Hy chn mt kt qa ng nht
Tr li:
p n (2) l ng.
Cu 6: Hy ch ra cch khai bo ng mt hm chng ton t ca
lp phn s trong cc cch khai bo sau y:
public static ps operator -(real ps1)
(1)
public static ps operator =(real ps1)
(2)
public static ps operator = =(ps ps1, ps ps2) (3)
public static ps operator - -(ps ps1,ps ps2)
(4)
Tr li:
Ta bit rng cc ton t c nh ngha chng phi bo ton
s ngi ca chinh ton t theo cch hiu thng thng.
C th:
+ Nu ta chng ton t mt ngi -(real ps1) tng ng vi
vic o du ca ps1
+ Nu ta chng ton t hai ngi-(ps ps1, ps ps2) tng ng
vi vic ta thc hin chng ton t tr i vi ps1 v ps.
Nhng khng th nh ngha ton t gn nh (+=, = =,- =,=)
bng cch chng ton t mt ngi. iu chng t cch khai bo
(2) l sai.
Vy trong cc dng khai bo bi tp ny c dng (1), (2), (3)
l ng
II.

CU HOI LY THUYT V BI TP MU

1. Chng ton t (+) i vi hai vector


a, Hng dn:
- Xy dng mt vector c ba i l x, y, z (kiu double).
- s dng trong lp vector nn ta khai bo bng thuc tinh
public. V s dng thuc tinh public c phm vi hot ng trong
ton b chng trnh.
Public x,y,z;
- S dng t kho this c dng tham chiu n th hin
hin hnh ca mt i tng xem l con tr dng tham chiu

Ti liu hng dn thc hnh Mn LTHDT vi C#

98

Bi tp lp trnh hng i tng vi C#

Nm 2008

n tt c cc phng thc khng c thuc tinh tnh trong lp


vector. Cc phng thc khc trong lp c th tham chiu n
nhng phng thc khc v cc bin thnh vin thng qua t kha
this.
- S dng chng ton t (+) cng hai vector
Vy chng trnh c tm tt nh sau:
Struct vector
{
public double x,y,z; // bin thnh vin truy cp
public
public vector(double x,double y, double z )
{
// Dng t kha this to i tng cho mt vector
}
public vector(vector rhs)
{
}
public override string ToString()
{
// Dng hm ToString chuyn sang xu
}
public static vector operator + (vector lhs, vector rhs)
{
// Dng chng ton t cng cng hai vector
// lhs l vector bn tri.
// rhs l vector bn phi.
}
b, Bi gii mu:
using System;
namespace vt
{
struct Vector
{
public double x, y, z;
public Vector(double x, double y, double z)
Ti liu hng dn thc hnh Mn LTHDT vi C#

99

Bi tp lp trnh hng i tng vi C#

Nm 2008

{
this.x = x;
this.y = y;
this.z = z;
}
public Vector(Vector rhs)
{
x = rhs.x;
y = rhs.y;
z = rhs.z;
}
public override string ToString()
{
return "( " + x + " , " + y + " , " + z + " )";
}
public static Vector operator * (Vector lhs,Vector rhs)
{
Vector result = new Vector(lhs);
result.x *= rhs.x;
result.y *= rhs.y;
result.z *= rhs.z;
return result;
}
public static Vector operator +(Vector lhs, Vector rhs)
{
Vector result = new Vector(lhs);
result.x += rhs.x;
result.y += rhs.y;
result.z += rhs.z;
return result;
}
}
public class tester
{
static void Main()
Ti liu hng dn thc hnh Mn LTHDT vi C#

100

Bi tp lp trnh hng i tng vi C#

Nm 2008

{
Vector vect1, vect2, vect3, vect4;
vect1 = new Vector(3.0, 3.0, 1.0);
vect2 = new Vector(2.0, -4.0, -4.0);
vect3 = vect1 + vect2;
vect4 = vect1 + vect2;
Console.WriteLine("vect1 = " + vect1.ToString());
Console.WriteLine("vect2 = " + vect2.ToString());
Console.WriteLine("Tong cua vector1 v vector2 la:");
Console.WriteLine("vect3 = " + vect3.ToString());
Console.WriteLine("Tich cua vector1 v vector2 la:");
Console.WriteLine("vect4 = " + vect3.ToString());
Console.ReadLine();
}
}
}
Kt qu sau khi thc hin chng trnh:
vect1 = ( 5, 10, 4)
vect2 = ( 3, 6, 9)
Tong cua vector1 v vector2 la:
vect3 = ( 8, 16, 13)
Tich cua vector1 v vector2 la:
Vect4 = ( 15, 16, 36)

Nhn xt:
T chng trnh trn ta cn ch n vic xy dng mt bin
rhs c kiu l mt vector bi v cng 2 hay nhiu vector th ta
phi cng hai vector trc sau li cng tip vi mt vector sau
(ng vai tr l rhs), c nh th n khi no ht.
T bi ton cng hai vector ny, tng t ta c th xy dng
mt chng trnh cng nhiu vector vi nhau.

Ti liu hng dn thc hnh Mn LTHDT vi C#

101

Bi tp lp trnh hng i tng vi C#

Nm 2008

2. Chng ton t mt ngi


Xy dng mt lp c tn SO. Cung cp gi tr cho s th nht
v s th hai, sau
- Dng chng ton t mt ngi tng gi tr ca s th nht
ln 1 v.
- Dng chng ton t hai ngi cng hai s sau khi tng s
th nht ln 1 n v.
a, Hng dn:
Xy dng lp SO bnh thng (to i tng cho lp, chuyn
thnh xu bng phng thc ToString hin ra mn hnh ,).
tng gi tr ln hay gim gi tr ca mt s ta dng ton t tng
gim nh: - -l ton t gim, ++l ton t tng.
+ Xy dng mt hm chng ton t (+) to mt bin c kiu
SO v bin va to ra cho php truy nhp ti bin value cha gi tr
ca SO. N c khai bo c th nh sau:
public static SO operator +(SO s)
{ }
+ Xy dng hm chng ton t 1 ngi vi ton t tng (++)
nh sau:
public static SO operator ++(SO s)
{ }
Hm ny c tc dng cho php c th tng gi tr ca bin ln 1
n v, khi ta gi trong chng trnh chinh
Console.WriteLine("Chuyen so thu nhat la: {0}", ++so1)
{ }
Sau hm chng ton t mt ngi s c thc hin.
+ Xy dng hm chng ton t 2 ngi vi ton t (+) cng
s th nht vi s th hai:
public static SO operator +(SO so1, SO so2 ) {}
+ Xy dng lp Test cha chng trnh chinh gi cc hm
xy dng lp SO ra thc hin v a kt qu m bi yu cu
ra mn hnh
b, Bi gii mu:
using System;

Ti liu hng dn thc hnh Mn LTHDT vi C#

102

Bi tp lp trnh hng i tng vi C#

Nm 2008

namespace motngoi
{
struct so
{
int value;
public so(int value)
{
this.value = value;
}
public override string ToString()
{
return (value.ToString());
}
public static so operator +(so s)
{
return (new so(-s.value));
}
public static so operator +(so so1, so so2)
{
return (new so(so1.value + so2.value));
}
public static so operator ++(so s)
{
return (new so(s.value + 1));
}
}
class Test
{
public static void Main()
{
so so1 = new so(11);
Console.WriteLine("So thu nhat la: {0}", so1);
so so2 = new so(125);
Console.WriteLine("So thu hai la: {0}", so2);
Console.WriteLine("Chuyen so thu nhat la: {0}",
Ti liu hng dn thc hnh Mn LTHDT vi C#

103

Bi tp lp trnh hng i tng vi C#

Nm 2008

++so1);
Console.WriteLine("tong hai so sau khi chong toan
tu mot ngoi doi voi so thu nhat");
Console.WriteLine("tong: {0}", so1 + so2);
Console.ReadLine();
}
}
}
Kt qu sau khi thc hin chng trnh:
So thu nhat la: 11
So thu hai la: 125
So thu nhat duoc chuyen thanh la:12
Tong hai so sau khi chong toan tu mot ngoi doi voi so thu nhat
Tong :137

Nhn xt:
- Trong bi tp ny cn ch trng n cch chng ton t mt
ngi. Cn nm c nhng ton t mt ngi c a nng ha.
- Ch n dng lnh sau:
public static so operator +(so s)
{
return (new so(-s.value));
}
3. Xy dng mt lp sophuc c hai phn thc (real) v o
(imaginary). Np chng ton t +, - v i du s phc.
a, Hng dn:
+ xy dng mt lp s phc v thc hin cng tr hai s
phc th ta c th dng chng ton t nh bi tp trn.
+ Nhng i du ca mt s phc (mt s, mt phn s) th
lm th no?. iu ny c th thc hin bng cch s dng chng
ton t (-) i du.
Ti liu hng dn thc hnh Mn LTHDT vi C#

104

Bi tp lp trnh hng i tng vi C#

Nm 2008

Chng ton t -c nh ngha nh sau:


public static sophuc operator -(sophuc a)
{
sophuc tmp =new sophuc();
tmp.real = - a.real;
tmp.imaginary = a.imaginary;
return tmp;
}
gi hm chng ton t - ra thc hin bng cch gi n ra thc
hin, vit dng lnh trong chng trnh chinh nh sau:
Console.WriteLine("{0}",-a);
b, Bi gii mu:
using system;
namespace sp
{
public class sophuc
{
private int real;
private int imaginary;
public sophuc() : this(0, 0)
{
//cung cap gia tri ban dau
}
public sophuc(int r, int i)
{
real = r;
imaginary = i;
}
public override string ToString()
{
return(System.String.Format("{0} + {1}i", real,
imaginary));
}
public static sophuc operator+(sophuc a, sophuc b)
{
Ti liu hng dn thc hnh Mn LTHDT vi C#

105

Bi tp lp trnh hng i tng vi C#

Nm 2008

return new sophuc (a.real + b.real, a.imaginary +


b.imaginary);
}
// su dung chong toan tu doi hai so:
public static sophuc operator-(sophuc a, sophuc b)
{
return new sophuc (a.real - b.real, a.imaginary b.imaginary);
}
//Su dung toan tu doi voi mot so
public static sophuc operator -(sophuc a)
{
sophuc tmp =new sophuc();
tmp.real = - a.real;
tmp.imaginary = a.imaginary;
return tmp;
}
}
class Testsophuc
{
static void Main()
{
sophuc a = new sophuc(6, 64);
sophuc b = new sophuc(2, 5);
Console.WriteLine("So phuc thu nhat a = {0}",
a.ToString());
Console.WriteLine("So phuc thu hai la b = {0}",
b.ToString());
sophuc tong= a + b;
Console.WriteLine("Tong hai so phuc = {0}",
tong.ToString());
sophuc hieu = a - b;
Console.WriteLine("Hieu hai so phuc la = {0}",
hieu.ToString());
//Chuyn du cho s phc th nht.
Ti liu hng dn thc hnh Mn LTHDT vi C#

106

Bi tp lp trnh hng i tng vi C#

Nm 2008

Console.WriteLine("so phuc thu nhat doi dau thanh


{0}",-a);
Console.ReadLine();
}
}
}
Kt qu sau khi thc hin chng trnh:
So phuc thu nhat a=6 + 64i
So phuc thu hai la b=2 + 5i
Tong hai so phuc = 8 + 69i
Hieu hai so phuc = 4 + 59i
So phuc thu nhat doi dau thanh -6 + 64i

Nhn xt:
+ Trong bi tp ny cn ch n vic chng ton t (-)
i du cho s phc cn trong bi tp s 5 th dng chng ton t
(+) tng thm gi tr cho mt s.
+ Ta cng c s dng ton t (-) gim gi tr ca mt s
hay( mt phn s, mt s phc ).
iu quan trng ta cn phi bit c ton t mt ngi no
c s dng v c s dng khi no l thich hp em li hiu
qu cao.
4. Xy dng mt lp phn s vi tn l phanso v a nng ho
ton t trn lp. Thc hin cc nhim v sau:
+ Hin th cc phn s ban u v phn s sau khi s li trn
mn hnh.
+ Cng hai phn s.
+ Cng mt phn s vi mt s.
+ So snh hai phn s v hin th kt qu trn mn hnh.
a, Hng dn:
Chng ta xy dng mt lp phn s nh sau:
Ti liu hng dn thc hnh Mn LTHDT vi C#

107

Bi tp lp trnh hng i tng vi C#

Nm 2008

public class phanso


{
// Xy dng mt phn s c t s v mu s
public phanso(int tuso1,int mauso1)
//Xy dng mt phn s ch cha mt ton hng.
public phanso(int tuso2)
//Chuyn mt s nguyn thnh mt phn s c mu
l 1
public static implicit operator phanso(int theInt)
//Chuyn mt phn s thnh mt s nguyn.
public static explicit operator int(phanso thephanso)
// So snh hai phn s bng ton t (= =) v (! =).
public static bool operator = =(phanso lhs, phanso
rhs)
public static bool operator !=(phanso lhs, phanso
rhs)
//S dng chng ton t (+): cng hai phn s
public static phanso operator +(phanso lhs,phanso rhs)
}
b,Bi gii mu:
using system;
namespace lop_phan_so
{
public class phanso
{
//Bin thnh vin lu tr t s v mu s
private int tuso1;
private int mauso1;
public phanso(int tuso1,int mauso1)
{
this.tuso1 = tuso1;
this.mauso1 = mauso1;
}
public phanso(int tuso2)
{
Ti liu hng dn thc hnh Mn LTHDT vi C#

108

Bi tp lp trnh hng i tng vi C#

Nm 2008

this.tuso1= tuso2;
mauso1 = 1;
}
public static implicit operator phanso(int theInt)
{
return new phanso(theInt);
}
public static explicit operator int(phanso thephanso)
{
return thephanso.tuso1 / thephanso.mauso1;
}
public static bool operator = =(phanso lhs, phanso rhs)
{
if (lhs.tuso1 = = rhs.tuso1 && lhs.mauso1 = =
rhs.mauso1)
{
// Khi hai phn s bng nhau
return true;
}
// Khi hai phn s khng bng nhau
return false;
}
public static bool operator !=(phanso lhs, phanso rhs)
{
Console.WriteLine("su dung toan tu !=");
return !(lhs = = rhs);
}
public override bool Equals(object obj)
{
Console.WriteLine("phuong thuc equals");
if (!(obj is phanso))
{
return false;
}
return this = = (phanso)obj;
Ti liu hng dn thc hnh Mn LTHDT vi C#

109

Bi tp lp trnh hng i tng vi C#

Nm 2008

}
public static phanso operator +(phanso lhs,phanso rhs)
{
if(lhs.mauso1 = = rhs.mauso1)
{
Console.WriteLine("-S dng ton t + vi hai
phn s");
return new phanso(lhs.tuso1 +
rhs.tuso1,lhs.mauso1);
}
Console.WriteLine("S dng ton t+cho mt phn s
vi mt s);
int fist = lhs.tuso1 * rhs.mauso1;
int second = rhs.tuso1 * lhs.mauso1;
return new phanso(fist+ second, lhs.mauso1 *
rhs.mauso1);
}
public override string ToString()
{
string s = tuso1.ToString() + "/" + mauso1.ToString();
return s;
}
public class tester
{
static void Main()
{
Console.WriteLine("-Phn s th nht l:");
phanso ps1=new phanso(2,4);
Console.WriteLine("ps1:{0}",ps1.ToString());
Console.WriteLine("-Phn s th hai l:");
phanso ps2 = new phanso(1,4);
Console.WriteLine(" ps2:{0} ",ps2.ToString());
phanso ps3 = ps1 + ps2;
Console.WriteLine(" ps1+ps2=ps3 ");
Console.WriteLine(" ps2:{0} ",ps2.ToString());
Ti liu hng dn thc hnh Mn LTHDT vi C#

110

Bi tp lp trnh hng i tng vi C#

Nm 2008

phanso ps3 = ps1 + ps2;


Console.WriteLine(" ps1+ps2=ps3 ");
Console.WriteLine(" ps3:{0} ",ps3.ToString());
phanso ps4 = ps3 + 5;
Console.WriteLine(" ps4=ps3+5:{0}",ps4.ToString());
phanso ps5 = new phanso(2, 4);
Console.WriteLine(" phanso(2,4)");
Console.WriteLine("-So snh ps1 va ps5 ");
if (ps5 = = ps1)
{
Console.WriteLine("
ps5:{0}==ps1:{1}",ps5.ToString(), ps1.ToString());
Console.WriteLine("->Hai phn s ny bng nhau");
}
Console.WriteLine("-So sanh ps2 va ps3 ");
if (ps2 = = ps3)
{
Console.WriteLine("->Hai phn s ny bng nhau
");
Console.WriteLine("ps2:{0}==ps3:{1}",
ps2.ToString(), ps3.ToString());
}
Console.WriteLine("ps2:{0}!=ps3:{1}",
ps2.ToString(), ps3.ToString());
Console.WriteLine("->Hai phn s ny khng bng
nhau");
Console.ReadLine();
}
}
}
}
Kt qu sau khi thc hin chng trnh:
-Phan so thu nhat la: ps1 = 2/4
- Phan so thu hai la: ps2 = 1/4
- Su dung toan tu + voi hai phan so
ps2 =hnh
ps3 Mn LTHDT vi C#
Ti liu hngps1
dn+ thc
ps3 = 3/4
- Su dung toan tu + voi mot phan so va mot so

111

Bi tp lp trnh hng i tng vi C#

Nm 2008

Ch :
+ Nu nh trong chng trnh trn ta khng dng phng thc
Equals th chng trnh vn chy bnh thng m khng bo li.
Nhng n li rt cn thit v phng thc Equals cung cp mt i
tng cho php cc ngn ng khc c th gi.
+ Ta c th nhp gi tr ca phn s ngoi mn hnh m khng
cp gi tr trc trong chng trnh.
5. Xy dng mt lp vector v thc hin cc yu cu sau:
- C th nhp n vector t bn phim.
- Nhp s chiu ty .
- a ra tng cc vector.
- a ra hiu cc vector.
a, Hng dn:
- Trong chng trnh ny ngoi lp tester ta i xy dng lp
vector v DSVT , nhp n vector vi s chiu ty th ta cn khai
bo mt bin tnh n v s dng t kha public khai bo. Bin n
c khai bo nh sau: public static int n;
n l mt bin tnh bi v n c th thay i ty .
- nhp c s vector ty ta cn phi khai bo s vector
di dng mng trong lp DSVT nh sau: private vector[] ds

Ti liu hng dn thc hnh Mn LTHDT vi C#

112

Bi tp lp trnh hng i tng vi C#

Nm 2008

Tng t nhp c s chiu ca cc vector mt cch ty


ta cng khai bo s chiu ca vector trong lp vector tng t nh
trn: private int[]a.
-Trong lp vector xy dng cc hm v cc phng thc
public vector()
public void nhap()
public void hien()
public vector tongvector(vector T)
public vector truvector(vector Tr)
public vector(vector lhs)
public vector coppy
public static vector operator -(vector lhs, vector rhs)
public static vector operator +(vector lhs,vector rhs)
- Trong lp DSVT
public void nhap():gi phng thc nhp ca lp vector ra
thc hin
ds[i].nhap()
public vector tong(): Gi hm coppy() ra thc hin v s
dng vng lp for duyt t vector u tin n cc vector cui cng
v tr chng ln lt da theo phn t (lhs v rhs
public vector tru(): Lm tng t nh cng}
b, Bi gii mu:
using System;
namespace vectorchong
{
class vector
{
public static int n;
private int[] a;
public vector()
{
a = new int[n];
}
public void nhap()
{
int i;
Ti liu hng dn thc hnh Mn LTHDT vi C#

113

Bi tp lp trnh hng i tng vi C#

Nm 2008

Console.WriteLine("Phan tu cua vector:");


for (i = 0; i < n; i++)
{
Console.Write("a[{0}]=",i);
a[i] = int.Parse(Console.ReadLine());
}
}
public void hien()
{
int i;
for (i = 0; i < n; i++)
Console.Write("{0}", a[i]);
Console.WriteLine();
}
public vector tongvector(vector T)
{
vector tmp = new vector();
int i = 0;
for (i = 0; i < n; i++)
tmp.a[i] = a[i] + T.a[i];
return tmp;
}
public vector truvector(vector Tr)
{
vector tmp = new vector();
int i = 0;
for (i = 0; i < n; i++)
tmp.a[i] = a[i] - Tr.a[i];
return tmp;
}
public vector(vector lhs)
{
int i;
for (i = 0; i < n; i++)
Ti liu hng dn thc hnh Mn LTHDT vi C#

114

Bi tp lp trnh hng i tng vi C#

Nm 2008

this.a[i] = lhs.a[i];
}
public vector coppy()
{
int i;
vector tmp = new vector();
for (i = 0; i < n; i++)
tmp.a[i] = a[i];
return tmp;
}
public static vector operator +(vector lhs,vector rhs)
{
vector tmp = new vector();
int i;
for (i = 0; i < n; i++)
tmp.a[i] = lhs.a[i] + rhs.a[i];
return tmp;
}
public static vector operator -(vector lhs, vector rhs)
{
vector tmp = new vector();
int i;
for (i = 0; i < n; i++)
tmp.a[i] = lhs.a[i] - rhs.a[i];
return tmp;
}
}
}
class DSVT
{
private int SVT;
private vector[] ds;
public void nhap()
{
Ti liu hng dn thc hnh Mn LTHDT vi C#

115

Bi tp lp trnh hng i tng vi C#

Nm 2008

int i;
Console.Write("nhap so chieu cua vector n=");
vector.n = int.Parse(Console.ReadLine());
Console.Write("Nhap so vector SVT =");
SVT = int.Parse(Console.ReadLine());
ds = new vector[SVT];
for (i = 0; i < ds.Length; i++)
{
ds[i] = new vector();
Console.WriteLine("Nhap thong tin cho Vector thu {0}", i
+ 1);
ds[i].nhap();
}
}
public vector tong()
{
vector tmp = ds[0].coppy();
int i;
for (i = 1; i < SVT; i++)
tmp = tmp + ds[i];
return tmp;
}
public vector tru()
{
vector tmp = ds[0].coppy();
int i;
for (i = 1; i < SVT; i++)
tmp = tmp - ds[i];
return tmp;
}
}
class tester
{
private int x;
static void Main()
Ti liu hng dn thc hnh Mn LTHDT vi C#

116

Bi tp lp trnh hng i tng vi C#

Nm 2008

{
DSVT t = new DSVT();
t.nhap();
t.tong();
Console.WriteLine("- Tong cua cac vector da nhap la:");
t.tong().hien();
Console.WriteLine("- Hieu cua cac vector da nhap la:");
t.tru().hien();
Console.ReadLine();
}
}
}
Kt qu sau khi thc hin chng trnh:
Nhap so chieu cua vector n=3
Nhap so vector SVT = 3
Nhap thong tin cho vector thu 1
Phan tu cua vector:
a[0] = 2
a[1] = 4
a[2] = 2
Nhap thong tin cho vector thu 2
Phan tu cua vector:
a[0] =5
a[1] = 6
a[2] = 2
Nhap thong tin cho vector thu 3
Phan tu cua vector
a[0] =1
a[1] =5
a[2] =3
- Tong cua cc vector da nhap la:
8
15 7
- Hieu cua cac vector da nhap la:
-4 -7 -3

Ti liu hng dn thc hnh Mn LTHDT vi C#

117

Bi tp lp trnh hng i tng vi C#

Nm 2008

Nhn xt:
- Qua chng trnh trn ta cn ch lm th no nhp
vector c s chiu, s phn t ty t bn phim. T c th nhp
n ma trn hay mt s phc, t bn phim.
- S dng hm copy cng tr nhn cc vector ta nhp mt
cch n gin hn.
- S dng hm chng ton t cng, tr hai vector
C.

CU HOI TRC NGHIM L THUYT


Cu 1: Hy cho bit nh ngha no sau y sai
- Chng ton t nh ngha nh l mt hm thnh phn.
- Chng ton t nh ngha nh l mt hm bn.
- Chng ton t nh ngha nh l mt phng thc.
Hy gii thich v sao chn nh vy.
Cu 2: Cho on chng trnh sau y:
using System;
class Mainclass
{
static void main()
{
int a = 5;
Console.WriteLine(-a);
Console.WriteLine(a-1);
Console.WriteLine(a-.5);
}
}
output:
-5 (1)
-6 (2)
-5,5 (3)
Hy cho nhng trng hp sau y trng hp no ng
- Dng (1), (2), (3) u ng

Ti liu hng dn thc hnh Mn LTHDT vi C#

118

Bi tp lp trnh hng i tng vi C#

Nm 2008

- Dng (2), (3) l sai.


- Dng (2), (3) l ng.
- Dng (1) ng, dng (2) v (3) sai.
Cu 3: Khi no ta s dng ton t chuyn i? Th no l chuyn
i tng minh v chuyn i ngm nh. Nu khng s dng ton
t chuyn i trong trng hp va nu th lm iu g s xy ra?
Cu 4: Trong C++ th hm chng ton t ging nh mt hm bn.
Vy trong C# th iu ny c ng khng? Nu ng th hy a ra
mt v d c th. Ngc li th hy gii thch ti sao
Cu 5: Vic chng ton t trong ngn ng C# c iu g khc so
vi chng ton t cc ngn ng khc hay khng?Nu c, th s
khc bit c u im g?
D.

BI TP T GIAI
Bi 1: Cho on chng trnh sau hy a ra kt qu ca chng
trnh hiu r v phng thc ToString:
using System;
namespace phuongthuctostring
{
using System;
namespace Wrox.ProCSharp.OOCSharp
{
class MainEntryPoint
{
static void Main(string[] args)
{
Money cash1 = new Money();
cash1.Amount = 40M;
Console.WriteLine("cash1.ToString() returns: " +
cash1.ToString());
cash1 = new BetterMoney();
cash1.Amount = 40M;
Console.WriteLine("cash1.ToString() returns: " +
cash1.ToString());

Ti liu hng dn thc hnh Mn LTHDT vi C#

119

Bi tp lp trnh hng i tng vi C#

Nm 2008

Console.ReadLine();
}
}
class Money
{
private decimal amount;
public decimal Amount
{
get
{
return amount;
}
set
{
amount = value;
}
}
}
class BetterMoney : Money
{
public override string ToString()
{
return "$" + Amount.ToString();
}
}
}
}
Bi 2:
To kiu d liu Date biu din ngy thng nm. Ci t thut
ton tinh mt ngy trc hoc sau mt ngy xc nh no
tinh khong cch theo ngy gia hai ngy xc nh, tinh th trong
tun ca ngy. S dng ton t vo ra cho
ngy.
Hng dn:

Ti liu hng dn thc hnh Mn LTHDT vi C#

120

Bi tp lp trnh hng i tng vi C#

Nm 2008

- a ra ngy xc nh no c th nhp t bn phim hoc


cung cp gi tr cho n bng t kha new
- hin th c thi gian ca mt ngy trc v sau ca mt
ngy xc nh no bng cch ly ngy xc nh tr i 1 hoc
cng thm 1 vo ngy hin ti. lm c iu ny ta dng hm
chng ton tng gim (- -) v (++) mt ngi.
- hin th ngy,thng, nm di dng xu ngy / thng /
nm th ta phi dng phng thc ToString().
Bi 3:
Xy dng lp biu din a thc vi cc ton t cng, tr, nhn,
chia v o du. nh ngha ton t thc hin cc yu cu ca
bi ton..
Hng dn:
- Xy dng mt a thc c dng f(x) = Ax + By + Cz + D v
a thc c dng f(x) = Ax + By +Cz + D = 0.
- Cung cp gi tr cho cc hng s cho hai a thc
- S dng phng thc ToString to xu a thc
- S dng chng ton t thc hin yu cu ca bi ton.
operator - c mt i o du a thc.
operator + c hai i cng hai a thc.
operator - c hai i tr hai a thc.
operator * c hai i nhn hai a thc.
operator /
c hai i chia hai a thc.
Bi 4:
Xy dng mt lp biu din cc vector n chiu vi cc ton t
cng, tr, tich c hng hai vector v tich c hng mt vector vi
mt s thc. nh ngha ton t cho php truy nhp cc thnh phn
vector.
Bi 5:
Xy dng mt lp m rng ca lp phanso xy dng phn
bi tp mu. Cc yu cu cn b xung thm:
+ Nhp phn s t bn phim
+ Dng np chng ton t nhn, chia hai phn s hoc nhn,
chia mt phn s vi mt s hoc ngc li
Hng dn:
Ti liu hng dn thc hnh Mn LTHDT vi C#

121

Bi tp lp trnh hng i tng vi C#

Nm 2008

- nhn, chia hay nhn hai phn s vi nhau hoc nhn chia
mt phn s vi mt s ta khai bo chng ton t bnh thng
tng t nh i vi cng hoc tr
C th vi ton t(*) :
public static phanso operator *( phanso lhs, phanso rhs )
{
int fistproduct = lhs.tuso1 * rhs.tuso2;
int secondproduct = lhs.mauso1 * rhs.mauso2;
return new phanso(fistproduct, secondproduct);
}
Bi tp 6: Xy dng lp MaTran cho thc hin cc php ton
trn ma trn, bao gm:
- Hm to ma MaTran(int sh, int sc) dng khi to mt ma
trn c s hng l sh v s ct l sc.
- Phng thc nhap nhp ma trn t bn phim
- Phng thc cong cng hai ma trn
- Phng thc hieu thc hin php hiu hai ma trn
- Phng thc doiDau i du cc phn t ca ma trn
- Phng thc chuyenVi chuyn v mt ma trn
- Phng thc tich nhn hai ma trn
- Phng thc tuongThich kim tra xem hay ma trn c
tng thich vi nhau hay khng?
Hng dn:
- khai bo mt ma trn th khai bo nh sau:
struct MT
{
int
a[sh][sc]; //Mng a cha cc phn t ca ma
trn.
int n;
//Cp ma trn.
}
- thc hin nhp, cng hiu, i du, tich th xem li cch
gii ca cc bi tp trong bi tp mu .
- Mun i du cc phn t ca ma trn ta dng chng ton t
(-) nh bi tp 6 (bi tp mu).
Bi 7:
Ti liu hng dn thc hnh Mn LTHDT vi C#

122

Bi tp lp trnh hng i tng vi C#

Nm 2008

Xy dng lp SoPhuc m rng hn bi tp 6(bi tp mu)


thc hin cc php ton v s phc, bao gm:
- Hm to SoPhuc(float pt, float pa) khi to phn thc
bng pt v phn o bng pa
- Hm to SoPhuc() khi to phn thc bng 0 v phn o
bng 0
- Phng thc chia thc hin php chia hai s phc
- Phng thc nghichDao tinh nghch o ca mt s
phc
- Phng thc soSanhBang so snh xem hai s phc c
bng nhau hay khng?
- Phng thc lonHon, nhoHon, thc hin php ton
so snh ln hn, nh hn
- Phng thc nhap dng nhp s phc t bn phim
- Phng thc print dng in s phc ra mn hnh.
Hng dn:
+ Xem li bi tp 6 (bi tp mu) ta c th xy dng mt
lp s phc .
+ Nhp s phc t bn phim nh bi tp 9 (bi tp mu)
+ Chia hai s phc bng cch ta chia phn thc v phn o
ring nh cng hai s phc sau cng li th s thu c kt qu .
+ Nghich o mt s phc cng ging n nghch o mt phn
s.
+ Ta c th so snh s phc bng ton t so snh (= =) v (!=)
nh bi tp 8 trong phn bi tp mu.

CHNG III

Ti liu hng dn thc hnh Mn LTHDT vi C#

123

Bi tp lp trnh hng i tng vi C#

Nm 2008

K THA V A HINH
Mc tiu: Sau khi tm hiu chng ny ngi hc c th nm c
cc ni dung sau:
Ci t c s tha k
S dng cc thnh phn ca lp c s
nh ngha li cc hm thnh phn
Truyn thng tin gia cc hm thit lp ca lp dn xut v
c s
S tng thich gia cc i tng ca lp dn xut v lp c
s
Ch ra c im ca phng thc tru tng v tinh a hnh,
ci t bng bi ton c th
Phn bit cc t kha new, virtual, override
Lp tru tng, lp c lp, lp bo
A.

TM TT L THUYT
1. K tha:
Khi nim: l tip thu tip nhn nhng ci c xy dng.
Nu lp B l lp c k tha t lp A th ton b cc thnh
phn ca lp A cng c mt trong lp B m khng cn phi khai
bo trong lp B. Lp A c gi l lp c s hay lp cha, cn lp
B c gi l lp dn xut hay lp con.
K tha c hai loi: n k tha v a k tha.
chng ny chng ta ch nghin cu v n k tha cn a k
tha s c th hin r hn chng giao din.
Cch khai bo lp dn xut k tha mt lp c s : Tn lp dn
xut : Tn lp c s.
Vi d : Lp A k tha lp B th khai bo nh sau : Class A :B
- n k tha l mt lp dn xut ch c k tha t mt lp
c s
Vi d khai bo n k tha
class Class1
{
public Class1()

Ti liu hng dn thc hnh Mn LTHDT vi C#

124

Bi tp lp trnh hng i tng vi C#

Nm 2008

{
Code of contructor
}
}
class class2:Class1 // Khai bo lp Class2 k tha lp Class1
{
public class2()
{
Code of contructor
}
}
- a k tha l mi Class c php k tha nhiu lp c s.
Vi d khai bo a k tha
class Class1
{
public Class1()
{
Code of contructor
}
}
interface IClass1
{
// member of IClass1
}
class class2:Class1, IClass1
{
public class2()
{
Code of constructor
}
}
2. T kho Base:
S dng truy nhp cc thnh vin ca lp c s t lp dn
xut.
Ti liu hng dn thc hnh Mn LTHDT vi C#

125

Bi tp lp trnh hng i tng vi C#

Nm 2008

3. T kho New:
Khi khai bo phng thc trong lp k tha m c tn trng
vi tn ca phng thc(khng c t kho abstract hay virtual)
trong lp c s th phi s dng t kho new che giu phng
thc.
Vi d:
class diem
{
public void nhap()
}
class tamgiac:diem
{
public new void nhap()
}
4. Tinh a hnh :
Bao gm nhng c im sau
+ N c hiu nh l kh nng s dng nhiu hnh thc ca
mt thc th m khng cn quan tm n tng chi tit c th.
+ Phng thc l a hnh c t kho Virtual trc v phng
thc ny phi c ghi lp dn xut.
+ Cho php ci t phng thc ca lp dn xut trong khi thi
hnh
Vi d:Khai bo phng thc a hnh
public virtual float dientich()
5. Ghi :
Ghi phng thc khi c nhu cu cho php ngi lp trnh
thay i hay m rng cc thnh vin (phng thc) cng tn ca
lp c s trong lp dn xut th bn s dng t kho override.
Vi d: class hinh
{
public virtual float dientich()
}
class hinhcn:hinh
Ti liu hng dn thc hnh Mn LTHDT vi C#

126

Bi tp lp trnh hng i tng vi C#

Nm 2008

{
public override float dientich() // phng thc ghi
}
6. Nghim cm k tha:
Mt lp c cho l nghim cm cc lp khc k tha khi n
c khai bo vi t kho l sealed ngay trc t kho Class. Do
vy bt k lp no khai bo k tha lp u pht sinh li khi
bin dch.
Vi d : Khai bo lp nghim cm k tha
sealed class sinhvien
7. Cch truy xut protected:
Bn cn mt lp dn xut thm nhp vo cc thnh phn ca
lp c s. Mc d bn khng mun khai bo cc thnh phn ca
lp c s l chung (public). Cch tt nht l dng cch truy xut
c bo v protected trong nh ngha ca lp c s. Chng u
c x li chung nh bn trong phm vi lp dn xut nhng n vn
c coi l ring mi ni khc. Cch truy nhp protected ch m
rng cho lp con.
8. Lp tru tng:
L lp c it nht mt phng thc tru tng. Khi xy dng
lp tru tng th mi thnh vin c nh ngha trong lp tru
tng u s dng t kho abstract.
Phng thc tru tng khng c s thc thi. Phng thc ny
ch n gin to ra mt tn phng thc v ki hiu phng thc.
N khng nh ngha phn thn, thay vo chng c ci t
trong phng thc ghi ca lp dn xut.
khai bo lp tru tng bn s dng t kho abstract trc
t kho class nh c php sau:
abstract class baseclass
{
// Code of members
}

Ti liu hng dn thc hnh Mn LTHDT vi C#

127

Bi tp lp trnh hng i tng vi C#

Nm 2008

9. S khc nhau gia phng thc a hnh vi phng thc


tru tng:
Phng thc a hnh phn thn c nh ngha tng qut,
lp dn xut c th thay i phng thc . Phng thc tru
tng phn thn khng c nh ngha v n c ci t trong
phng thc ca lp dn xut.
10. Gc ca tt c cc lp (Lp Object):
Trong C #, cc lp k tha to thnh cy phn cp v lp cao
nht (hay lp c bn nht) chinh l lp Object. Bt c kiu d liu
no th cng c dn xut t lp System.Object. Lp Object cung
cp mt s cc phng thc dng cho lp dn xut c th thc hin
vic ph quyt. Sau y l bng tm tt cc phng thc ca lp
Object.
Phng
Chc nng
So snh bng nhau gia hai i tng
thc )
Equal(
GetHashCod Cho php nhng i tng cung cp ring
nhng hm bm cho s dng tp hp.
e( )
GetType( ) Cung cp kiu ca i tng
ToString( ) Cung cp chui th hin ca i tng
Dn dp cc ti nguyn
Finalize( )
Memberwise To mt bn sao t i tng.
Clone( )
V d minh ho vic k tha phng thc ToString() ca lp Objec
t
using System;
namespace Object
{
public class Object
{
private int value;
public Object(int val)
{
value=val ;
}
Ti liu hng dn thc hnh Mn LTHDT vi C#

128

Bi tp lp trnh hng i tng vi C#

Nm 2008

public virtual string ToString()


{
return value.ToString();
}
}
class tester
{
static void Main(string[] args)
{
int i = 5;
Console.WriteLine("Gia tri cua i:{0}", i.ToString());
Object A = new Object(7);
Console.WriteLine("Gia tri cua A:{0}", A.ToString());
Console.ReadLine();
}
}
}
Kt qu sau khi thc hin chng trnh:
Gi tr ca i: 5
Gi tr ca A: 7

11. Kiu Boxing v Unxing


Boxing l tin trnh chuyn i mt kiu gi tr thnh kiu
Object. N l ngm nh khi ta cung cp mt gi tr tham chiu n
gi tr ny v gi tr c chuyn i ngm nh.
Vi d: Minh ho Boxing
using System;
class Boxing
{
public static void Main()
{
Ti liu hng dn thc hnh Mn LTHDT vi C#

129

Bi tp lp trnh hng i tng vi C#

Nm 2008

int i = 123;
Console.WriteLine("The object value:{0}", i);
Console.ReadLine();
}
}
Unxing : tr kt qu ca mt i tng v kiu gi tr, ta thc
hin m tng minh n. Ta thit lp theo 2 bc sau:
1. Chc chn rng i tng l th hin ca mt gi tr
c box
2. Sao chp gi tr t th hin ny thnh gi tr ca bin.
Vd: Minh ho boxing v Unxing
using System;
public class Unxing
{
public static void Main()
{
int i = 123;
object o=i;
int j = (int)o;
Console.WriteLine("j :{0}", j);
Console.ReadLine();
}
}
12. Lp lng nhau:
Lp c khai bo trong thn ca mt lp c gi l lp ni
hay lp lng, lp kia l lp ngoi. Lp lng c kh nng truy cp
ti cc thnh vin ca lp ngoi. Mt phng thc ca lp lng c
th truy xut n bin thnh vin private ca lp ngoi. Hn na
lp ni n trong lp ngoi so vi cc lp khc, n c th l thnh
vin kiu private ca lp ngoi.Lp lng c khai bo vi t
kho internal trc t kho class.
Vi d
public class A
{
Ti liu hng dn thc hnh Mn LTHDT vi C#

130

Bi tp lp trnh hng i tng vi C#

Nm 2008

internal class B
}
B.

BI TP MU
I. K tha

1. Xy dng lp dn xut tha k t lp c s.


Bi 1:
Xy dng lp c tn l lng tinh lng cho cn b vi cc
thng tin sau: H tn, lng c bn, h s lng,vi cc phng
thc :Khi to khng tham s dng khi to lng c bn l
450, h s lng l 2,3.Phng thc thit lp 2 tham s dng
khi to lng c bn,h s lng.
Sau k tha lp c tn l lng c xy dng trn dng
tinh lng mi cho cc cn b vi vic b sung thm h s ph
cp, lng c tinh li nh sau: Lng=lng c bn*h s
lng*h s ph cp.
a, Hng dn:
Bi ton ny c xy dng gm c 2 i tng:class luong
v class luongmoi. Nhn vo bi ton trn ta thy c hai lp c
nhng thuc tinh v phng thc ging nhau nh: lng c bn, h
s lng, cc phng thc khi to, tinh lng.Theo nh lp trnh
cu trc th bn phi i xy dng tt c cc thuc tinh v phng
thc cho c hai lp trn. Ngc li vi lp trnh hng i tng
th vic gii quyt li n gin hn. Bn ch cn xy dng mt lp
class luong, cn lp class luongmoi s k tha li cc thuc tinh v
phng thc ging lp class luong ch khng phi xy dng li.
N ch xy dng cc thuc tinh v phng thc ring ca n m
lp Class luong khng c.
class luong //Lp c s
{
Thuc tinh:
private string hoten;
private double hesoluong;
private static int luongcoban;
Ti liu hng dn thc hnh Mn LTHDT vi C#

131

Bi tp lp trnh hng i tng vi C#

Nm 2008

Lu : Lng c bn l thuc tnh khng thay i.Vy ta


phi khai bo
vi t kho Static
Phng thc:
public void nhap ()
public luong() // Phng thc thit lp khng tham s
public luong(double lcb, float hsl) // Phng thc thit lp
2 tham s
public double tinhluong()
public void hien()
}
class luongmoi //Lp dn xut
{
Thuc tinh:
private double hesophucap;
Phng thc:
public new void nhap ()
public luongmoi() // Phng thc thit lp khng
tham s
public luongmoi(int lcb,double hsl,
double hspc)
// Phng thc thit lp cc tham s
public new double tinhluong()
public new void hien()
}
b, Bi gii mu:
using System;
class luong
{
private string hoten;
private double hesoluong;
private static int luongcoban;
public void nhap()
{
Console.Write("Nhap ho ten:") ;
hoten=Console.ReadLine();
Ti liu hng dn thc hnh Mn LTHDT vi C#

132

Bi tp lp trnh hng i tng vi C#

Nm 2008

Console.Write("He so luong:");
hesoluong=double.Parse(Console.ReadLine());
}
public luong ()
{
luongcoban=450;
hesoluong=2.34;
}
public luong (double lcb,float hsl)
{
luongcoban=lcb ;
hesoluong =hsl ;
}
public void hien()
{
Console.WriteLine("Ho ten :{0}",hoten);
Console.WriteLine("He so luong:{0}",hesoluong );
}
public double tinhluong()
{
return luongcoban*hesoluong ;
}
}
class luongmoi:luong
{
private double hesophucap;
public luongmoi():base()
// Gi phng thc thit lp
khng tham s
{
ca lp c s
hesophucap=0.4;
}
public luongmoi(int lcb,float hsl,double
hspc):base(lcb,hsl)
{
// Gi phng thc thit lp 2
tham s
Ti liu hng dn thc hnh Mn LTHDT vi C#

133

Bi tp lp trnh hng i tng vi C#

hesophucap = hspc;

Nm 2008

ca lp c s

}
public new void nhap()
{
base.nhap();
Console.Write("He so phu cap:");
hesophucap =double.Parse(Console.ReadLine());
}
public new void hien()
{
base.hien();
Console.WriteLine("He so phu cap= {0}", hesophucap);
}
public new double tinhluong()
{
return base.tinhluong()*hesophucap ;
}
}
class tester
{
static void Main()
{
luongmoi A = new luongmoi();
A.nhap();
A.hien();
Console.WriteLine("Luong moi:{0}", A.tinhluong());
Console.ReadLine();
}
}
Kt qu sau khi thc hin chng trnh:
H tn : Nguyn Vn A
H s lng : 3.6
H s ph cp : 4.3
Lng mi : 6 966
Ti liu hng dn thc hnh Mn LTHDT vi C#

134

Bi tp lp trnh hng i tng vi C#

Nm 2008

Kt lun: Mc ich xy dng bi ton trn l gip bn bit cch


xy dng lp dn xut k tha t mt lp c s, cch gi hm thit
lp, phng thc ca lp c s thng qua t kho Base. V tr li
mt s cu hi sau: Khi no th xy dng mt lp k tha t lp
khc ? V mc ich ca vic k tha ?
- Mt lp c k tha t lp khc khi mt lp c cc thuc
tinh v phng thc ging vi mt lp no c xy dng.
- Mc ich ca vic k tha gip chng ta khng phi i xy
dng nhng g c.Do vy bn tit kim thi gian vit m ct
v s dng ti nguyn c hiu qu. Hn na iu cn gip cho
chng trnh sng sa, v trnh c cc li khi lp trnh.
Bi 2
Xy dng phng trnh bc hai sau k tha gii phng
trnh trng phng
a, Hng dn:
Ta thy phng trnh trng phng l trng hp c bit ca
phng trnh bc hai. Bi ton gii phng trnh bc hai l mt bi
ton ph bin v u c lp trnh rt nhiu trong cc ngn ng.
Vy trn c s ca phng trnh bc hai chng ta c th k tha li
lp trnh gii phng trnh trng phng.
Bi ton c chia lm hai i tng Ptbachai v pttp
Cc phng thc v thuc tinh ca phng trnh bc hai
class ptbachai
{
protected double a,b,c;
public void nhap()
public double delta()
public void giai(out double x1,out double x2,out bool kt)
public void hien()
}
class pttp:ptbachai
Ti liu hng dn thc hnh Mn LTHDT vi C#

135

Bi tp lp trnh hng i tng vi C#

Nm 2008

{
public new void hien()
}
b, Bi gii mu:
using System;
class ptb2
{
protected double a,b,c;
public void nhap()
{
Console.Write (" Nhap vao he so a =" );
a =double.Parse(Console.ReadLine());
Console.Write(" Nhap vao he so b =" );
b = double.Parse(Console.ReadLine());
Console.Write(" Nhap vao he so c =" );
c = double.Parse(Console.ReadLine());
}
public double delta()
{
return (b*b-4*a*c);
}
public void giai(out double x1,out double x2,out bool kt)
{
kt = true;
if (delta() < 0) { kt = false; x1 = x2 = 0; }
else
{
if (delta() == 0)
x1 = x2 = -b / (2 * a);
else
{
x1 = (-b + Math.Sqrt(delta())) / (2 * a);
x2 = (-b - Math.Sqrt(delta())) / (2 * a);
}
}
Ti liu hng dn thc hnh Mn LTHDT vi C#

136

Bi tp lp trnh hng i tng vi C#

Nm 2008

}
public void hien()
{
double x1, x2;
bool kt;
giai(out x1,out x2,out kt);
if (kt == false) Console.WriteLine("Phuong trinh vo
nghiem");
else
if (x1 == x2) Console.WriteLine("Phuong trinh co
nghiem kepx1=x2={0}", x1);
else
{
Console.WriteLine("Phuong trinh co 2 nghiem phan
biet");
Console.WriteLine("x1={0}", x1);
Console.WriteLine("x2={0}", x2);
}
}
}
class pttp:ptb2
{
public new void hien()
{
double x1, x2;
bool kt;
base.giai(out x1,out x2,out kt);
if (kt==false )
Console.Write("Phuong trinh vo nghiem");
else
{
if ((x1 == x2 & x1 < 0))
Console.Write("Phuong trinh vo nghiem");
if((x1 == x2 & x1==0)|| (x1 == 0 & x2 < 0))
Console.Write("Phuong trinh co 1 nghiem
Ti liu hng dn thc hnh Mn LTHDT vi C#

137

Bi tp lp trnh hng i tng vi C#

Nm 2008

y1={0}",x1);
if ((x1 == x2 & x1 > 0))
{
Console.WriteLine("Phuong trinh co 2 nghiem
y1,y2");
Console.WriteLine("y1={0}", Math.Sqrt(x1));
Console.WriteLine("y2={0}", -Math.Sqrt(x1));
}
if (x1 == 0 & x2 > 0)
{
Console.WriteLine("Phuong trinh co 3 nghiem ");
Console.WriteLine("y1={0}", x1);
Console.WriteLine("y2={0}", -Math.Sqrt(x2));
Console.WriteLine("y3={0}", Math.Sqrt(x2));
}
if (x1 < 0 & x2 == 0)
Console.WriteLine("Phuong trinh co 1 nghiem y1=
{0}",x2);
if (x1 > 0 & x2 == 0)
{
Console.WriteLine("Phuong trinh co 3 nghiem");
Console.WriteLine("y1={0}", x2);
Console.WriteLine("y2={0}", -Math.Sqrt(x1));
Console.WriteLine("y3={0}", Math.Sqrt(x1));
}
if (x1 < 0 & x2 > 0)
Console.WriteLine("Phuong trinh co 2 nghiem");
if (x1 > 0 & x2 < 0)
{
Console.WriteLine("Phuong trinh co 2 nghiem");
Console.WriteLine("y1={0}", -Math.Sqrt(x1));
Console.WriteLine("y2={0}", Math.Sqrt(x1));
}
if (x1 > 0 & x2 > 0 & x1!= x2 )
{
Ti liu hng dn thc hnh Mn LTHDT vi C#

138

Bi tp lp trnh hng i tng vi C#

Nm 2008

Console.WriteLine("Phuong trinh co 4 nghiem phan


biet");
Console.WriteLine("y1={0}", -Math.Sqrt(x1));
Console.WriteLine("y2={0}", Math.Sqrt(x1));
Console.WriteLine("y3={0}", -Math.Sqrt(x2));
Console.WriteLine("y4={0}", Math.Sqrt(x2));
}
}
}
}
class tester
{
static void Main()
{
pttp D = new pttp();
D.nhap();
D.hien();
Console.ReadLine();
}
}
Kt qu sau khi chy chng trnh:
Nhp vo h s a =3
Nhp vo h s b =2
Nhp vo h s c =1
Phng trnh v nghim

2. Mc truy cp Protected
Bi 1
Xy dng lp hnh vung, tinh din tich cho lp . Dng k
thut tha k tinh th tich cho mt hnh lp phng.
a, Hng dn:
Ti liu hng dn thc hnh Mn LTHDT vi C#

139

Bi tp lp trnh hng i tng vi C#

Nm 2008

Bi ton gm c 2 i tng: Hnh vung v hnh lp phng.


Ta thy hnh lp phng l trng hp c bit ca hnh
vung, do vy n khng nhng k tha cc phng thc v gi
hm thit lp ca lp c s m n cn tha k c thuc tinh ca
lp c s. Thng thng thuc tinh c khai bo l Private, tc l
thuc tinh ring t ca lp v khng cho php cc lp khc truy
cp. Nh vy lp hnh lp phng mun k tha c thuc tinh
ca lp hnh vung th ta phi khai bo thuc tinh trong lp hnh
vung l thuc tinh Protected.
Cc thuc tinh v phng thc ca hnh vung
class hinhvuong // Lp c s
{
protected float a;
public hinhvuong()
public hinhvuong(float x)
public void nhap()
public void hien()
public float dientich()
}
Cc thuc tinh v phng thc ca hnh lp phng.
class hinhlp // Lp dn xut
{
public hinhlp()
public hinhlp(float x)
public void hien()
public float thetich()
}
a, Bi gii mu:
using System;
class hinhvuong
{
protected float a;
public hinhvuong()
{
Ti liu hng dn thc hnh Mn LTHDT vi C#

140

Bi tp lp trnh hng i tng vi C#

Nm 2008

a = 2;
}
public hinhvuong(float x)
{
a = x;
}
public void nhap()
{
Console.Write("Nhap canh cua hinh vuong:");
a=float.Parse(Console.ReadLine());
}
public float dientich()
{
return a*a;
}
public void hien()
{
Console.WriteLine("Thong tin can hien thi");
Console.WriteLine("Canh hinh vuong = {0}",a);
Console.WriteLine ("Dien tich cua hinh vuong=
{0}",dientich());
}
}
class hinhlp :hinhvuong
{
public hinhlp(): base()
{}
public hinhlp(float x): base(x)
{}
public float thetich()
{
return base.dientich() * a;
}
public new void hien()
{
Ti liu hng dn thc hnh Mn LTHDT vi C#

141

Bi tp lp trnh hng i tng vi C#

Nm 2008

base.hien();
Console.WriteLine("The tich cua hinhlp={0}", thetich());
}
}
class tester
{
static void Main()
{
hinhlp B = new hinhlp ();
B.nhap();
B.hien();
Console.ReadKey();
}
}
Kt qu sau khi chy chng trnh:
Nhp cnh ca hnh vung: 5
Thng tin hin th
Cnh hnh vung = 5
Din tich hnh vung = 25
Th tich hnh lp phng = 125

Lu : Nhiu khi bn c khng ch n kiu dn xut protected.


Mc d lp hnh lp phng c thuc tinh ging vi lp hnh
vung nhng cc bn li cho rng n l thuc tinh Private khng
truy xut c. Do li xy dng thuc tinh cho lp hnh lp
phng iu ny l khng cn thit.
Bi tp 2:
Xy dng lp Stack vi cc thuc tinh v phng thc cn
thit. Sau k tha chuyn mt s nguyn dng bt k sang
h m c s 2,8
a, Hng dn:
Bi ton gm c 2 i tng: Stack v i s
Bi ton ny c xy dng nhm cng c thm cho bn c v
cch xy dng lp k tha, v thun tin khi s dng tinh k tha.
Ti liu hng dn thc hnh Mn LTHDT vi C#

142

Bi tp lp trnh hng i tng vi C#

Nm 2008

Ta s dng c ch pop v push ca Stack chuyn i. Mi khi ta


ly s cn chuyn chia ln lt cho h cn i th ta ln lt push
s d ca tng php chia vo Stack. Sau khi thc hin chia xong th
ta pop cc s d trong Stack ra. Vic push v pop thc hin theo c
ch vo trc ra sau.Nh vy ta s c kt qu ca vic chuyn
i.
Cc thuc tinh v phng thc ca lp Stack
class Stack
//Lp c s
{
private int top;
int [] s;
public stack()
public Stack(int n)
public bool full()
// Kim tra Stack y
public bool empty() // Kim tra Stack trng
public void push(int x)
public void pop()
}
class Doiso:Stack
//Lp dn xut
{
private int a,n;
//a l h cn i, n l s cn i
public void nhap()
public void doi()
public void hien()
}
b, Bi gii mu:
using System;
namespace stack
{
class Stack
{
private int top;
private int []s;
public bool empty()
{
Ti liu hng dn thc hnh Mn LTHDT vi C#

143

Bi tp lp trnh hng i tng vi C#

Nm 2008

return (top == -1);


}
public bool full()
{
return (top >= s.Length);
}
public Stack ()
{
s = new int[20];
top=-1;
}
public void push(int x)
{
if(!full())
{
top=top+1;
s[top]=x;
}
else
Console.Write("Stack tran");
}
public int pop()
{
if(empty())
{
Console.Write("Stack can");
return 0;
}
else
return s[top--];
}
}
class doiso : Stack
{
private int a, n;
Ti liu hng dn thc hnh Mn LTHDT vi C#

144

Bi tp lp trnh hng i tng vi C#

Nm 2008

public void nhap()


{
Console.Write("Nhap vao so can doi:");
n = Convert.ToInt32 (Console.ReadLine());
Console.Write("Nhap vao he can doi:");
a = Convert.ToInt32(Console.ReadLine());
}
public void doi()
{
int du;
while (n != 0)
{
du = n % a;
push(d);
n = n / a;
}
}
public void hien()
{
while (!empty())
{
Console.Write("{0}", pop());
}
}
}
class tester
{
static void Main()
{
doiso d = new doiso();
d.nhap();
d.doi();
d.hien();
Console.ReadKey();
}
Ti liu hng dn thc hnh Mn LTHDT vi C#

145

Bi tp lp trnh hng i tng vi C#

Nm 2008

}
}
Kt qu sau khi chy chng trnh:
Nhp vo s cn i: 8
Nhp vo h cn i: 2
Kt qu chuyn i: 1000

3. Cch truy nhp ca t kha internal v public


chng lp v i tng chng ta thng truy xut cc
thuc tinh v phng thc vi hai t kha l private v public. T
kha internal cng nhc n nhng n it c s dng, vy t kha
ny c dng lm g v khi no th cn dng n n. lm
sng t t kha ny chng ta i xy dng chng trnh ci t di
y.
Trong ngn ng C#, chng ta thy c cc th vin sn c nh:
using System, using System.text.Cc th vin ny c xy
dng sn v chng ta ch vic khai bo s dng.Trn thc t
chng ta c th xy dng cc lp sau ng gi nh cc th vin
c sn trn. iu ny c th hin r trong phn k tha.
Vi d: Bn c lp c s A, Lp B k tha cc phng thc ca A,
Lp C cng c nhu cu k tha v s dng cc phng thc ca A.
Nh vy hai chng trnh khc nhau, cng l lp A nhng chng
ta u phi xy dng n c hai chng trnh. Vn t ra y
l bn xy dng mt lp c s A v c th gi n ra s dng bt
c chng trnh no k tha n m khng phi xy dng li lp
c s .
Cch xy dng mt lp v ng gi thnh th vin
Bc 1. Vo Microsoft visual studio 2005 vo File chn New
chn Project chn Class Library nh hnh v nhn OK

Ti liu hng dn thc hnh Mn LTHDT vi C#

146

Bi tp lp trnh hng i tng vi C#

Nm 2008

Bc 2. Xy dng lp c s A, lu l lp ny khng xy dng


hm main. Lp ny c tn Class Library1.
Bc 3. Sau khi xy dng xong bc 2, ta tin hnh ng gi to
th vin.Cch ng gi thc hin nh sau:Vo Build chn Build
Class Library1. Nh vy l bn to ra mt tp Class Library1.dll
trong debug ca th mc bin ca Class Library1.
Bc 4: ng ki tp Class Library1.dll nh mt tp ca Windown
bng cch:
- To mt chng trnh mi vo project chn Add
Reference.... xut hin hp thoi nh hnh sau:

Ti liu hng dn thc hnh Mn LTHDT vi C#

147

Bi tp lp trnh hng i tng vi C#

Nm 2008

Chn ng dn n tp ClassLibrary1.dll va to sau nhn


OK.
Bc 5: Khai bo th vin va to trong project cha lp dn xut.
Vi d: Khai bo th vin ClassLibrary1
using system ClassLibrary1
Sau khi khai bo xong bn ch vic k tha li lp c s bnh
thng.
Bi 1: Vi d minh ha s dng vi t kha public
Xy dng lp C s A
using System;
public class ClassA
{
internal int x;
public ClassA()
{
x = 2;
}
public ClassA(int x)
{
this.x = x; }
public void nhap()
Ti liu hng dn thc hnh Mn LTHDT vi C#

148

Bi tp lp trnh hng i tng vi C#

Nm 2008

{
Console.Write("Nhap vao gia tri cua x=");
x = int.Parse(Console.ReadLine());
}
public void hien()
{
Console.WriteLine("Thong tin can hien thi");
Console.WriteLine("Gia tri cua x={0}", x);
}
}
Xy dng lp B k tha t lp c s A
using System;
using ClassLibrary1;
class ClassB:ClassA
{
internal int y;
public ClassB(): base()
{
y = 5;
}
public ClassB(int x, int y): base(x)
{
this.y= y;
}
public new void nhap()
{
base.nhap();
Console.Write("Nhap gia tri cua y=");
y = int.Parse(Console.ReadLine());
}
public new void hien()
{
base.hien();
Console.WriteLine("Gia tri cua y={0}", y);
Ti liu hng dn thc hnh Mn LTHDT vi C#

149

Bi tp lp trnh hng i tng vi C#

Nm 2008

Console.WriteLine("Tong x + y = {0}", tong());


}
public int tong()
{
return x + y ; }
}
}
class tester
{
static void Main(string[] args)
{
ClassB D = new ClassB();
D.nhap();
D.hien();
Console.ReadLine();
}
}
Lu : Lp B mun truy xut hay k tha cc thnh vin ca
lp A th Lp A phi xy dng l lp c t kha truy cp l public.
V ta xy dng chng trnh trn n l hai khi Asembly khc
nhau. Bn cng c th s dng th vin lp A cho bt c lp dn
xut no cn k tha n. Nu ta thay i t kha public ca ClassA
l internal th chng trinh s bo li v t kha internal ch cho
php truy xut trong khi Assembly.
Bi 2: Vi d v cch truy cp ca t kha internal
using System;
namespace BTle
{
internal class ClassA
{
internal int x;
public ClassA()
{
Ti liu hng dn thc hnh Mn LTHDT vi C#

150

Bi tp lp trnh hng i tng vi C#

Nm 2008

x = 3;
}
public ClassA(int x)
{
this.x = x;
}
}
}
class ClassB:ClassA
{
int y;
public ClassC(): base()
{
y = 6;
}
public ClassC(int x, int y): base(x)
{
this.y = y;
}
public new void nhap()
{
base.nhap();
Console.Write("Nhap gia tri cua y=");
y = int.Parse(Console.ReadLine());
}
public new void hien()
{
base.hien();
Console.WriteLine("Gia tri cua y={0}", y);
Console.WriteLine("Tong x + y = {0}", tong());
}
public int tong()
{
return x + y ;
}
Ti liu hng dn thc hnh Mn LTHDT vi C#

151

Bi tp lp trnh hng i tng vi C#

Nm 2008

}
class tester
{
static void Main(string[] args)
{
ClassBD = new ClassB();
D.nhap();
D.hien();
Console.ReadLine();
}
}
Kt qu chng trnh
Nhp vo gi tr ca x=5
Nhp vo gi tr ca y=4
Thng tin cn hin th
Gi tr ca x=5
Gi tr ca y=4
Tng x+y=9

Lu : Trong lp trnh cc bn ch cn quan tm n cch truy


nhp v c im ca 3 t kha truy cp sau: private, public,
protected. Cn li cc t kha khc ch cn tham kho bit v
cch thc truy cp ca n.
4. Lp c s v i tng thnh phn
Lp c s A thng c x li ging nh mt thnh phn kiu
i tng ca lp dn xut B. Nhng ta c th thay vic dng A l
lp c s ca B bng cch khai bo mt thnh phn kiu A trong
lp B.
Bi 1:
Xy dng lp Stack vi cc thuc tinh v phng thc cn
thit. Sau dng lp Stack kim tra mt xu ki t nhp vo
Ti liu hng dn thc hnh Mn LTHDT vi C#

152

Bi tp lp trnh hng i tng vi C#

Nm 2008

t bn phim gm cc ki t ( v ).Kt qu kim tra: Xu hp l


((( )))
Xu khng hp l ((( )).
a, Hng dn:
Bi ton c 2 i tng class stack, class KTchuoi. Bi ton
ny chng ta khng xy dng k tha lp Stack nh bi trn m
chng ta s xy dng trong lp KTchuoi c mt thnh phn kiu
Stack. Vic xy dng i tng kiu thnh phn ca mt lp cng
ging nh k tha ta c th truy nhp c cc thuc tinh v
phng thc ca lp l i tng thnh phn .V lm r iu
ny chng ta tham kho chng trnh mu di.
Cc phng thc v thuc tinh ca lp Stack xy dng tng t
nh bi 3
Cc phng thc v thuc tinh ca lp KTchuoi
Class KTchuoi
{
Stack a=new Stack();
public bool kiemtra(string s)
}
b, Bi gii mu:
using System;
class stack
{
int top;
int[] p;
public stack(int n)
{
p=new int[n];
top = -1;
}
public stack()
{
p=new int[20];
top = -1;
}
Ti liu hng dn thc hnh Mn LTHDT vi C#

153

Bi tp lp trnh hng i tng vi C#

Nm 2008

public bool isempty()


{
if (top == -1)
return true;
else
return false;
}
public bool full()
{
if (top == p.Length)
return true;
else
return false;
}
public void push(int a)
{
if (full() == true)
Console.Write("stack day !");
else
p[++top] = a;
}
public int pop()
{
if (isempty()) return 0;
else return p[top--];
}
public void hien()
{
while (!isempty())
{
Console.Write("{0}",pop());
}
}
}
class KTchuoi
Ti liu hng dn thc hnh Mn LTHDT vi C#

154

Bi tp lp trnh hng i tng vi C#

Nm 2008

{
stack a = new stack();
public bool kiemtra(string s)
{
int t;
for (int i = 0; i < s.Length; i++)
{
if (s[i] == '(')
a.push(Convert.ToInt32(s[i]));
if (s[i] == ')')
if (a.isempty()) return false;
else t=a.pop();
}
if (a.isempty())
return true;
else return false;
}
}
class Tester
{
static void Main()
{
string f;
Console.Write("Ban nhap vao mot chuoi :");
f = Console.ReadLine();
KTchuoi a = new KTchuoi();
if (a.kiemtra(f) == true)
Console.Write("Chuoi hop le !");
else Console.Write("Chuoi khong hop le !");
Console.ReadKey();
}
}
Kt qu sau khi chy chng trnh:
Ti liu hng dn thc hnh Mn LTHDT vi C#

155

Bi tp lp trnh hng i tng vi C#

Nm 2008

Ban nhap vao mot chuoi: (((())


Chuoi khong hop le !

Lu : Hai cch s dng k tha v khai bo l i tng


thnh phn ca lp u ging nhau l c th k tha cc thuc tinh
v phng thc ca lp c. Nhng khng phi bi ton no cng
c th s dng c c hai cch trn, m tu theo yu cu m ta c
th chn phng php ph hp.
Bi 2:
a) Cho lp HocVien c khai bo nh sau:
class HocVien{ //lp m t mt hc vin
private String mahv; //m hiu ca hc vin
private String hoTen; //h tn ca hc vin
private int namSinh; //nm sinh ca hc vin
Hy xy dng cho lp HocVien trn cc phng thc sau:
- Phng thc to dng vi 2 tham s xu v 1 tham s thc,
phng thc ny ln lt ly cc gi tr truyn vo ca tham s
gn cho cc thuc tinh mahv, hoTen, namSinh.
- Phng thc print in ra mn hnh thng tin ca hc vin
theo nh dng: mahv, hoTen, namSinh.
- Phng thc compare thc hin so snh hai hc vin, kt
qu tr v mt trong cc gi tr {-1, 0, 1} ln lt tng ng vi cc
trng hp: hc vin th nht c tui nh, bng, ln hn hc vin
th hai.
b) Cho lp DanhSach c khai bo nh sau:
class DanhSach{ //lp biu din cho mt danh sch cc hc vin
private HocVien ds[]; //mng lu danh sch hc vin
public DanhSach(int n){
//phng thc to dng khi to mt mng gm n phn t
ds=new HocVien[n];
Hy xy dng cho lp DanhSach trn cc phng thc sau:
+ Phng thc printList in danh sch hc vin ra mn
hnh, mi hc vin trn mt dng.

Ti liu hng dn thc hnh Mn LTHDT vi C#

156

Bi tp lp trnh hng i tng vi C#

Nm 2008

+ Phng thc sortList sp xp danh sch hc vin theo


th t tng dn ca nm sinh.
a.Hng dn gii
Bi ton bao gm c 2 i tng l Hc vin v Danh sch. Lp
Danh sch thc cht l mt mng cc i tng hc vin. Nh vy
bi ton ny chng ta s dng k tha th rt kh gii quyt, v
vy ta nn xy dng lp Danh sch c mt i tng thnh phn l
Hc vin. Cc thuc tinh v phng thc ca hai lp ny cc bn
thy rt r bi.
b.Chng trnh mu
using System;
class Hocvien
{
private string mshv;
private string hoten;
private int namsinh;
public Hocvien()
{
}
public void nhap()
{
Console.Write("masv:"); mshv = Console.ReadLine();
Console.Write("hoten:"); hoten = Console.ReadLine();
Console.Write("namsinh:");
namsinh = int.Parse(Console.ReadLine());
}
public void print()
{
Console.WriteLine("\t{0}\t{1}\t{2}",mshv,hoten,namsinh);
}
public int compare(Hocvien a,Hocvien b)
{
int k;
if (a.namsinh < b.namsinh)
Ti liu hng dn thc hnh Mn LTHDT vi C#

157

Bi tp lp trnh hng i tng vi C#

Nm 2008

k =-1;
else {
if (a.namsinh == b.namsinh)
k= 0;
else k = 1;
}
return k;
}
}
class Danhsach
{
private int n;
private Hocvien[] ds;
public Danhsach(int n)
{
ds = new Hocvien[n];
}
public void nhapds()
{
Console.Write("nhap so hoc vien:");
n = int.Parse(Console.ReadLine());
ds = new Hocvien[n];
for (int i = 0; i < ds.Length; i++)
ds[i] = new Hocvien();
for (int i = 0; i < n; i++)
{
Console.WriteLine(" Hoc vien thu{0}", i + 1);
ds[i].nhap();
}
}
public void printlist()
{
Console.WriteLine("Danh sach cac hoc vien la");
Console.WriteLine("\tstt\tmshv\thoten\t\tnamsinh");
(int i = 0; i < ds.Length; i++)
Ti liu hng dn thc hnh Mn LTHDT vi C#

158

Bi tp lp trnh hng i tng vi C#

Nm 2008

{
Console.Write("\t{0}", i + 1);
ds[i].print();
}
}
public void sortList()
{
for (int i = 0; i < ds.Length-1; ++i)
{
Hocvien min = ds[i];
for (int j = i+1; j < ds.Length; ++j)
{
if (min.compare(ds[i], ds[j]) == 1)
{
min = ds[i];
ds[i] = ds[j];
ds[j] = min;
}
else
{
min = ds[i];
}
}
}
for (int i = 0; i < n; i++)
ds[i].print();
}
}
class tester
{
static void Main(string[] args)
{
Danhsach d = new Danhsach(3);
d.nhapds();
d.printlist();
Ti liu hng dn thc hnh Mn LTHDT vi C#

159

Bi tp lp trnh hng i tng vi C#

Nm 2008

Console.WriteLine("Danh sach sau khi sap sep theo nam


sinhla:\n");
d.sortList();
Console.ReadLine();
}
}
Kt qu sau khi chy chng trnh:
Danh sch cc hc vin
STT Mahv
H tn
1
sv01
Nguyn Hng Chanh
2
sv02
Nguyn Th Lan
3
sv03
Trn Th Lng
4
sv04
Phng Mai
Danh sch sau khi sp xp
Nguyn Th Lan
1984
Phng Mai
1985
Nguyn Hng Chanh
1987
Trn Th Lng
1987

Nmsinh
1987
1984
1987
1985

II. Nghim cm k tha


Bi 1.
Xy dng mt lp hc sinh bao gm cc thuc tinh: h tn,
im ton, im li, phng thc nhp, hin. Lp hc sinh c
khai bo l lp nghim cm k tha. Sau xy dng mt lp sinh
vin k tha cc thuc tinh v phng thc ca lp hc sinh, ngoi
ra lp sinh vin cn c thm thuc tinh im ho. Hy thc hin
chng trnh trn v xem chng trnh s xy ra iu g?
a, Hng dn:
Ta thy lp hc sinh l lp nghim cm k tha vy ta phi khai
bo t kho Sealed trc t kho Class nh sau:
sealed Class hocsinh
{
Ti liu hng dn thc hnh Mn LTHDT vi C#

160

Bi tp lp trnh hng i tng vi C#

Nm 2008

private string hoten;


private float dtoan, dli;
public void nhap()
public void hien()
}
class sinhvien:hocsinh
{
private float dhoa;
public void nhap()
public void hien()
}
b, Bi gii mu:
using System;
sealed class hocsinh
{
private string hoten;
private float dtoan,dli;
public void nhap()
{
Console.Write("Nhap ho ten hoc sinh: ");
hoten=Console.ReadLine();
Console.Write("Diem toan: ");
dtoan=float.Parse(Console.ReadLine());
Console.Write("Diem li: ");
dli=float.Parse(Console.ReadLine());
}
public void hien()
{
Console.WriteLine("Thong tin can hien thi");
Console.WriteLine("Ho ten :{0}",hoten );
Console.WriteLine("Diem toan: {0}",dtoan );
Console.WriteLine("Diem li: {0}",dli );
}
}
class sinhvien:hocsinh
Ti liu hng dn thc hnh Mn LTHDT vi C#

161

Bi tp lp trnh hng i tng vi C#

Nm 2008

{
private float dhoa;
public new void nhap()
{
base.nhap();
Console.Write("Nhap diem hoa:");
dhoa=float.Parse(Console.ReadLine());
}
public new void hien()
{
base.hien();
Console.WriteLine("Diem hoa: {0}",dhoa );
}
}
class tester
{
static void Main(string[] args)
{
sinhvien a = new sinhvien();
a.nhap();
a.hien();
Console.ReadLine();
}
}
Kt qu sau khi chy chng trnh:
Chng trnh a ra dng thng bo li: Cannot derive from
sealed type hocsinh
Kt lun: Lp sinhvien khng th k tha cc thuc tinh v
phng thc t lp Sinh vin.Bi v lp hc sinh c bo v cm
k tha bng t kho Sealed.
III. Tinh a hnh.
Bi 1
Ti liu hng dn thc hnh Mn LTHDT vi C#

162

Bi tp lp trnh hng i tng vi C#

Nm 2008

Xy dng mt lp hnh, k tha lp hnh tinh din tich


cho cc hnh: Hnh trn, hnh ch nht..
a, Hng dn:
Bi ton ny gm c 3 i tng: class Hinh, class hinhtron,
class hinhcn.
Ta thy: hnh ch nht, hnh trn u c chung mt phng thc
l tinh din tich. Nhng cch tinh din tich ca mi hnh li khng
ging nhau, mi mt hnh n cch tinh ring. Mt phng thc m
c nhiu th hin khc nhau c coi l phng thc a hnh. Nh
vy phng thc tinh din tich c coi l phng thc a hnh.
Ta xy dng mt lp c s class Hnh c phng thc tinh din
tich, tc lp class Hnh ch xy dng lm th no tinh din tich.
Cch thc tinh nh th no th tu thuc vo hai lp dn xut class
hinhtron v class hinhcn c th k tha li bng cch ghi .
Cc phng thc v thuc tinh ca lp class Hinh
class Hinh
{
//Phng thc tnh din tch c khai bo l phng thc
a hnh
public virtual float getArea()
}
Cc thuc tinh v phng thc ca Class hinhtron
class hinhtron
{
private float r;
public hinhtron(float r)
public override float getArea() //Phng thc ghi
}
Cc thuc tinh v phng thc ca lp Class hinhcn
class hinhcn
{
private float cd,cr;
public hinhcn(float cd,float cr)
public override float getArea() //phng thc ghi
}
Ti liu hng dn thc hnh Mn LTHDT vi C#

163

Bi tp lp trnh hng i tng vi C#

Nm 2008

b, Bi gii mu:
using System;
class hinh
{
public virtual double getArea()
{
return getArea();
}
}
class hinhtron:hinh
{
private float r;
public hinhtron(float r)
{
this.r=r;
}
public override double getArea()
{
return r*r*3.14;
}
}
class hinhcn:hinh
{
private float cd,cr;
public hinhcn(float cd,float cr)
{
this.cd =cd;
this.cr =cr;
}
public override double getArea()
{
return cd*cr;
}
}
class tester
Ti liu hng dn thc hnh Mn LTHDT vi C#

164

Bi tp lp trnh hng i tng vi C#

Nm 2008

{
static void Main(string[] args)
{
hinh H = new hinh();
hinhcn hcn = new hinhcn(2,3);
hinhtron ht = new hinhtron(3);
H = ht;
Console.WriteLine("Dien tich hinh tron= {0}",
H.getArea());
H = hcn;
Console.WriteLine ("Dien tich hinh chu nhat= {0}",
H.getArea());
Console.ReadLine();
}
}
Kt qu sau khi chy chng trnh:
Din tich hnh trn = 28.26
Din tich hnh ch nht= 6

Kt lun: Khi k tha mt phng thc a hnh ta phi ghi bng


t kho override. Bi ton trn ngi lp trnh s dng phng
thc thit lp ly d liu u vo. Bn c c th nng cp
chng trnh vi cc phng thc nhp, hin c th tinh ton
vi bt k mi d liu nhp.
Bi 2:
Mt ci chung gm 10 ci lng dng nht mo hoc ch
(mi lng ch nht nhiu nht mt con).Vit chng trnh qun li
vic nht mo hoc ch trong cc lng.
a, Hng dn:
Ta xy dng cc lp mo v ch dn xut t lp ng vt. Do
vy, khi cn qun li thm vic nht con g chng hn ch cn b

Ti liu hng dn thc hnh Mn LTHDT vi C#

165

Bi tp lp trnh hng i tng vi C#

Nm 2008

sung vo chng trnh lp con g m chng trnh vn hot ng


bnh thng m khng cn phi sa i.
Vi bi ton ny chng ta s xy dng lp ng vt c tinh a hnh
sau k tha xy dng lp ch, mo. Nu bi ton ny khng xy
dng a hnh th phi gii quyt nh th no? Ta thy lp ch, mo
u thuc lp ng vt nhng chng khng c c im g ging
nhau c th k tha cho nhau.V vy chng ta cn xy dng mt
lp chung cho hai loi ny l lp ng vt.
Bi ton gm c 3 i tng: class Dongvat, class cho, class meo
class Dongvat
{
private int vt;
private string ten;
public virtual void nhap(int v)
public virtual void hien()
}
class cho:Dongvat
{
public override void nhap(int v)
public override void hien()
}
class meo:Dongvat
{
public override void nhap(int v)
public override void hien()
}
b, Bi gii mu:
using System;
namespace chomeo
{
class Dongvat
{
private int vt;
private string ten;
public virtual void nhap(int v)
Ti liu hng dn thc hnh Mn LTHDT vi C#

166

Bi tp lp trnh hng i tng vi C#

Nm 2008

{
vt=v;
Console.WriteLine ("Vi tri cua chuong: {0}",vt);
Console.Write ("Nhap vao ten dong vat:");
ten=Console.ReadLine();
}
public virtual void hien()
{
Console.WriteLine("Vi tri cua chuong:{0}",vt);
Console.WriteLine("Ten dong vat:{0}",ten );
}
}
class cho:Dongvat
{
public override void nhap(int v)
{
Console.WriteLine("\nNhap thong tin cho con cho");
base.nhap(v);
}
public override void hien()
{
Console.WriteLine("Day la con cho");
base.hien();
}
}
class Meo:Dongvat
{
public override void nhap(int v)
{
Console.WriteLine("\nNhap thong tin cho con meo");
base.nhap(v);
}
public override void hien()
{
Console.WriteLine("Day la con meo");
Ti liu hng dn thc hnh Mn LTHDT vi C#

167

Bi tp lp trnh hng i tng vi C#

Nm 2008

base.hien();
}
}
class tester
{
static void Main(string[] args)
{
Dongvat[] ds = new Dongvat[20];
int i;
for (i = 0; i < ds.Length; ++i)
ds[i] = null;
ConsoleKeyInfo kt;
i=0;
do
{
Console.Write ("Chuong thu {0} ban nuoi cho(c)hay
meo(m): ",i);
kt = Console.ReadKey();
switch (char.ToUpper(kt.KeyChar))
{
case 'C':
ds[i] = new cho();
ds[i].nhap(i);
break;
case 'M':
ds[i] = new Meo();
ds[i].nhap(i);
break;
}
i++;
}
while ((int)kt.KeyChar != 13 && i < 20);
int vt;
Console.Write("Nhap vao vi tri chuong can kiem tra");
vt = int.Parse(Console.ReadLine());
Ti liu hng dn thc hnh Mn LTHDT vi C#

168

Bi tp lp trnh hng i tng vi C#

Nm 2008

if (ds[vt] == null)
Console.WriteLine("Chuong nay khong nuoi con gi");
else
ds[vt].hien();
Console.ReadKey();
}
}
}
Kt qu sau khi chy chng trnh:
Chung th 0 bn nui g ch(c) hay mo(m):c
Nhp thng tin cho ch
V tri ca chung l: 0
Nhp vo tn ng vt: Nic
Chung th 1 bn nui g ch(c)hay mo(m): m
Nhp thng tin cho mo
V tri chung l: 1
Nhp vo tn ng vt: Mp
Nhp vo v tri chung cn kim tra: 1
y l con mo
V tri chung l: 1
Tn ng vt: Mp

IV. Lp tru tng


Bi 1.
Ta thy lp ch mo c xy dng bi 2 k tha lp ng
vt c cc phng thc mang tinh a hnh. bn c c th phn
bit c gia phng thc a hnh vi phng thc tru tng,
chng ta xy dng li bi ton trn theo kiu lp tru tng
a, Hng dn:
Ta thy khi qun li vic nht ch mo, ta c mt mng cc
chung. V cc chung c dng nht ng vt, v chng ta
Ti liu hng dn thc hnh Mn LTHDT vi C#

169

Bi tp lp trnh hng i tng vi C#

Nm 2008

khng quan tm xem chung nht con vt g. Vic nht con vt g


l do mi chung. Bi ton t ra l qun li ch mo, t 2 loi ny
ta thy chng u c chung mt ngun gc l ng vt. ng vt
mang tinh cht chung, khng th hin r l con vt g. V th ta xy
dng lp ng vt l lp c s tru tng ca hai con vt trn.
Cc thuc tinh v phng thc ca i tng ch, mo xy
dng ging bi 2 phn tinh a hnh.Nhng ch khc lp ng vt:
public abstract class Dongvat
{
protected int vt;
protected string ten;
public abstract void nhap(int v);
public abstract void hien();
}
b, Bi gii mu:
using System;
using System.Collections.Generic;
using System.Text;
namespace truu_tuong
{
public abstract class Dongvat
{
protected int vt;
protected string ten;
public abstract void nhap(int v);
public abstract void hien();
}
class cho:Dongvat
{
public override void nhap(int v)
{
vt=v;
Console.WriteLine ("\nNhap thong tin cho con cho");
Console.WriteLine ("Vi tri cua chuong:{0}",vt);
Console.Write("Nhap ten cua con cho:");
Ti liu hng dn thc hnh Mn LTHDT vi C#

170

Bi tp lp trnh hng i tng vi C#

Nm 2008

ten=Console.ReadLine();
}
public override void hien()
{
Console.WriteLine("Day la chuong nuoi cho");
Console.WriteLine("Vi tri cua chuong:{0}",vt);
Console.WriteLine("Ten cua con cho :{0}",ten );
}
}
class meo:Dongvat
{
public override void nhap(int v)
{
vt=v;
Console.WriteLine ("\nNhap thong tin cho con meo");
Console.WriteLine ("Vi tri cua chuong:{0}",vt);
Console.Write("Nhap ten cua con meo:");
ten=Console.ReadLine();
}
public override void hien()
{
Console.WriteLine("Day la chuong nuoi meo");
Console.WriteLine("Vi tri cua chuong:{0}",vt);
Console.WriteLine("Ten cua con meo :{0}",ten );
}
}
class tester
{
static void Main(string[] args)
{
Dongvat[] ds = new Dongvat[20];
int i;
for (i = 0; i < ds.Length; ++i)
ds[i] = null;
ConsoleKeyInfo kt;
Ti liu hng dn thc hnh Mn LTHDT vi C#

171

Bi tp lp trnh hng i tng vi C#

Nm 2008

i = 0;
do
{
Console.Write("Chuong thu {0} ban nuoi cho(c)hay
meo(m): ", i);
kt = Console.ReadKey();
switch (char.ToUpper(kt.KeyChar))
{
case 'C':
ds[i] = new cho();
ds[i].nhap(i);
break;
case 'M':
ds[i] = new meo();
ds[i].nhap(i);
break;
}
i++;
}
while ((int)kt.KeyChar != 13 && i < 20);
int vt;
Console.Write("Nhap vao vi tri chuong can kiem tra");
vt = int.Parse(Console.ReadLine());
if (ds[vt] == null)
Console.WriteLine("Chuong nay khong nuoi con gi");
else
ds[vt].hien();
Console.ReadKey();
}
}
}
Kt qu sau khi chy chng trnh:
Ging bi trn

Ti liu hng dn thc hnh Mn LTHDT vi C#

172

Bi tp lp trnh hng i tng vi C#

Nm 2008

V. Xy dng lp lng nhau


Bi 1.
Xy dng lp hnh ch nht vi cc thuc tinh v phng thc
cn thit. Sau xy dng lp hnh hp bn trong lp hnh ch
nht v tinh th tich cho hnh hp .
a, Hng dn:
Khi gii quyt mt bi ton bn mong mun mt lp dn xut
c th truy xut n cc thnh phn thuc tinh ca lp c s. Thng
thng bn s k tha bng cch khai bo thuc tinh ca lp c s
l protected. Nhng bi ton ny bn khng cn phi lm iu
m vn truy nhp c thuc tinh Private ca lp c s. Chng ta
s xy dng mt lp c s, thay v xy dng lp dn xut ta s xy
dng mt lp lng bn trong ca lp c s trn. V lp ny cng s
tr thnh mt i tng thnh phn ca lp ngoi.
Bi ton gm c 2 i tng class hinhcn, class hinhhop
Cu trc xy dng lp lng ca bi ton ny nh sau:
class hinhcn
{
private int cdai, crong;
public hinhcn()
public hinhcn(int cd, int cr)
public void nhap()
public int dientich()
Public void hien()
internal class hinhhop
{
private int cao;
public hinhhop()
public hinhhop(int cd, int cr, int c)
public void nhap(hinhcn f)
public int thetich(hinhcn f)
public void hien(hinhcn f)
}
}

Ti liu hng dn thc hnh Mn LTHDT vi C#

173

Bi tp lp trnh hng i tng vi C#

Nm 2008

b, Bi gii mu:
using System;
namespace loplong
{
class hinhcn
{
private int cdai,crong;
public hinhcn()
{
cdai=5;
crong=3;
}
public hinhcn(int cd, int cr)
{
cdai = cd;
crong = cr;
}
public void nhap()
{
Console.Write("nhap chieu dai:");
cdai=int.Parse(Console.ReadLine());
Console.Write("Nhap chieu rong:");
crong=int.Parse(Console.ReadLine());
}
public int dientich()
{
return cdai*crong ;
}
public void hien()
{
Console.WriteLine("Thong tin can hien thi");
Console.WriteLine("Chieu dai={0}",cdai );
Console.WriteLine("Chieu rong={0}",crong);
Console.WriteLine("Dien tich hinh cn ={0}",dientich());
Ti liu hng dn thc hnh Mn LTHDT vi C#

174

Bi tp lp trnh hng i tng vi C#

Nm 2008

}
internal class hinhhop
{
int cao;
public hinhhop()
{
cao=4;
}
public hinhhop(int cd,int cr,int c)
{
cao = c;
}
public int thetich(hinhcn f)
{
return f.dientich()*cao;
}
public void nhap(hinhcn f)
{
f.nhap();
Console.Write("Nhap chieu cao=");
cao = int.Parse(Console.ReadLine());
}
public void hien(hinhcn f)
{
f.hien();
Console.WriteLine("The tich hinh hop:{0}", thetich(f));
}
}
}
class tester
{
static void Main(string[] args)
{
hinhcn f = new hinhcn();
hinhcn.hinhhop A = new hinhcn.hinhhop();
Ti liu hng dn thc hnh Mn LTHDT vi C#

175

Bi tp lp trnh hng i tng vi C#

Nm 2008

A.nhap(f);
A.hien(f);
Console.ReadLine();
}
}
}
Kt qu sau khi chy chng trnh:
Nhp chiu di: 10
Nhp chiu rng: 7
Nhp chiu cao: 5
Thng tin hin th
Chiu di = 10
Chiu rng =7
Din tich hnh ch nht = 70
Th tich hnh hp =350

Kt lun
Vic xy dng lp lng c u im l c th truy xut cc thnh
vin private ca lp ngoi.Tuy nhin nu c nhiu lp c xy
dng lng nhau th chng trnh rt ri, bn c s kh hiu
hn.Bi ton ny ch ln xy dng khi c it lp, nu bi ton c
nhiu lp th chng ta ln xy dng mt lp c s sau k tha
xy dng cc lp khc. Khi xy dng lp lng bn trong cn ch
khai bo t kho Internal trc t kho Class.
C.

MT S CU HOI L THUYT:
Cu 1: C cn thit phi ch nh t kha override trong phng
thc ph quyt ca lp dn xut hay khng?
Tr li: C, chng ta phi khai bo r rng t kha override vi
phng thc ph quyt phng thc o (ca lp c s ) bn trong

Ti liu hng dn thc hnh Mn LTHDT vi C#

176

Bi tp lp trnh hng i tng vi C#

Nm 2008

lp dn xut.
Cu 2: Lp tru tng l th no? C th to i tng cho lp
tru tng hay khng?
Tr li: Lp tru tng khng c s thc thi, cc phng thc
ca n c to ra ch l hnh thc, tc l ch c khai bo, do vy
phn nh ngha bt buc phi c thc hin cc lp dn xut t
lp tru tng ny. Do ch l lp tru tng, khng c s thc thi
nn chng ta khng th to th hin hay to i tng cho lp tru
tng ny.
Cu 3: C phi khi to mt lp th phi k tha t mt lp no
khng?
Tr li: Khng nht thit nh vy, tuy nhin trong C#, th tt c cc
lp c to iu phi dn xut t lp Object. Cho d chng c
c khai bo tng minh hay khng. Do Object l lp gc ca
tt c cc lp c xy dng trong C#. Mt iu th v l cc kiu
d liu gi tr nh kiu nguyn, thc, k t cng c dn xut t
Object
Cu 4: Lp lng bn trong mt lp l nh th ?
Tr li: Lp lng bn trong mt lp hay cn gi l lp ni
c khai bo vi t kha internal, cha bn trong phm vi ca
mt lp. Lp ni c th truy cp c cc thnh vin private ca
lp m n cha bn trong.
Cu 5: Chng trnh sau y c li, hy sa li bin dch v chy
chng trnh.Lnh no gy ra li v nguyn nhn gy li.
class A
{
private int x;
public A()
Ti liu hng dn thc hnh Mn LTHDT vi C#

177

Bi tp lp trnh hng i tng vi C#

Nm 2008

{
x=2;
}
public A(int x)
{
this.x=x;
}
}
class B:A
{
private int y;
public B():base()
{
y=3;
}
public B(int x,int y):base(x)
{
this.y=y;
}
public int tong()
{
return x + y;
}
}
class teater
{
static void Main(string[] args)
{
B h = new B(2,3);
Console.WriteLine("Gia tri cua tong:{0}", h.tong());
Console.ReadLine();
}
}
Tr li 5: Chng trnh trn khi bin dch c 1 li .A.x is
inaccessible due to its protection level.
Ti liu hng dn thc hnh Mn LTHDT vi C#

178

Bi tp lp trnh hng i tng vi C#

Nm 2008

Cu lnh gy ra li l: return x + y;
Nguyn nhn gy ra li: Lp B k tha thuc tinh x ca lp A. M
ta thy thuc tinh x ca lp A l private nn n ch c s dng
trong lp v khng cho php lp khc k tha.
Cch sa: Lp B mun k tha thuc tinh x ca lp A th trong lp
A ta xy dng thuc tinh x l protected.
Kt qu chng trnh: Gi tr ca tng=5
D.

CU HOI T TRA LI
Cu 1: Theo bn phng thc a hnh v phng thc tru tng :
a. Cng l mt phng thc o.
b. L phng thc o c ngha s dng ging nhau nhng
cch xy
dng
hai phng thc li khc nhau.
c. Hai phng thc ny thc cht l mt phng thc
Cu 2: Khi khai bo phng thc trong lp k tha m c tn trng
vi tn ca phng thc trong lp c s th:
a. Phi s dng t kho new che giu phng thc.
b. Khng cn thit phi s dng t kho new
c. Thay i bng cch khai bo tham s s dng ca phng
thc.
Cu 3: Mt phng thc o trong lp c s c nht thit phi
c ph quyt trong lp dn xut hay khng?
Cu 4: Lp tru tng c cn thit phi xy dng hay khng? Hy
cho mt v d v mt lp tru tng cho mt s lp.
Cu 5: Lp c lp l g? C th khai bo protected cho cc
thnh vin ca n c khng?
Cu 6: Lp Object cung cp nhng phng thc no m cc lp
khc thng xuyn k tha s dng.
Cu 7: Th no l boxing v unboxing? Hy cho bit hai vi d v
qu trnh ny?
Cu 8: nh ngha no sau y nh ngha r lp tru tng hp l

Ti liu hng dn thc hnh Mn LTHDT vi C#

179

Bi tp lp trnh hng i tng vi C#

Nm 2008

class A
{
abstract void unfinished() {}
}
class B
{
abstract void unfinished();
}
abstract class C
{
abstract void unfinished();
}
public class abstract D
{
abstract void unfinished();
}
Cu 9: Chng trnh sau y c li, hy sa li bin dch v chy
chng trnh.Lnh no gy ra li v nguyn nhn gy li.
using System;
abstract public class Dongvat
{
protected string name;
public abstract void Who();
public Dongvat(string name)
{
this.name=name ;
}
}
class cho:Dongvat
{
private string color;
public cho(string name,string color):base(name)
{
Ti liu hng dn thc hnh Mn LTHDT vi C#

180

Bi tp lp trnh hng i tng vi C#

Nm 2008

this.color=color ;}
{
Console.WriteLine ("Toi la con cho {0} mau {1}",name
,color );
}
}
class meo:Dongvat
{
private int trongluong;
public meo(string name,int trongluong):base(name)
{
this.trongluong=trongluong ;
}
public override void Who()
{
Console.WriteLine ("Toi la con
meo{0}nang{1}",name,trongluong);
}
}
class tester
{
static void Main(string[] args)
{
Dongvat[] ds = new Dongvat[3];
ds[0] = new cho("John", "vang");
ds[1] = new meo("Muop", 2);
ds[2] = new Dongvat("Noname");
for (int i = 0; i < 3; i++)
{
ds[i].Who();
}
Console.ReadLine();
}
}
}
Ti liu hng dn thc hnh Mn LTHDT vi C#

181

Bi tp lp trnh hng i tng vi C#

Nm 2008

Cu 10: Phn bit mc ich s dng ca cc t kho sau: new,


virtual, override.
E.

BI TP T GIAI:
Bi 1
Xy dng lp Stack vi cc thao tc cn thit. T hy dn
xut t lp Stack i mt s nguyn dng n sang h m 16.
Hng dn
Bi ton gm c 2 i tng: Stack v i s
Cc thuc tinh v phng thc ca lp Stack
class Stack
//Lp c s
{
private int top;
int [] s;
public stack()
public Stack(int n)
public bool full()
// Kim tra Stack y
public bool empty() // Kim tra Stack trng
public void push(int x)
public void pop()
}
class Doiso
//Lp dn xut
{
private int a,n;
//a l h cn i, n l s cn i
public void nhap()
public void doi()
public void hien()
}
Lu : Bi ton ny yu cu ch cho php nhp h cn i l 16.
Cn li cc gi tr khc khng cho php nhp. Vy bn phi khng
ch cc gi tr ca h s a sao cho tho mn bi.
Bi 2 :
Ti liu hng dn thc hnh Mn LTHDT vi C#

182

Bi tp lp trnh hng i tng vi C#

Nm 2008

Xy dng lp hnh trn vi cc phng thc cn thit.Sau


k tha tinh th tich hnh cu.
Hng dn
Bi ton gm hai i tng class hinhtron, class hinhcau
class hinhtron
{
private float r;
public hinhtron()
public hinhtron(float x)
public void nhap()
public void hien()
public float dientich()
}
class hinhcau
{
public float thetich()
}
Lu : Cng thc tinh th tich hnh cu V=(4**r3)/3
Bi 3:
Vit chng trnh qun li nhn s v tinh lng cho nhn vin
trong cng ty.
1.Qun li thng tin nhn vin (H tn, ngy sinh, a ch)
2. Tinh lng cho nhn vin. Bit trong cng ty c ba loi nhn
vin v cch tinh lng nh sau:
Nhn vin sn xut: s sn phm*20 000
Nhn vin cng nht: s ngy cng*50 000
Nhn vin qun li : h s lng * lng c bn.
Hng dn
Bi ton c chia thnh 5 i tng: Class nhanvien, Class
NVSX, Class NVCN, Class NVQL, Class DSNV.
Cc thuc tinh v phng thc ca Class Nhanvien
+ H tn, a ch, ngy sinh
+ Nhap(), xuat(), tinhluong()
Cc thuc tinh v phng thc ca Class NVSX
+ K tha thuc tinh ca Class nhanvien
Ti liu hng dn thc hnh Mn LTHDT vi C#

183

Bi tp lp trnh hng i tng vi C#

Nm 2008

+ sosanpham
+ Phng thc Nhap(), xuat(), tinhluong().
Cc thuc tinh v phng thc ca Class NVCN
+K tha thuc tinh ca Class nhanvien
+ songaycong
+ Phng thc Nhap(), xuat(), tinhluong()
Cc thuc tinh v phng thc ca Class NVQL
+K tha thuc tinh ca Class nhanvien
+ hesoluong, luongcoban
+ Phng thc Nhap(), xuat(), tinhluong()
Cc thuc tinh v phng thc ca Class DSNV
+ soluongnv, Nhan vien*[] ds
+ Phng thc: Nhap ds(), xuat ds(), xuatluong()
Lu : Bi ton ny cc lp u c phng thc tinh lng, xong
mi lp c cch tinh lng l khc nhau. Do vy ta nn xy dng
phng thc tinh lng lp c s (Class nhanvien) l phng
thc o, sau cc lp dn xut ta k tha li bng cch ghi
phng thc ..
Bi 4:
Xy dng lp MaTranVuong bng cch k tha t lp
MaTran c xy dng v b xung thm cc phng thc sau:
- getDeterminant tr v nh thc ca ma trn.
- duongCheoChinh tinh tng cc phn t trn ng cho
chnh
- duongCheoPhu tinh tng cc phn t trn ng cho
ph
- duongCheoChinhK tinh tng cc phn t trn ng
cho chinh th k
- duongCheoPhuK tinh tng cc phn t trn ng cho
ph th k
Bi 5:
a) Xy dng lp tru tng Hinh nh sau:
abstract class Hinh
{
abstract public float getArea();
Ti liu hng dn thc hnh Mn LTHDT vi C#

184

Bi tp lp trnh hng i tng vi C#

Nm 2008

}
b) Xy dng lp HinhVuong, HinhTron, HinhTamGiac,
HinhBinhHanh, HinhThoi bng cch k t lp Hinh v ghi
phng thc getArea tinh din tich ca cc hnh tng ng.
Hng dn
Bi ton gm c 6 i tng: class Hinh, class HinhVuong,
class HinhTron, class HinhBinhHanh, class Hinhthoi
Cc thuc tinh v phng thc ca cc lp:
abstract public class Hinh
{
abstract public float getArea();
}
class Hinhvuong:Hinh
{
float canh;
public Hinhvuong()
public Hinhvuong(foat a)
public override float getArea()
public void nhap()
public void hien()
}
class Hinhtron:Hinh
{
private float r;
public Hinhtron()
public Hinhtron(float r)
public override float getArea ()
}
class Hinhtamgiac:Hinh
{
private float cao,day
public Hinhtamgiac()
public Hinhtamgiac(float cao, float day)
public override float getArea()
}
Ti liu hng dn thc hnh Mn LTHDT vi C#

185

Bi tp lp trnh hng i tng vi C#

Nm 2008

class Hinhbinhhanh:Hinh
{
private float a,b // a,b l 2 ng cho ca hnh bnh hnh
public Hinhbinhhanh()
public Hinhbinhhanh(float a, float b)
public override float getArea()
}
class HinhThoi:Hinh
{
private float a,b // a,b l 2 ng cho ca hnh thoi
public HinhThoi()
public HinhThoi(float a, float b)
public override float getArea()
}
Lu : Cc cng thc tinh din tich ca cc hnh
Tamgiac=1/2(day*cao)
Hinhbinhhanh=a*b
// a,b l 2 ng cho
Hinhthoi=1/2(a*b)
Bi 6:
Xy dng cc lp sau:
+ Lp NGI gm:
- Cc thuc tinh
Char hoten;
int ns;
- Cc phng thc
Hai hm khi to,Phng thc in()
+ Lp MNHC gm:
- Cc thuc tinh:
Char mon; // Tn mn hc.
int st; // s tit
- Cc phng thc
Hai hm khi to,Phng thc in()
+Lp GIAOVIN
- Cc thuc tinh
K tha t lp ngi
Ti liu hng dn thc hnh Mn LTHDT vi C#

186

Bi tp lp trnh hng i tng vi C#

Nm 2008

Thm mt s thuc tinh


Char bomon ; // B mn cng tc
MNHC mh; // Mn hc ang dy
- Cc phng thc
Hai hm khi to ,phng thc int()
a ra thng tin v gio vin (h tn, nm sinh, b mn,
mn dy,s tit ca mn hc ang dy ).
Gi : Trong lp GIAOVIN c th gi 2 phng thc in()
+ GIOVIN.in() // c xy dng trong lp GIOVIN
+ NGI.in()
// Tha k t lp ngi.
Bi 7.
Vit ng dng n gin phc v cho hc sinh ph thng kim
tra kin thc v hnh hc (trong khng gian R2), sau y l yu cu
v ng dng:
Cho php tinh khong cch gia hai im
Cho php tinh di ca mt on thng
Cho php kim tra s giao nhau ca hai on thng
Cho php kim tra v tri tng i ca hai ng trn
Cho php kim tra mt im nm trn, trong hay bn ngoi
ng trn.
Cho php tinh din tich, chu vi ca hnh trn.
Cho php tinh din tich, chu vi ca tam gic.
Cho php kim tra mt im nm trn, trong hay ngoi tam
gic.
Tinh din tich, chu vi, kim tra s giao nhau ca hnh ch
nht.
Tinh din tich, chu vi, kim tra s giao nhau ca hnh vung.
Bi 8
Vit chng trnh tinh gi in ca mt cn h :
Phng thc thit lp 2 tham s dung khi to gi in(=750
vnd) v s in dng.
Phng thc nhp cho tng lp
Phng thc hin cho tng lp
Sau k tha lp c s tinh tin in mi cho hp vi vic
nu s in dng qu 100 s in th gi in k t s 100 tr i l
Ti liu hng dn thc hnh Mn LTHDT vi C#

187

Bi tp lp trnh hng i tng vi C#

Nm 2008

1000 vnd. Cn nu s in s dng ln hn 50 v nh hn 100 th


gi in l 800, S din s dng nh hn 50 th gi in l 750.

Ti liu hng dn thc hnh Mn LTHDT vi C#

188

Bi tp lp trnh hng i tng vi C#

Nm 2008

CHNG IV
GIAO DIN
Mc ch: Sau khi nghin cu chng ny ngi hc nm c
cc ni dung sau:
Hiu th no l mt giao din.
Cch thc xy dng v truy cp mt giao din
S thc thi nhiu giao din ca mt lp
S khc nhau gia giao din v lp tru tng
A. TM TT L THUYT
1. Khi nim v giao din
Giao din l tp cc hm khai bo sn m khng ci t. Cc lp
thc thi giao din c nhim v ci t cc hm ny.
Mc ich ca vic ci t giao din: Cho php mt lp dn xut
c th k tha thc thi nhiu giao din. iu ny khc phc
c hn ch ca lp tru tng l mt lp dn xut ch c th thc
thi mt lp tru tng.
2. Ci t mt giao din
C php nh ngha mt giao din nh sau:
[thuc tinh] [b sung truy cp] interface <tn giao din> [: danh
sch c s]
{
<phn thn giao din>
}

Ti liu hng dn thc hnh Mn LTHDT vi C#

189

Bi tp lp trnh hng i tng vi C#

Nm 2008

Vi d: Xy dng mt giao din c tn l Hinh v giao din ny c


hai phng thc c v ghi i tng.
interface Hinh
{
void read();
void write();
}
M rng giao din:
Chng ta m rng mt giao din c bng cch thm cc
phng thc, cc thnh vin hay b sung cch lm vic cho cc
thnh vin.
Thc thi nhiu giao din:
Trong ngn ng C# cho php chng ta thc thi nhiu hn mt
giao din.
Vi d: Lp Document c th thc thi c hai giao din Istorable v
Icompressible. Ta xy dng nh sau: public class
Document:Istorable, Icompressible
3. Truy xut phng thc ca giao din
Chng ta c th truy cp nhng thnh vin ca giao din nh
th cc thnh vin ca lp.
Vi d: Lp Hnh vung thc thi giao din c tn l Hinh vi d
trn. Nh vy lp Hnh vung c th truy cp 2 thnh vin read()
v write() ca giao din Hinh.
Hinhvuong H=new Hinhvuong();
H.read();
H.write();
4. Ton t is:
Dng kim tra mt i tng xem n c h tr giao din
hay khng.
C php ca ton t is: <biu thc> is <Kiu d liu>
5. Ton t as
Ton t as kt hp ton t is v php gn bng cch u tin
kim tra hp l php gn ri sau php gn c thc hin. Nu
Ti liu hng dn thc hnh Mn LTHDT vi C#

190

Bi tp lp trnh hng i tng vi C#

Nm 2008

khng hp l th ton t as tr v gi tr Null.S dng ton t as


loi b vic x li cc ngoi l.
C php ca ton t as: <biu thc> as <Kiu d liu>
6. Thc thi ph quyt giao din
Khi thc thi mt lp chng ta c th t do nh du bt k hay
tt c cc phng thc thc thi giao din nh mt phng thc o.
Vi d: Ph quyt phng thc read() ca giao din Hinh
Public virtual void Read()
7. Thc hin giao din mt cch tng minh
Mt lp c th ci t nhiu giao din nn c th xy ra trng
hp ng v tn khi hai giao din c cng mt tn hm. gii
quyt xung t ny ta khai bo ci t mt cch tng minh hn.
Khi ta phi thm tn giao din vo trc tn phng thc.
La chn cc phng thc phi by ca giao din
Ngi thit k c thm thun li khi mt giao din c thi
cng trong sut qu trnh y s thi cng tng minh khng c
th hin phia Client.Gi s nh i tng Document thi cng
giao din Istorable nhng chng ta khng mun cc phng thc
Read() v Write() ca giao din istorable c xem nh l Public
trong lp Document. Chng ta c th s dng phn thc hin tng
minh chc rng chng khng sn c trong sut qu trnh phn
b.
Thnh vin n
Ngn ng C# c mt kh nng mi l, cc thnh vin ca giao
din c th c n i.
B.BI TP MU
I.

S dng giao din

Cc bn c th tham kho chng trnh sau hiu r v giao din


v cch s dng n.
using System;
// khai bo giao din interface IStorable
interface IStorable

Ti liu hng dn thc hnh Mn LTHDT vi C#

191

Bi tp lp trnh hng i tng vi C#

Nm 2008

{
void Read();
void Write(object obj);
int Status
{
get;
set;
}
}
// thc thi phng thc Write public void Write( object o)
public void Write( object o)
{
Console.WriteLine("Impleting the Write Method for
IStorable");
}
// to mt lp thc thi giao din IStorable public class Document
: IStorable
public class Document : IStorable
{
public Document( string s)
{
Console.WriteLine("Creating document with: {0}", s);
}
// thc thi phng thc Read()
public void Read()
{
Console.WriteLine("Implement the Read Method for
IStorable");
}
// thc thi phng thc Write public void Write( object o)
public void Write( object o)
{
Console.WriteLine("Impleting the Write Method for
IStorable");
}
Ti liu hng dn thc hnh Mn LTHDT vi C#

192

Bi tp lp trnh hng i tng vi C#

Nm 2008

// thc thi thuc tnh public int Status


public int Status
{
get
{
return status;
}
set
{
status = value;
}
}
private int status = 0;
}
public class Tester
{
static void Main()
{
// truy cp phng thc trong i tng Document
Document doc = new Document("Test Document");
doc.Status = -1;
doc.Read();
Console.WriteLine("Document Status: {0}", doc.Status);
// gn cho mt giao din v s dng giao din
IStorable isDoc = (IStorable)doc;
isDoc.Status = 0;
isDoc.Read();
Console.WriteLine("IStorable Status: {0}", isDoc.Status);
Console.ReadKey();
}
}
Kt qu sau khi chy chng trnh:
Creating document with: Test Document
Implement the Read Method for Istorable
Document
Status
: -1Mn LTHDT vi C#
Ti liu hng
dn thc
hnh
Implement the Read Method for Istorable
Istorable Status : -1

193

Bi tp lp trnh hng i tng vi C#

Nm 2008

II. M rng mt giao din v s thc thi nhiu giao din ca


mt lp
Bi 1.
Xy dng giao din nhn vin bao gm hai phng thc: Nhp
v hin th thng tin ca cn b. Ta c th xy dng thm mt giao
din nhn vin mi m rng t giao din nhn vin. Giao din nhn
vin mi ny xy phng thc cch tinh lng cho mi loi nhn
vin.
Hy xy dng lp nhn vin sn xut thc thi hai giao din trn.
Bit cch tinh lng nhn vin nh sau:
Lng=Hsl*Lng c bn
a, Hng dn:
chng 3 chng ta bit n s k tha ca mt lp dn
xut, xong n ch k tha c t mt lp c s. Nh bi ton ny
chng ta khng th xy dng Class Nhanviensx k tha t hai lp
l Nhanvien v Nhanvienmoi. Mc ich chng ta mun lp Class
Nhanviensx k tha v thc thi c hai Nhanvien v Nhanvienmoi,
do chng ta phi xy chng l hai giao din.
Bi ton bao gm c hai giao din v mt lp thc thi giao
din: Interface Nhn vin, interface Nhn vin mi, Class Nhn
vin sx
Cc phng thc v thuc tinh
interface Nhanvien
{
void nhap();
void hien();
}

Ti liu hng dn thc hnh Mn LTHDT vi C#

194

Bi tp lp trnh hng i tng vi C#

Nm 2008

interface Nhanvienmoi:Nhanvien // M rng giao din Nhn


vin
{
double luong();
}
class Nhanviensx:Nhanvien,Nhanvienmoi // Thc thi hai giao din
{
private string ten;
private static int lcb;
private double hsl;
public Nhanviensx()
public virtual void nhap()
public virtual void hien()
public virtual double luong()
}
b, Bi gii mu:
using System;
interface Nhanvien
{
void nhap();
void hien();
}
interface Nhanvienmoi:Nhanvien
{
double luong();
}
class Nhanviensx:Nhanvien,Nhanvienmoi
{
private string ten;
private static int lcb;
private double hsl;
public Nhanviensx()
{
hsl = 2.5;
lcb=450;
Ti liu hng dn thc hnh Mn LTHDT vi C#

195

Bi tp lp trnh hng i tng vi C#

Nm 2008

}
public Nhanviensx(int hsl)
{
this.hsl=hsl ;
}
public virtual void nhap()
{
Console.Write("Nhap vao ho ten:");
ten=Console.ReadLine();
Console.Write("Nhap vao he so luong:");
hsl=float.Parse(Console.ReadLine());
}
public virtual void hien()
{
Console.WriteLine("Thong tin can hien thi");
Console.WriteLine("Ho ten nhan vien:{0}",ten );
Console.WriteLine("He so luong:{0}",hsl );
}
public virtual double luong()
{
return hsl*lcb ;
}
}
class tester
{
static void Main(string[] args)
{
Nhanviensx A = new Nhanviensx();
A.nhap();
A.hien();
Console.WriteLine("Luong cua nhan vien nay la:{0}",
A.luong());
Console.ReadLine();
}
}
Ti liu hng dn thc hnh Mn LTHDT vi C#

196

Bi tp lp trnh hng i tng vi C#

Nm 2008

Kt qu sau khi chy chng trnh:


Nhp vo h tn: Nguyn Vn A
Nhp vo h s lng: 5
Thng tin cn hin th
H tn nhn vin: Nguyn Vn A
H s lng: 5
Lng ca nhn vin ny l: 2250

III. Xy dng lp thc thi ph quyt mt giao din


Bi 1
a) Xy dng lp DaySo m t mt dy s, gm cc phng
thc sau:
- Phng thc nhap dng nhp dy s t bn phim
- Phng thc print dng in dy s ra mn hnh
- Hm to DaySo(int n) dng khi to mt mng gm n
phn t
b) Xy dng giao din Sort nh sau:
interface Sort
{
public void Sort();
}
c) Xy dng cc lp QuickSort, SelectionSort, InsertSort
bng cch k tha t lp DaySo v trin khai giao din Sort thc
hip vic sp xp: ni bt, chn trc tip, chn trc tip
a, Hng dn:
Gi s bn mun thit k phng thc sp xp chung sp
xp cc phn t. Phn t y c th l mng cc i tng nh
dy s, ma trn, lp hoc vin. Cc i tng ny c th c sp
xp bng cc thut ton khc nhau. Vy bn cn xc nh mt
phng thc sp xp chung nhm thc hin sp xp cc i tng.
Cch thc sp xp cc i tng nh th no do tng thut ton t
quyt nh.Ta thy bi ton va yu cu k tha va thc thi giao

Ti liu hng dn thc hnh Mn LTHDT vi C#

197

Bi tp lp trnh hng i tng vi C#

Nm 2008

din. y chinh l tin b ca s dng giao din so vi lp tru


tng.
Cc i tng ca bi ton bn c c th xc nh thy r ngay
phn bi.
Cc thuc tinh v cc phng thc
class dayso
{
public int[] a;
protected int n;
public dayso()
public dayso(int n)
public void nhap()
public void print()
}
interface sort
{
void sapxep();
}
class quicksort:dayso, sort
{
public void sapxep()
}
class selectsort:dayso,sort
{
public void sapxep()
}
class inserttionsort:dayso,sort
{
public void sapxep()
}
Lu : Lp dayso c 2 thuc tinh l n v mng a hai thuc tinh ny
n c cc lp dn xut k tha v gi ra thc thi. Do vy hai
thuc tinh ny phi c khai bo l Public.
b, Bi gii mu:
using System;
Ti liu hng dn thc hnh Mn LTHDT vi C#

198

Bi tp lp trnh hng i tng vi C#

Nm 2008

class dayso
{
public int[] a;
protected int n;
public dayso()
{
a = new int[5];
}
public dayso(int n)
{
a = new int[n];
}
public void nhap()
{
Console.Write("Nhap vao so phan tu cua day so:");
n = int.Parse(Console.ReadLine());
Console.WriteLine("Nhap vao thong tin cua day so:");
for (int i = 0; i < n; i++)
{
Console.Write("a[{0}]=", i);
a[i] = int.Parse(Console.ReadLine());
}
}
public void print()
{
for (int i = 0; i < n; i++)
Console.Write("{0}\t",a[i]);
Console.WriteLine();
}
}
interface sort
{
void sapxep();
}
class quicksort:dayso,sort
Ti liu hng dn thc hnh Mn LTHDT vi C#

199

Bi tp lp trnh hng i tng vi C#

Nm 2008

{
public void sapxep()
{
int i, j,x,tmp;
x=a[(n)/2];
i = n-1; j = n;
do
{
while (a[i] < x) i++;
while (a[j] > x) j--;
if (i <= j)
{
tmp = a[i];
a[i] = a[j];
a[j] = tmp;
i++; j--;
}
} while (i < j);
}
}
class selectsort:dayso,sort
{
public void sapxep()
{
int min,tmp,j;
for (int i = 0; i < n - 1; i++)
{
min=i;
for (j = i + 1; j < n; j++)
if (a[j] < a[min])
min = j;
tmp = a[min];
a[min] = a[i];
a[i] = tmp;
}
Ti liu hng dn thc hnh Mn LTHDT vi C#

200

Bi tp lp trnh hng i tng vi C#

Nm 2008

}
}
class inserttionsort:dayso,sort
{
public void sapxep()
{
int i,pos,k;
for (i = 0; i < n; i++)
{
k = a[i]; pos = i-1;
while ( pos >=0 && a[pos] > k)
{
a[pos + 1] = a[pos];
pos--;
}
a[pos + 1] = k;
}
}
}
class Tester
{
static void Main()
{
//sort a = new quicksort();
//selectsort a = new selectsort();
inserttionsort a = new inserttionsort();
a.nhap(); Console.Clear();
Console.WriteLine("Day truoc khi sap xep :");
a.print();
Console.WriteLine("Day sau khi sap xep :");
a.sapxep();
a.print();
Console.ReadKey();
}
}
Ti liu hng dn thc hnh Mn LTHDT vi C#

201

Bi tp lp trnh hng i tng vi C#

Nm 2008

Kt qu sau khi chy chng trnh:


Dy trc khi sp xp:
2
5
3
2
Dy sau khi sp xp:
2
2
3
5

Lu : Ta c th ph quyt tt c cc phng thc ca giao din


trong lp thc thi cng c th ch ph quyt mt vi hoc khng
ph quyt mt phng thc no.
IV. Xy dng lp thc thi giao din mt cch tng minh
Vi d: Xy dng lp Document, thc thi hai giao din Italk,
Istorable . Giao din Italk c phng thc Read() v Italk. Giao
din Istorable c phng thc Read() v Write().
a, Hng dn:
Bi ton gm c :1 lp Class Document, v 2 giao din Italk,
Istorable.
Ta thy lp Document thc thi hai giao din, v c hai giao din
trn u c phng thc Read (). Vy lm th no my tinh
cng nh bn c c th bit rng lp Document thi hnh phng
thc Read() l ca giao din no. gii quyt vn ny bng
cch thc hin giao din mt cch tng minh.
Xy dng cc giao din v lp
interface Istorable
{
void Read();
void Write();
}
interface Italk
{
void Read();
void Italk();
Ti liu hng dn thc hnh Mn LTHDT vi C#

202

Bi tp lp trnh hng i tng vi C#

Nm 2008

}
class Document:Italk,
Istorable
{
public Document(string s)
void Istorable.Read() // Ci t phng thc Read() ca
Istorable
public void Write()
puclic void Italk()
void Italk.Read() // Ci t phng thc Read() ca ITalk
}
Lu : Chng ta phi p kiu thnh giao din gi Phng thc
Read() ca Istorable v Italk. Thc thi giao din mt cch tng
minh cho phng thc Read() bng cch gi c tn ca giao din.
b, Bi gii mu:
using System;
namespace bt
{
interface Istorable
{
void Read();
void Write();
}
interface ITalk
{
void ITalk();
void Read();
}
class Document:Istorable,ITalk
{
public Document(string s)
{
Console.WriteLine("Tao van ban {0}",s);
}
void Istorable.Read()
{
Ti liu hng dn thc hnh Mn LTHDT vi C#

203

Bi tp lp trnh hng i tng vi C#

Nm 2008

Console.WriteLine("Thuc thi Istorable.Read()");


}
public void Write()
{
Console.WriteLine("Thuc thi Istorable.Write()");
}
void ITalk.Read()
{
Console.WriteLine("Thuc thi ITalk.Read()");
}
public void ITalk()
{
Console.WriteLine("Thuc thi ITalk.ITalk");
}
}
class tester
{
static void Main(string[] args)
{
Document thedoc = new Document("Bai tap C#");
Istorable isdoc = thedoc as Istorable;
if (isdoc != null)
{
isdoc.Read();
}
ITalk itdoc = thedoc as ITalk;
if (itdoc != null)
{
itdoc.Read();
}
thedoc.Write();
thedoc.ITalk();
Console.ReadLine();
}
}
Ti liu hng dn thc hnh Mn LTHDT vi C#

204

Bi tp lp trnh hng i tng vi C#

Nm 2008

}
Kt qu sau khi chy chng trnh:
To vn bn Bi tp C#
Thc thi Istorable.Read()
Thc thi Italk.Read()
Thc thi Istorable.Write()
Thc thi Italk.ITalk

C. CU HOI V TRA LI
Cu 1: So snh gia lp v giao din?
Tr li: Giao din khc vi lp mt s im sau: giao din
khng cung cp bt c s thc thi m ngun no c. iu ny s
c thc hin ti cc lp thc thi giao din. Mt giao din a
ra ch ni rng c cung cp mt s s xc nhn hng dn cho
nhng iu g xy ra v khng i vo chi tit. Mt iu khc
na l tt c cc thnh vin ca giao din c gi s l public
ngm nh. Nu chng ta c thay i thuc tnh truy cp ca
thnh vin trong giao din th s nhn c li.
Giao din ch cha nhng phng thc, thuc tnh, s kin, ch
mc. V khng cha d liu thnh vin, b khi dng, v b hy.
Chng cng khng cha bt c thnh vin static no c.
Cu 2: S khc nhau gia giao din v lp tru tng?
Tr li: S khc nhau c bn l s k tha. Mt lp c th k
tha nhiu giao din cng mt lc, nhng khng th k tha nhiu
hn mt lp tru tng.
Cu 3: Cc lp thc thi giao din s phi lm g?
Tr li: Cc lp thc thi giao din phi cung cp cc phn thc thi
chi tit cho cc phng thc, thuc tinh, ch mc, s kin c
khai bo trong giao din.
Cu 4: C bao nhiu cch gi mt phng thc c khai bo
trong giao din?
Ti liu hng dn thc hnh Mn LTHDT vi C#

205

Bi tp lp trnh hng i tng vi C#

Nm 2008

Tr li: C 4 cch gi phng thc c khai bo trong giao din:


- Thng qua lp c s tham chiu n i tng ca lp dn xut
- Thng qua mt giao din to t lp c s tham chiu n i
tng dn xut
- Thng qua mt i tng dn xut
- Thng qua giao din to t i tng dn xut
Cu 5: Cc thnh vin ca giao din c th c nhng thuc tnh
truy cp no?
Tr li: Mc nh cc thnh vin ca giao din l public. V mc
tiu ca giao din l xy dng cho cc lp khc s dng. Nu
chng ta thay i thuc tnh ny nh l internal, protected hay
private th s gy ra li.
Cu 6: Chng ta c th to th hin ca giao din mt cch trc
tip c khng?
Tr li: Khng th to th hin ca giao din trc tip bng khai
bo new c. Chng ta ch c th to th hin giao din thng qua
mt php gn vi i tng thc thi giao din.
D. CU HOI V BI TP T LM
Cu hi:
Cu 1: Ton t is c dng lm g trong giao din?
Cu 2: Ton t as c li hn ton t is v mt no khi c s
dng lin quan n giao din ?
Cu 3: Giao din l kiu d liu tham chiu hay kiu gi tr?
Cu 4: Khi thc thi giao din vi cu trc. Th truy cp cc
thnh vin ca giao din thng qua i tng hay thng qua tham
chiu giao din l tt nht?
Cu 5: S giao din c th c k tha cho mt lp?
Cu 6: Vic thc thi giao din tng minh l thc thi nh th
no? Trong trng hp no th cn thc hin tng minh?
Bi tp:
Bi 1. Trong giao din sau sai u?
public interface House
Ti liu hng dn thc hnh Mn LTHDT vi C#

206

Bi tp lp trnh hng i tng vi C#

Nm 2008

{
@Deprecated
void open();
void openFrontDoor();
void openBackDoor();
}
Bi 2. Hon thnh chng trnh sau:
interface Closable
{
void close();
}
class File implements Closable
{
@Override
public void close()
{
//... close this file...
}
}
iu g s xy ra? Bn c th gii thich ti sao?
Bi 3: Hy vit mt giao din khai bo mt thuc tnh ID cha
chui gi tr. Vit mt lpEmployee thc thi giao din .
Bi 4: on m ngun sau y c li hy s li v hy cho bit ti
sao c li ny. Sau khi sa li hy vit mt lp Circle thc thi giao
din ny?
public interface osi
{
long with;
long height;
double area();
int side();
}
Bi 5: Chng trnh sau y c li hy sa li, bin dch v chy
li chng trnh. Hy gii thich ti sao chng trnh li li.
Ti liu hng dn thc hnh Mn LTHDT vi C#

207

Bi tp lp trnh hng i tng vi C#

Nm 2008

using system;
interface Ipoint
{
int x
{
get;
set;
}
int y
{
get;
set;
}
}
class MyPoint
{
private int myX;
private int myY;
public MyPoint(int x,int y)
{
myX=x;
myY=y;
}
public int x
{
get { return myX ;}
set { myX=value ;}
}
public int y
{
get
{return myY;}
set
{myY=value ;}
}
Ti liu hng dn thc hnh Mn LTHDT vi C#

208

Bi tp lp trnh hng i tng vi C#

Nm 2008

}
class tester
{
private static void printpoint(Ipoint p)
{
Console.WriteLine("x={0},y={1}", p.x, p.y);
}
static void Main()
{
MyPoint p = new MyPoint(2, 3);
Console.Write("My point ");
printpoint(p);
Ipoint p2 = new Ipoint();
printpoint(p2);
Console.ReadLine();
}
}
Bi 6: Trong cc cch khai bo sau cch khai bo giao din no l
ng. Cch khai bo no sai th hy sa li cho ng.
interface A
{
void print () {};
}
interface B
{
void print();
}
abstract interface C
{
print();
}
abstract interface D
{
abstract void print() {}
Ti liu hng dn thc hnh Mn LTHDT vi C#

209

Bi tp lp trnh hng i tng vi C#

Nm 2008

}
Bi 7: Xy dng mt giao din IDisplay c khai bo thuc tnh
Name kiu chui. Hy vit hai lp Dog v Cat thc thi giao din
IDisplay, cho bit thuc tnh Name l tn ca i tng.

Ti liu hng dn thc hnh Mn LTHDT vi C#

210

You might also like