Upload
nguyenlegiaphung
View
225
Download
5
Embed Size (px)
Citation preview
VIC KHI TO I TNG, HM BN V
LP BN
ThS. Trn Anh Dng
Ni dung
i tng l thnh phn ca lp
i tng l thnh phn ca mng
i tng c cp pht ng
Hm bn
Lp bn
Cc nguyn tc xy dng lp
14/09/2014 Lp trnh hng i tng 2
i tng l thnh phn ca lp
i tng c th l thnh phn ca i tng
khc, khi mt i tng thuc lp ln c to
ra, cc thnh phn ca n cng c to ra.
14/09/2014 Lp trnh hng i tng 3
i tng l thnh phn ca lp
Phng thc thit lp (nu c) s c t ng
gi cho cc i tng thnh phn.
Khi i tng kt hp b hy i tng thnh
phn ca n cng b hy, ngha l phng thc
hy b s c gi cho cc i tng thnh
phn, sau khi phng thc hy b ca i tng
kt hp c gi.
14/09/2014 Lp trnh hng i tng 4
i tng l thnh phn ca lp
Nu i tng thnh phn phi cung cp tham
s khi thit lp th i tng kt hp (i tng
ln) phi c phng thc thit lp cung cp
tham s thit lp cho cc i tng thnh phn.
C php khi ng i tng thnh phn l
dng du hai chm (:) theo sau bi tn thnh
phn v tham s khi ng.
14/09/2014 Lp trnh hng i tng 5
V d
14/09/2014 Lp trnh hng i tng 6
class TamGiac{
Diem A, B, C;
public:
TamGiac(double xA, double yA, double xB, double yB,
double xC, double yC) : A(xA,yA), B(xB,yB),C(xC,yC){
}
void Ve();
// ...
};
TamGiac t(100,100,200,400,300,300);
{
V d
14/09/2014 Lp trnh hng i tng 7
class TamGiac{
Diem A,B,C;
int loai;
public:
TamGiac(double xA, double yA, double xB, double yB,
double xC, double yC, int l): A(xA,yA), B(xB,yB),
C(xC,yC), loai(l) {
}
void Ve();
// ...
};
TamGiac t (100, 100, 200, 400, 300, 300, 1);
C php du hai chm cng c dng cho i tng thnh phn thuc kiu c s
?
V d
14/09/2014 Lp trnh hng i tng 8
class Diem{
double x,y;
public:
Diem(double xx = 0, double yy = 0) : x(xx), y(yy){
}
void Set(double xx, double yy){
x = xx;
y = yy;
}
};
?
i tng l thnh phn ca mng
14/09/2014 Lp trnh hng i tng 9
i tng l thnh phn ca mng
Khi mt mng c to ra cc phn t ca n
cng c to ra phng thc thit lp s
c gi cho tng phn t.
V khng th cung cp tham s khi ng cho tt
c cc phn t ca mng khi khai bo mng,
mi i tng trong mng phi c kh nng t
khi ng, ngha l c th thit lp khng cn
tham s.
14/09/2014 Lp trnh hng i tng 10
i tng l thnh phn ca mng
i tng c kh nng t khi ng trong
nhng trng hp no?
1. Lp khng c phng thc thit lp
2. Lp c phng thc thit lp khng
tham s
3. Lp c phng thc thit lp m mi
tham s u c gi tr mc nhin
14/09/2014 Lp trnh hng i tng 11
i tng l thnh phn ca mng
14/09/2014 Lp trnh hng i tng 12
class Diem
{
double x,y;
public:
Diem(double xx, double yy) : x(xx), y(yy) { }
void Set(double xx, double yy) {
x = xx, y = yy;
}
// ...
};
i tng l thnh phn ca mng
14/09/2014 Lp trnh hng i tng 13
class String {
char *p;
public:
String(char *s) { p = strdup(s); }
String(const String &s) { p = strdup(s.p); }
~String() {
cout
i tng l thnh phn ca mng
14/09/2014 Lp trnh hng i tng 14
class SinhVien{
String MaSo;
String HoTen;
int NamSinh;
public:
SinhVien(char *ht, char *ms, int ns) : HoTen(ht),
MaSo(ms), NamSinh(ns){ }
};
String arrs[3];
Diem arrd[5];
SinhVien arrsv[7]; ?
Dng phng thc thit lp vi tham s c gi tr mc nhin
14/09/2014 Lp trnh hng i tng 15
class Diem
{
double x,y;
public:
Diem(double xx = 0, double yy = 0) : x(xx), y(yy) { }
void Set(double xx, double yy) {
x = xx, y = yy;
}
// ...
};
Dng phng thc thit lp vi tham s c gi tr mc nhin
14/09/2014 Lp trnh hng i tng 16
class String{
char *p;
public:
String(char *s = "") { p = strdup(s); }
String(const String &s) { p = strdup(s.p); }
~String() {
cout
Dng phng thc thit lp vi tham s c gi tr mc nhin
14/09/2014 Lp trnh hng i tng 17
class SinhVien{
String MaSo, HoTen;
int NamSinh;
public:
SinhVien(char *ht=Nguyen Van A, char *ms=19920014, int ns = 1982) : HoTen(ht), MaSo(ms), NamSinh(ns) { }
};
String as[3];
Diem ad[5];
SinhVien asv[7];
?
Dng phng thc thit lp khng tham s
14/09/2014 Lp trnh hng i tng 18
class Diem
{
double x,y;
public:
Diem(double xx, double yy) : x(xx), y(yy)
{ }
Diem() : x(0), y(0)
{ }
// ...
};
Dng phng thc thit lp khng tham s
14/09/2014 Lp trnh hng i tng 19
class String{
char *p;
public:
String(char *s) { p = strdup(s); }
String() { p = strdup(); }
~String() {
cout
Dng phng thc thit lp khng tham s
14/09/2014 Lp trnh hng i tng 20
class SinhVien {
String MaSo, HoTen;
int NamSinh;
public:
SinhVien(char *ht, char *ms, int ns) : HoTen(ht),
MaSo(ms), NamSinh(ns) { }
SinhVien() : HoTen(Nguyen Van A), MaSo(19920014), NamSinh(1982) { }
};
String as[3];
Diem ad[5];
SinhVien asv[7];
?
i tng c cp pht ng
i tng c cp pht ng l cc i tng
c to ra bng php ton new v b hy i
bng php ton delete
Php ton new cp i tng trong vng heap v
gi phng thc thit lp cho i tng c
cp.
14/09/2014 Lp trnh hng i tng 21
i tng c cp pht ng
14/09/2014 Lp trnh hng i tng 22
class String {
char *p;
public:
String( char *s ) { p = strdup(s); }
String( const String &s ) { p = strdup(s.p); }
~String() { delete [] p; }
//...
};
class Diem {
double x,y;
public:
Diem(double xx, double yy) : x(xx), y(yy) { }
//...
};
Cp pht v hy mt i tng
14/09/2014 Lp trnh hng i tng 23
int *pi = new int;
int *pj = new int(15);
Diem *pd = new Diem(20,40);
String *pa = new String("Nguyen Van A");
//...
delete pa;
delete pd;
delete pj;
delete pi;
Cp pht v hy nhiu i tng
int *pai = new int[10];
Diem *pad = new Diem[5];
String *pas = new String[5];
14/09/2014 Lp trnh hng i tng 24
?
Sai
Trong trng hp cp pht nhiu i tng, ta
khng th cung cp tham s cho tng phn t
c cp pht.
Cp v hy nhiu i tng
Thng bo li cho on chng trnh trn nh
sau:
Cannot find default constructor to initialize array
element of type 'Diem'
Cannot find default constructor to initialize array
element of type String
Khc phc li?
14/09/2014 Lp trnh hng i tng 25
Li trn c khc phc bng cch cung cp phng
thc thit lp i tng c kh nng t khi ng.
Cp v hy nhiu i tng
14/09/2014 Lp trnh hng i tng 26
class String{
char *p;
public:
String (char *s = "Alibaba") { p = strdup(s); }
String (const String &s) { p = strdup(s.p); }
~String () {delete [] p;}
//...
};
class Diem {
double x,y;
public:
Diem (double xx, double yy) : x(xx),y(yy){};
Diem () : x(0),y(0){};
};
Cp v hy nhiu i tng
Khi mi phn t c cp u c khi
ng vi cng gi tr.
int *pai = new int[10];
Diem *pad = new Diem[5];
//Ca 5 diem co cung toa do (0,0)
String *pas = new String[5];
//Ca 5 chuoi cung duoc khoi dong la Alibaba
14/09/2014 Lp trnh hng i tng 27
Cp v hy nhiu i tng
Vic hy nhiu i tng c thc hin bng
cch dng delete v c thm du [] trc.
delete [] pas;
delete [] pad;
delete [] pai;
C th thay ba pht biu trn bng mt pht biu
duy nht sau hay khng?
delete pas,pad,pai;
14/09/2014 Lp trnh hng i tng 28
Hm bn, lp bn
Gi s c lp Vector, lp Matrix
Cn vit hm nhn Vector vi mt Matrix
Hm nhn:
Khng th thuc lp Vector
Khng th thuc lp Matrix
Khng th t do
Gii php: Xy dng hm truy cp d liu?
14/09/2014 Lp trnh hng i tng 29
Hm bn (Friend function)
Hm bn khng thuc lp. Tuy nhin, c
quyn truy cp cc thnh vin private.
Khi nh ngha mt lp, c th khai bo
mt hay nhiu hm bn (bn ngoi lp)
u im:
Kim sot cc truy nhp cp lp khng
th p t hm bn cho lp nu iu khng
c d tr trc trong khai bo ca lp. 14/09/2014 Lp trnh hng i tng 30
Hm bn (Friend function)
Cc tnh cht ca quan h friend:
Phi c cho, khng c nhn
Lp B l bn ca lp A, lp A phi khai bo r rng
B l bn ca n
Khng i xng
Khng bc cu
14/09/2014 Lp trnh hng i tng 31
V d
14/09/2014 Lp trnh hng i tng 32
class COUNTERCLASS{
int Counter;
public:
char CounterChar;
void Init( char );
void AddOne( ){
Counter++;
}
friend int Total (int);
};
V d
14/09/2014 Lp trnh hng i tng 33
COUNTERCLASS MyCounter[26];
int Total(int NumberObjects)
{
for (int i=0, sum=0; i
Lp bn (Friend class)
Mt lp c th truy cp n cc thnh phn
c thuc tnh private ca mt lp khc.
thc hin c iu ny, chng ta c
th ly ton b mt lp lm bn (hm
friend) cho lp khc.
14/09/2014 Lp trnh hng i tng 34
V d
14/09/2014 Lp trnh hng i tng 35
class TOM{
public:
friend class JERRY; //C lp bn l JERRY
private:
int SecretTom; //B mt ca TOM
};
class JERRY{
public:
void Change(TOM T){
T.SecterTom++; //Bn nn c th thao th }
};
Giao din v chi tit ci t
Lp c hai phn tch ri
Phn giao din khai bo trong phn public ngi
s dng thy v s dng.
Chi tit ci t bao gm d liu khai bo trong phn
private ca lp v chi tit m ha cc hm thnh phn,
v hnh i vi ngi dng.
Lp ThoiDiem c th c ci t vi cc thnh
phn d liu l gi, pht, giy hoc tng s giy
tnh t 0 gi.
14/09/2014 Lp trnh hng i tng 36
Giao din v chi tit ci t
Ta c th thay i uyn chuyn chi tit ci t,
ngha l c th thay i t chc d liu ca lp,
cng nh c th thay i chi tit thc hin cc
hm thnh phn (do s thay i t chc d liu
hoc ci tin gii thut). Nhng nu bo m
khng thay i phn giao din th khng nh
hng n ngi s dng, v do khng lm
v kin trc ca h thng.
14/09/2014 Lp trnh hng i tng 37
Lp ThoiDiem Cch 1
14/09/2014 Lp trnh hng i tng 38
class ThoiDiem{
int gio, phut, giay;
static bool HopLe(int g, int p, int gy);
public:
ThoiDiem(int g = 0, int p = 0, int gy = 0) {Set(g,p,gy);}
void Set(int g, int p, int gy);
int LayGio() const {return gio; }
int LayPhut() const {return phut; }
int LayGiay() const {return giay; }
void Nhap();
void Xuat() const;
void Tang();
void Giam();
};
Lp ThoiDiem Cch 2
14/09/2014 Lp trnh hng i tng 39
class ThoiDiem{
long tsgiay;
static bool HopLe(int g, int p, int gy);
public:
ThoiDiem(int g = 0, int p = 0, int gy = 0) {Set(g,p,gy);}
void Set(int g, int p, int gy);
int LayGio() const {return tsgiay/3600;}
int LayPhut() const {return (tsgiay%3600)/60;}
int LayGiay() const {return tsgiay%60;}
void Nhap();
void Xuat() const;
void Tang();
void Giam();
};
Cc nguyn tc xy dng lp
Hnh thnh lp: Khi ta ngh n n nh mt
khi nim ring l Xy dng lp biu din khi
nim .
Lp l biu din c th ca mt khi nim v vy
tn lp lun l danh t.
Cc thuc tnh ca lp l cc thnh phn d liu
nn chng lun l danh t.
Cc hm thnh phn (cc hnh vi) l cc thao tc
ch r hot ng ca lp nn cc hm l ng t.
14/09/2014 Lp trnh hng i tng 40
Cc nguyn tc xy dng lp
14/09/2014 Lp trnh hng i tng 41
Problem
properties
Operation
(function,
method,
behavior)
Program
class XX
{ type1 prop1;
type2 prop2;
.......
type Method1(...)
{
}
.....
};
void main()
{ XX x; // object variable
x.Method(...);
}
pick
nouns
pick
verbs
Bao gi d liu v hnh vi thnh class
Cc nguyn tc xy dng lp
Cc thuc tnh c th suy din t nhng thuc
tnh khc th nn dng hm thnh phn thc
hin tnh ton.
14/09/2014 Lp trnh hng i tng 42
class TamGiac{
Diem A,B,C;
double ChuVi;
double DienTich;
public:
//...
};
class TamGiac{
Diem A,B,C;
public:
//...
double ChuVi() const;
double DienTich() const;
};
Cc nguyn tc xy dng lp
Tuy nhin, nu cc thuc tnh suy din di hi
nhiu ti nguyn hoc thi gian thc hin tnh
ton, ta nn khai bo l d liu thnh phn.
14/09/2014 Lp trnh hng i tng 43
class QuocGia{
long DanSo;
double DienTich;
double TuoiTrungBinh;
public:
double TinhTuoiTB() const;
//...
};
Cc nguyn tc xy dng lp
D liu thnh phn nn c kt hp:
14/09/2014 Lp trnh hng i tng 44
class TamGiac{
Diem A,B,C;
public:
//...
};
class HinhTron{
Diem Tam;
double BanKinh;
public:
//...
};
class TamGiac{
double xA, yA;
double xB, yB, xC, yC;
public:
//...
};
class HinhTron{
double tx, ty, BanKinh;
public:
//...
};
Cc nguyn tc xy dng lp
Trong mi trng hp, nn c phng thc thit
lp (Constructor) khi ng i tng.
Nn c phng thc thit lp c kh nng t
khi ng khng cn tham s
14/09/2014 Lp trnh hng i tng 45
Cc nguyn tc xy dng lp
Nu i tng c nhu cu cp pht ti nguyn th
phi c phng thc thit lp, copy constructor
khi ng i tng bng i tng cng
kiu v c destructor dn dp. Ngoi ra cn
c php gn (chng 5).
Nu i tng n gin khng cn ti nguyn
ring Khng cn copy constructor v destructor
14/09/2014 Lp trnh hng i tng 46
Bi tp
Vit chng trnh cho php nhp, xut, khi to
1 hc sinh. Thng tin cn quan tm v 1 hc sinh:
M hc sinh (8 k t), h tn hc sinh (30 k t),
im ton (int), im vn (int).
Danh t: Hc sinh cu trc HS
ng t:
Nhp mt hs Hm Nhap()
Xut mt hs Hm Xuat();
14/09/2014 Lp trnh hng i tng 47
Q & A