NN(cid:1245)(cid:1245)ii dung dung 1.1. LL(cid:1247)(cid:1247)p vp vàà (cid:255)(cid:255)(cid:1237)(cid:1237)ii (cid:87)(cid:1133)(cid:87)(cid:1133)(cid:1255)(cid:1255)ngng
(cid:132) (cid:264)(cid:1231)nh ngh(cid:429)a: tên l(cid:1247)p, thu(cid:1245)c tính, ph(cid:1133)(cid:1131)ng th(cid:1261)c (cid:132) Cài (cid:255)(cid:1211)t ph(cid:1133)(cid:1131)ng th(cid:1261)c (cid:132) (cid:264)(cid:1191)m b(cid:1191)o tính (cid:255)úng (cid:255)(cid:1203)n c(cid:1259)a d(cid:1267) li(cid:1227)u (cid:132) Các thành ph(cid:1195)n, ph(cid:1189)m vi truy c(cid:1201)p
P TRÌNH LL(cid:1200)(cid:1200)P TRÌNH (cid:43)(cid:1132)(cid:43)(cid:1132)(cid:1246)(cid:1246)NG (cid:264)NG (cid:264)(cid:1236)(cid:1236)I T(cid:1132)I T(cid:1132)(cid:1254)(cid:1254)NGNG CLASS & OBJECT CLASS & OBJECT
2.2. Th(cid:1133)Th(cid:1133) vivi(cid:1227)(cid:1227)nn hhóóaa 3.3. MM(cid:1245)(cid:1245)t vt víí dd(cid:1257)(cid:1257) 4.4. ThiThi(cid:1219)(cid:1219)t kt k(cid:1219)(cid:1219) ll(cid:1247)(cid:1247)pp
(cid:132) Xác (cid:255)(cid:1231)nh thành ph(cid:1195)n d(cid:1267) li(cid:1227)u (cid:132) Xác (cid:255)(cid:1231)nh thành ph(cid:1195)n x(cid:1265) lý
c ph(cid:1133)(cid:1131)ng th(cid:1261)(cid:1261)c/hc/hààm (cid:255)m (cid:255)(cid:1211)(cid:1211)c bic bi(cid:1227)(cid:1227)tt
Tr(cid:1195)n Ph(cid:1133)(cid:1247)c Tu(cid:1193)n tuantp@hcmup.edu.vn http://giaotrinh.tranphuoctuan.com
5.5. CCáác ph(cid:1133)(cid:1131)ng th (cid:132) Constructor (cid:132) Destructor
6.6. HHààm bm b(cid:1189)(cid:1189)n, ln, l(cid:1247)(cid:1247)p bp b(cid:1189)(cid:1189)nn
T.P.TU(cid:1192)N - LTH(cid:264)T 2 9/6/2009
1. L1. L(cid:1247)(cid:1247)pp vvàà (cid:255)(cid:255)(cid:1237)(cid:1237)ii (cid:87)(cid:1133)(cid:87)(cid:1133)(cid:1255)(cid:1255)ngng ((C++C++))
1. L1. L(cid:1247)(cid:1247)pp vvàà (cid:255)(cid:255)(cid:1237)(cid:1237)ii (cid:87)(cid:1133)(cid:87)(cid:1133)(cid:1255)(cid:1255)ngng ((C++C++)) (cid:132) Ví d(cid:1257):
(cid:132) (cid:47)(cid:1247)p: ki(cid:1223)u d(cid:1267) li(cid:1227)u tr(cid:1263)u t(cid:1133)(cid:1255)ng.
private protected public
class Point
class TÊNL
TÊNL(cid:1246)(cid:1246)PP
Point { int xVal, yVal;
(cid:55)(cid:1189)o ra (cid:255)(cid:1237)i t(cid:1133)(cid:1255)ng thu(cid:1245)c l(cid:1247)p Point
TÊN L(cid:1246)(cid:1246)PP TÊN L
void main() { Point pt;
public:
[: LL(cid:1246)(cid:1246)PCHAPCHA ]
(cid:264)(cid:1211)c t(cid:1191) (cid:255)(cid:1237)i (cid:87)(cid:1133)(cid:1255)ng
{ :
void SetPt (int, int); void OffsetPt (int, int);
Khai báo (cid:47)(cid:1247)p
};
(cid:39)(cid:1267) li(cid:1227)u thành viên
pt.SetPt(10,20); pt.OffsetPt(2,2); ……..
void Point
(cid:42)(cid:1233)i hàm trên (cid:255)(cid:1237)i t(cid:1133)(cid:1255)ng
DataType1 memberdata1; DataType2 memberdata2; ……………. < Quy(cid:1221)n truy xu(cid:1193)t > :
Point::SetPt (int x, int y) { xVal = x; yVal = y;
pt.xVal = 10; // (cid:264)úng hay sai?
}
(cid:55)(cid:1201)p các thao tác
Hàm thành viên
void Point
(cid:264)(cid:1231)nh ngh(cid:429)a các hàm thành viên
memberFunction1(); memberFunction2(); …………..
Point pt1, pt2, pt3; ……….
Point::OffsetPt (int x, int y) { xVal += x; yVal += y;
};
}
}
T.P.TU(cid:1192)N - LTH(cid:264)T T.P.TU(cid:1192)N - LTH(cid:264)T 3 4 9/6/2009 9/6/2009
1. L1. L(cid:1247)(cid:1247)pp vvàà (cid:255)(cid:255)(cid:1237)(cid:1237)ii (cid:87)(cid:1133)(cid:87)(cid:1133)(cid:1255)(cid:1255)ngng ((C++C++))
1. L1. L(cid:1247)(cid:1247)pp vvàà (cid:255)(cid:255)(cid:1237)(cid:1237)ii (cid:87)(cid:1133)(cid:87)(cid:1133)(cid:1255)(cid:1255)ngng
(cid:132) (cid:264)(cid:1237)i t(cid:1133)(cid:1255)ng
(cid:133) (cid:264)(cid:1189)i di(cid:1227)n cho 1 (cid:255)(cid:1237)i t(cid:1133)(cid:1255)ng th(cid:1269)c c(cid:1259)a bài toán
(cid:132) Tên l(cid:1247)p (cid:132) Các thu(cid:1245)c tính
(cid:132) (cid:47)(cid:1247)(cid:83) (cid:255)(cid:1237)i t(cid:1133)(cid:1255)ng
(cid:133) các thành ph(cid:1195)n d(cid:1267) li(cid:1227)u (cid:70)(cid:1259)a l(cid:1247)p
(cid:133) Là ki(cid:1223)u (khuôn) (cid:255)(cid:1223) (cid:87)(cid:1189)o ra (cid:255)(cid:1237)i t(cid:1133)(cid:1255)ng
(cid:132) Các ph(cid:1133)(cid:1131)ng th(cid:1261)c
(cid:133) các thao tác (hàm) tác (cid:255)(cid:1245)ng t(cid:1247)i d(cid:1267) li(cid:1227)u c(cid:1259)a
(cid:255)(cid:1237)i t(cid:1133)(cid:1255)ng
T.P.TU(cid:1192)N - LTH(cid:264)T T.P.TU(cid:1192)N - LTH(cid:264)T 6 5 9/6/2009 9/6/2009
1. L1. L(cid:1247)(cid:1247)p vp vàà (cid:255)(cid:255)(cid:1237)(cid:1237)i t(cid:1133)i t(cid:1133)(cid:1255)(cid:1255)ngng –– VVíí dd(cid:1257)(cid:1257)
void printStudent(Student s) {
cout << ”name: ” << s.name << endl; cout << ”id: ” << s.id << endl;
class Student { public:
thu(cid:1245)c tính
}
char name[30]; int id;
};
void main() {
(cid:255)(cid:1237)i t(cid:1133)(cid:1255)ng
Student s;
void main() {
...
printStudent(s);
Student s1; cin >> s1.name; cin >> s1.id;
}
}
T.P.TU(cid:1192)N - LTH(cid:264)T T.P.TU(cid:1192)N - LTH(cid:264)T 7 8 9/6/2009 9/6/2009
prototype (cid:70)(cid:1259)a ph(cid:1133)(cid:1131)ng th(cid:1261)c
1. L1. L(cid:1247)(cid:1247)p vp vàà (cid:255)(cid:255)(cid:1237)(cid:1237)i t(cid:1133)i t(cid:1133)(cid:1255)(cid:1255)ngng -- Ph(cid:1133)(cid:1131)ng
Ph(cid:1133)(cid:1131)ng thth(cid:1261)(cid:1261)cc
class Student { public:
... void main() {
char name[30]; int id; void print();
(cid:132) Là hàm (cid:255)(cid:1211)c thù v(cid:1247)(cid:76) (cid:255)(cid:1237)i t(cid:1133)(cid:1255)ng (cid:132) (cid:264)(cid:1133)(cid:1255)c liên k(cid:1219)t v(cid:1247)i m(cid:1245)t l(cid:1247)(cid:83) (cid:255)(cid:1237)i t(cid:1133)(cid:1255)ng c(cid:1257) th(cid:1223) (cid:132) Tác (cid:255)(cid:1245)ng t(cid:1247)i các thu(cid:1245)c tính c(cid:1259)(cid:68) (cid:255)(cid:1237)i t(cid:1133)(cid:1255)ng
};
Student s; cin >> s.name; cin >> s.id; s.print();
}
void Student::print() {
cout << ”name: ” << name << endl; cout << ”id: ” << id << endl;
}
T.P.TU(cid:1192)N - LTH(cid:264)T T.P.TU(cid:1192)N - LTH(cid:264)T 10 9 9/6/2009 9/6/2009
1. L1. L(cid:1247)(cid:1247)p vp vàà (cid:264)(cid:264)(cid:1237)(cid:1237)i t(cid:1133)i t(cid:1133)(cid:1255)(cid:1255)ngng
1. L1. L(cid:1247)(cid:1247)p vp vàà (cid:255)(cid:255)(cid:1237)(cid:1237)i t(cid:1133)i t(cid:1133)(cid:1255)(cid:1255)ngng (cid:132) Hàm inline inline:
(cid:132) Ph(cid:1195)n l(cid:1247)n l(cid:1243)i l(cid:1201)p trình là do thao tác sai v(cid:1247)i
(cid:133) (cid:38)(cid:1191)i thi(cid:1227)n t(cid:1237)c (cid:255)(cid:1245) th(cid:1269)c thi (cid:133) (cid:55)(cid:1237)n b(cid:1245) nh(cid:1247) (dành cho mã l(cid:1227)nh) khi th(cid:1269)c thi.
CCáách 1ch 1:
class Point
class Point
(cid:71)(cid:1267) li(cid:1227)u (cid:133) (cid:71)(cid:1267) li(cid:1227)u không h(cid:1255)p l(cid:1227) (sai mi(cid:1221)n giá tr(cid:1231)) (cid:133) (cid:71)(cid:1267) li(cid:1227)u không th(cid:1237)ng nh(cid:1193)t
Point { int xVal, yVal;
Point { int xVal, yVal;
public:
public:
CCáách 2ch 2:
void SetPt (int x, int y) {
(cid:132) (cid:38)(cid:1195)n có k(cid:1275) thu(cid:1201)(cid:87) (cid:255)(cid:1223) ki(cid:1223)m soát v(cid:1193)(cid:81) (cid:255)(cid:1221) này
thêm (cid:55)(cid:1263) khóa inline
void SetPt (int, int); void OffsetPt (int, int);
xVal = x; yVal = y;
};
}
Point::SetPt (int x, int y) {
void OffsetPt (int x, int y) {
(cid:264)(cid:1191)m b(cid:1191)o tính (cid:255)úng (cid:255)(cid:1203)n c(cid:1259)a d(cid:1267) li(cid:1227)u
(cid:264)(cid:1231)nh ngh(cid:429)a bên trong (cid:79)(cid:1247)p
inline void Point xVal = x; yVal = y;
xVal += x; yVal += y;
}
}
……………
};
T.P.TU(cid:1192)N - LTH(cid:264)T T.P.TU(cid:1192)N - LTH(cid:264)T 11 12 9/6/2009 9/6/2009
1. L1. L(cid:1247)(cid:1247)p vp vàà (cid:255)(cid:255)(cid:1237)(cid:1237)i t(cid:1133)i t(cid:1133)(cid:1255)(cid:1255)ngng
date.cpp: #include ”date.h” bool Date::set(int yy, int mm, int dd) {
// ki(cid:1223)m tra tính h(cid:1255)p l(cid:1227) (cid:70)(cid:1259)a tham s(cid:1237)
...
Date.h: class Date { public:
}
int y, m, d; bool set(int yy,int mm,int dd);
myCalendar.cpp: #include ”date.h”; void main() {
};
Date d1, d2; d1.set(2000, 13, 32); d2.set(2001, 2, 29);
} T.P.TU(cid:1192)N - LTH(cid:264)T
T.P.TU(cid:1192)N - LTH(cid:264)T 14 13 9/6/2009 9/6/2009
1. L1. L(cid:1247)(cid:1247)p vp vàà (cid:255)(cid:255)(cid:1237)(cid:1237)i t(cid:1133)i t(cid:1133)(cid:1255)(cid:1255)ngng
1. L1. L(cid:1247)(cid:1247)p vp vàà (cid:255)(cid:255)(cid:1237)(cid:1237)i t(cid:1133)i t(cid:1133)(cid:1255)(cid:1255)ngng
GiGi(cid:1191)(cid:1191)i phi pháápp
(cid:132) Không cho truy c(cid:1201)p tr(cid:1269)c ti(cid:1219)(cid:83) (cid:255)(cid:1219)n các
myCalendar.cpp: #include ”date.h”; void main() {
thu(cid:1245)c tính (cid:133) ch(cid:1229) có các ph(cid:1133)(cid:1131)ng th(cid:1261)c c(cid:1259)a chính (cid:255)(cid:1237)i t(cid:1133)(cid:1255)ng
thao tác (cid:255)(cid:1133)(cid:1255)c lên các thu(cid:1245)c tính
(cid:132) Truy v(cid:1193)n và c(cid:1201)p nh(cid:1201)t thu(cid:1245)c tính thông qua
(cid:49)(cid:1219)u truy c(cid:1201)p tr(cid:1269)c ti(cid:1219)(cid:83) (cid:255)(cid:1219)n các thu(cid:1245)c tính thì v(cid:1199)n không ki(cid:1223)m soát (cid:255)(cid:1133)(cid:1255)c
Date d1, d2; d1.y = 2001; d1.m = 2; d1.d = 29; ...
các ph(cid:1133)(cid:1131)ng th(cid:1261)c xác (cid:255)(cid:1231)nh (cid:133) giao di(cid:863)n th(cid:1269)c s(cid:1269) (cid:70)(cid:1259)a l(cid:1247)(cid:83) (cid:255)(cid:1237)i t(cid:1133)(cid:1255)ng (cid:133) ki(cid:1223)m soát tính h(cid:1255)p l(cid:1227) khi thay (cid:255)(cid:1241)i giá tr(cid:1231)
}
(cid:264)(cid:1191)m b(cid:1191)o tính (cid:255)úng (cid:255)(cid:1203)n c(cid:1259)a d(cid:1267) li(cid:1227)u
T.P.TU(cid:1192)N - LTH(cid:264)T T.P.TU(cid:1192)N - LTH(cid:264)T 15 16 9/6/2009 9/6/2009
1. L1. L(cid:1247)(cid:1247)p vp vàà (cid:255)(cid:255)(cid:1237)(cid:1237)i t(cid:1133)i t(cid:1133)(cid:1255)(cid:1255)ngng
1. L1. L(cid:1247)(cid:1247)p vp vàà (cid:255)(cid:255)(cid:1237)(cid:1237)i t(cid:1133)i t(cid:1133)(cid:1255)(cid:1255)ngng
Date.h: class Date { public:
date.cpp: #include ”date.h”; bool Date::set(int yy, int mm, int dd) {
// ki(cid:1223)m tra tính h(cid:1255)p l(cid:1227) (cid:70)(cid:1259)a tham s(cid:1237)
Giao di(cid:1227)n
... } int Date::getYear() {
int getYear(); int getMonth(); int getDay(); bool set(int, int, int); void print(); void copyTo(Date&); bool equalTo(Date&);
return y;
private:
int y, m, d;
(cid:264)óng gói/che d(cid:1193)u thông tin
(cid:264)óng gói/che d(cid:1193)u thông tin
};
} ...
T.P.TU(cid:1192)N - LTH(cid:264)T T.P.TU(cid:1192)N - LTH(cid:264)T 18 17 9/6/2009 9/6/2009
1. L1. L(cid:1247)(cid:1247)p vp vàà (cid:255)(cid:255)(cid:1237)(cid:1237)i t(cid:1133)i t(cid:1133)(cid:1255)(cid:1255)ngng
1. L1. L(cid:1247)(cid:1247)p vp vàà (cid:255)(cid:255)(cid:1237)(cid:1237)i t(cid:1133)i t(cid:1133)(cid:1255)(cid:1255)ngng (cid:132) (cid:264)óng gói (cid:255)(cid:1237)i t(cid:1133)(cid:1255)ng, che d(cid:1193)u các thông tin
(cid:264)óng gói/che d(cid:1193)u thông tin
myCalendar.cpp: #include ”date.h”; void main() {
Date d1, d2; if (d1.set(2000, 1, 31))
cout << d1.getYear() << endl;
(cid:81)(cid:1245)i t(cid:1189)i, truy c(cid:1201)(cid:83) (cid:255)(cid:1237)i t(cid:1133)(cid:1255)ng thông qua ph(cid:1133)(cid:1131)ng th(cid:1261)c (giaogiao didi(cid:1227)(cid:1227)nn) xác (cid:255)(cid:1231)nh (cid:206) (cid:264)(cid:1191)m b(cid:1191)o tính (cid:255)úng (cid:255)(cid:1203)n c(cid:1259)(cid:68) (cid:255)(cid:1237)i t(cid:1133)(cid:1255)ng (cid:132) Ng(cid:1133)(cid:1249)i l(cid:1201)p trình (cid:1261)ng d(cid:1257)ng ch(cid:1229) (cid:70)(cid:1195)n bi(cid:1219)t giao di(cid:1227)n (ch(cid:1261)c n(cid:259)ng, cách dùng); không c(cid:1195)n bi(cid:1219)t cách cài (cid:255)(cid:1211)t c(cid:1259)(cid:68) (cid:255)(cid:1237)i t(cid:1133)(cid:1255)ng (cid:206) (cid:39)(cid:1225) (cid:86)(cid:1265) (cid:71)(cid:1257)ng
else cout << ”ngay thang khong hop le”; cout << d1.m; // compile error d1.d = 30; // compile error
(cid:264)óng gói/che d(cid:1193)u thông tin
... }
T.P.TU(cid:1192)N - LTH(cid:264)T T.P.TU(cid:1192)N - LTH(cid:264)T 19 20 9/6/2009 9/6/2009
Ph(cid:1189)m vi truy c(cid:1201)p
1. L1. L(cid:1247)(cid:1247)p vp vàà (cid:255)(cid:255)(cid:1237)(cid:1237)i t(cid:1133)i t(cid:1133)(cid:1255)(cid:1255)ngng Ph(cid:1189)m vi truy c(cid:1201)p
1. L1. L(cid:1247)(cid:1247)p vp vàà (cid:255)(cid:255)(cid:1237)(cid:1237)i t(cid:1133)i t(cid:1133)(cid:1255)(cid:1255)ngng
(cid:49)(cid:1131)i Truy (cid:49)(cid:1131)i Truy CC(cid:1201)(cid:1201)pp
BB(cid:1188)(cid:1188)NN
ThThàànhnh
TRONG TRONG LL(cid:1246)(cid:1246)PP
NGONGOÀÀII LL(cid:1246)(cid:1246)PP
LL(cid:1246)(cid:1246)PP KK(cid:1218)(cid:1218) THTH(cid:1262)(cid:1262)AA
PhPh(cid:1195)(cid:1195)nn
private private
x
x
protected protected
(cid:132) Các thành ph(cid:1195)n public (cid:133) Ph(cid:1133)(cid:1131)ng th(cid:1261)c trong l(cid:1247)p (cid:133) Ph(cid:1133)(cid:1131)ng th(cid:1261)c (cid:1251) (cid:79)(cid:1247)p k(cid:1219) th(cid:1263)a (cid:133) Ph(cid:1133)(cid:1131)ng th(cid:1261)c ngoài l(cid:1247)p (cid:132) Các thành ph(cid:1195)n protected (cid:133) Ph(cid:1133)(cid:1131)ng th(cid:1261)c trong l(cid:1247)p (cid:133) Ph(cid:1133)(cid:1131)ng th(cid:1261)c (cid:1251) (cid:79)(cid:1247)p k(cid:1219) th(cid:1263)a
x
x
x
(cid:132) Các thành ph(cid:1195)n private (cid:133) Ph(cid:1133)(cid:1131)ng th(cid:1261)c trong l(cid:1247)p
public public
x
X
x
x
T.P.TU(cid:1192)N - LTH(cid:264)T T.P.TU(cid:1192)N - LTH(cid:264)T 21 22 9/6/2009 9/6/2009
2.2. Th(cid:1133) vi
Th(cid:1133) vi(cid:1227)(cid:1227)n hn hóóaa
Date.h:
#if !defined (_DATE_H__)
#define _DATE_H__
//khai báo th(cid:1132) vi(cid:1227)n
#include
(cid:132) Các l(cid:1247)p c(cid:1195)(cid:81) (cid:255)(cid:1133)(cid:1255)c xây d(cid:1269)ng (cid:255)(cid:1223) (cid:86)(cid:1265) (cid:71)(cid:1257)ng (cid:79)(cid:1189)(cid:76) (cid:255)(cid:1133)(cid:1255)c trong nhi(cid:1221)u ch(cid:1133)(cid:1131)ng trình khác nhau
class Date { private:
(cid:132) Phân tách mã ngu(cid:1239)(cid:81) (cid:255)(cid:1231)nh ngh(cid:429)a l(cid:1247)p và mã
int y, m, d;
ngu(cid:1239)n s(cid:1265) (cid:71)(cid:1257)ng l(cid:1247)p
public:
(cid:132) Phân tách giao di(cid:863)n (cid:70)(cid:1259)a l(cid:1247)p và cài (cid:255)(cid:847)t (cid:70)(cid:1259)a
void set(int yy, int mm, int dd); void print();
(cid:79)(cid:1247)p
}; #endif
T.P.TU(cid:1192)N - LTH(cid:264)T T.P.TU(cid:1192)N - LTH(cid:264)T 24 23 9/6/2009 9/6/2009
Date.cpp:
myApp.cpp:
#include ”Date.h”
#include
#include ”Date.h”
void Date::set(int yy, int mm, int dd) {
y = yy;
m = mm;
d = dd;
void main() {
} void Date::print() {
Date ngaysinh; ngaysinh.set(2007, 3, 8); ngaysinh.print();
cout <
}
}
T.P.TU(cid:1192)N - LTH(cid:264)T T.P.TU(cid:1192)N - LTH(cid:264)T 26 25 9/6/2009 9/6/2009
3. M3. M(cid:1245)(cid:1245)t vt víí dd(cid:1257)(cid:1257) -- LL(cid:1247)(cid:1247)p Set (t
p Set (t(cid:1201)(cid:1201)p hp h(cid:1255)(cid:1255)p)p)
3. M3. M(cid:1245)(cid:1245)t vt víí dd(cid:1257)(cid:1257) -- LL(cid:1247)(cid:1247)p Set (t
p Set (t(cid:1201)(cid:1201)p hp h(cid:1255)(cid:1255)p)p)
void Set::Copy (Set &set) {
Bool Set::IsMember (const int elem) {
for (register i = 0; i < card; ++i)
for (register i = 0; i < card; ++i)
set.elems[i] = elems[i];
………
int main (void) {
s1, s2;
if (elems[i] == elem)
return true;
set.card = card;
return false;
#include
const maxCard = 100;
enum Bool {false, true};
class SetSet {
private:
}
Bool Set::Equal (Set &set) {
}
void Set::AddElem (const int elem) {
if (IsMember(elem))
int elems[maxCard];
int card;
if (card != set.card)
return false;
return;
public:
if (card < maxCard)
for (register i = 0; i < card; ++i)
if (!set.IsMember(elems[i]))
elems[card++] = elem;
return false;
else
return true;
cout << "Set overflow“<
}
void Set::Print (void) {
KK(cid:1219)(cid:1219)tt
ququ(cid:1191)(cid:1191) ??
}
void Set::RmvElem (const int elem) {
for (register i = 0; i < card; ++i)
Set
s1.EmptySet(); s2.EmptySet();
s1.AddElem(10); s1.AddElem(20);
s1.AddElem(30); s1.AddElem(40);
s2.AddElem(30); s2.AddElem(50);
s2.AddElem(10); s2.AddElem(60);
cout << "s1 = "; s1.Print();
cout << "s2 = "; s2.Print();
s2.RmvElem(50);
cout << "s2 - {50} = ";
s2.Print();
if (s1.IsMember(20))
if (elems[i] == elem) {
cout << "20 is in s1\n";
cout << "{";
for (int i = 0; i < card-1; ++i)
cout << elems[i] << ",";
if (!s1.Equal(s2))
for (; i < card-1; ++i) // D(cid:867)ch
elems[i] = elems[i+1];
if (card > 0)
--card;
cout << "s1 <> s2\n";
cout << elems[card-1];
}
void EmptySet(){ card = 0; }
Bool IsMember (const int);
void AddElem (const int);
void RmvElem (const int);
void Copy (Set&);
Bool Equal (Set&);
void Intersect (Set&, Set&);
void Union (Set&, Set&);
void Print ();
return 0;
cout << "}“<
}
}
};
}
T.P.TU(cid:1192)N - LTH(cid:264)T T.P.TU(cid:1192)N - LTH(cid:264)T 27 28 9/6/2009 9/6/2009
ThTh(cid:1269)(cid:1269)cc hhàànhnh
3. Thi(cid:1219)(cid:1219)t kt k(cid:1219)(cid:1219) LL(cid:1247)(cid:1247)pp
3. Thi
(cid:132) (cid:55)(cid:1189)o l(cid:1247)p Student
(cid:133) có các thu(cid:1245)c tính tên, mã sinh viên, (cid:255)(cid:76)(cid:1223)m
a. Xác (cid:255)(cid:1231)nh thành ph(cid:1195)n d(cid:1267) li(cid:1227)u
b. Xác (cid:255)(cid:1231)nh thành ph(cid:1195)n x(cid:1265) lý
trung bình
(cid:133) ph(cid:1133)(cid:1131)ng th(cid:1261)c print() (cid:255)(cid:1223) in thông tin
(cid:132) Vi(cid:1219)t ch(cid:1133)(cid:1131)ng trình (cid:1261)ng d(cid:1257)ng (cid:255)(cid:1223) nh(cid:1201)p
(cid:133) Nhóm kh(cid:1251)i t(cid:1189)o
(cid:133) Nhóm truy v(cid:1193)n thông tin
(cid:133) Nhóm c(cid:1201)p nh(cid:1201)t thông tin
(cid:133) Nhóm x(cid:1265) lý tính toán
(cid:133) Nhóm ki(cid:1223)m tra ràng bu(cid:1245)c
thông tin cho m(cid:1245)t s(cid:1237) sinh viên, (cid:86)(cid:1203)p x(cid:1219)p l(cid:1189)i
theo th(cid:1261) (cid:87)(cid:1269) (cid:255)(cid:76)(cid:1223)m trung bình t(cid:1263) cao xu(cid:1237)ng
th(cid:1193)p.
T.P.TU(cid:1192)N - LTH(cid:264)T T.P.TU(cid:1192)N - LTH(cid:264)T 30 29 9/6/2009 9/6/2009
3. Thi(cid:1219)(cid:1219)t kt k(cid:1219)(cid:1219) LL(cid:1247)(cid:1247)pp
3. Thi
3. Thi(cid:1219)(cid:1219)t kt k(cid:1219)(cid:1219) LL(cid:1247)(cid:1247)pp
3. Thi
(cid:132) Nhóm kh(cid:1251)i t(cid:1189)o
(cid:132) Ta c(cid:1195)n bi(cid:1219)t nh(cid:1267)ng thông tin gì v(cid:1221) (cid:80)(cid:1245)t (cid:255)(cid:1237)i
(cid:87)(cid:1133)(cid:1255)ng thu(cid:1245)c l(cid:1247)p này
(cid:133) Xác (cid:255)(cid:1231)nh tr(cid:1189)ng thái ban (cid:255)(cid:1195)u cho (cid:255)(cid:1237)i t(cid:1133)(cid:1255)ng
(cid:133) Ví d(cid:1257):
(cid:132) Thành ph(cid:1195)n d(cid:1267) li(cid:1227)u th(cid:1133)(cid:1249)ng (cid:255)(cid:1133)(cid:1255)c (cid:255)(cid:1211)t
(cid:132) KhoiTaoPS (tu=0,mau=1)
(cid:132) KhoiTaoSV (ten=“”,…)
(cid:132) DSLK (Head=Tail=NULL)
(cid:132) ….
trong ph(cid:1189)m vi protected hay private
ThThàành ph
nh ph(cid:1195)(cid:1195)n dn d(cid:1267)(cid:1267) lili(cid:1227)(cid:1227)uu
ThThàành ph
nh ph(cid:1195)(cid:1195)n xn x(cid:1265)(cid:1265) lýlý
T.P.TU(cid:1192)N - LTH(cid:264)T T.P.TU(cid:1192)N - LTH(cid:264)T 31 32 9/6/2009 9/6/2009
3. Thi(cid:1219)(cid:1219)t kt k(cid:1219)(cid:1219) LL(cid:1247)(cid:1247)pp
3. Thi
3. Thi(cid:1219)(cid:1219)t kt k(cid:1219)(cid:1219) LL(cid:1247)(cid:1247)pp
3. Thi
(cid:132) Nhóm truy v(cid:1193)n thông tin
(cid:132) Nhóm truy v(cid:1193)n thông tin
(cid:133) (cid:264)(cid:1237)i v(cid:1247)i các truy v(cid:1193)n (cid:255)(cid:1131)n gi(cid:1191)n, quy (cid:1133)(cid:1247)c (cid:255)(cid:1211)t tên
(cid:133) Các ph(cid:1133)(cid:1131)ng th(cid:1261)c truy v(cid:1193)n (query method) là các
ph(cid:1133)(cid:1131)ng th(cid:1261)c dùng (cid:255)(cid:1223) (cid:75)(cid:1235)i v(cid:1221) giá tr(cid:1231) (cid:70)(cid:1259)a các thành
viên d(cid:1267) li(cid:1227)u c(cid:1259)a m(cid:1245)t (cid:255)(cid:1237)i t(cid:1133)(cid:1255)ng
(cid:133) Có nhi(cid:1221)u lo(cid:1189)i câu h(cid:1235)i truy v(cid:1193)n có th(cid:1223):
ph(cid:1133)(cid:1131)ngth(cid:1261)c: ti(cid:1221)n t(cid:1237) “get”, ti(cid:1219)p theo là tên c(cid:1259)a thành
viên
(cid:132) truy v(cid:1193)n (cid:255)(cid:1131)n gi(cid:1191)n (“giá tr(cid:867) (cid:70)(cid:895)a x là bao nhiêu?”)
(cid:132) truy v(cid:1193)n (cid:255)(cid:76)(cid:1221)u ki(cid:1227)n (“thành viên x có l(cid:883)n h(cid:767)n 10
(cid:133) int getX();
(cid:133) int getSize();
không?”)
(cid:132) truy v(cid:1193)n d(cid:1199)n xu(cid:1193)t (“t(cid:877)ng giá tr(cid:867) (cid:70)(cid:895)a các thành viên x
(cid:133) Các lo(cid:1189)i truy v(cid:1193)n khác nên có tên có tính mô t(cid:1191)
(cid:133) Truy v(cid:1193)n (cid:255)(cid:76)(cid:1221)u ki(cid:1227)n nên có ti(cid:1221)n t(cid:1237) “is”
và y là bao nhiêu?”)
(cid:133) (cid:264)(cid:1211)c (cid:255)(cid:76)(cid:1223)m quan tr(cid:1233)ng c(cid:1259)a ph(cid:1133)(cid:1131)ng th(cid:1261)c truy v(cid:1193)n là
nó không nên thay (cid:255)(cid:1241)i tr(cid:1189)ng thái hi(cid:1227)n t(cid:1189)i c(cid:1259)a (cid:255)(cid:1237)i
(cid:87)(cid:1133)(cid:1255)ng
T.P.TU(cid:1192)N - LTH(cid:264)T T.P.TU(cid:1192)N - LTH(cid:264)T 34 33 9/6/2009 9/6/2009
3. Thi(cid:1219)(cid:1219)t kt k(cid:1219)(cid:1219) LL(cid:1247)(cid:1247)pp
3. Thi
(cid:132) Truy v(cid:1193)n và c(cid:1201)p nh(cid:1201)t
3. Thi(cid:1219)(cid:1219)t kt k(cid:1219)(cid:1219) LL(cid:1247)(cid:1247)pp
3. Thi
(cid:132) (cid:38)(cid:1201)p nh(cid:1201)t thông tin
(cid:133) (cid:49)(cid:1219)u các ph(cid:1133)(cid:1131)ng th(cid:1261)c get/set ch(cid:1229) có nhi(cid:1227)m v(cid:1257)
cho ta (cid:255)(cid:1233)c và ghi giá tr(cid:1231) cho các thành viên d(cid:1267)
li(cid:1227)u, quy (cid:255)(cid:1231)nh các thành viên private (cid:255)(cid:1223) (cid:255)(cid:1133)(cid:1255)c ích
(cid:79)(cid:1255)i gì?
(cid:133) Ng(cid:1133)(cid:1255)c l(cid:1189)i v(cid:1247)i truy v(cid:1193)n thông tin, các ph(cid:1133)(cid:1131)ng
th(cid:1261)c c(cid:1201)p nh(cid:1201)t th(cid:1133)(cid:1249)ng thay (cid:255)(cid:1241)i tr(cid:1189)ng thái c(cid:1259)a
(cid:255)(cid:1237)i t(cid:1133)(cid:1255)ng b(cid:1205)ng cách s(cid:1265)a (cid:255)(cid:1241)i m(cid:1245)t ho(cid:1211)c nhi(cid:1221)u
thành viên d(cid:1267) li(cid:1227)u c(cid:1259)a (cid:255)(cid:1237)i t(cid:1133)(cid:1255)ng (cid:255)ó
(cid:133) Ngoài vi(cid:1227)c b(cid:1191)o v(cid:1227) các nguyên t(cid:1203)c (cid:255)óng gói, ta
còn c(cid:1195)n ki(cid:1223)m tra xem giá tr(cid:1231) (cid:80)(cid:1247)i cho thành viên
(cid:71)(cid:1267) li(cid:1227)u có h(cid:1255)p l(cid:1227) hay không.
(cid:133) (cid:39)(cid:1189)ng (cid:255)(cid:1131)n gi(cid:1191)n nh(cid:1193)t c(cid:1259)a các ph(cid:1133)(cid:1131)ng th(cid:1261)c
(cid:70)(cid:1201)p nh(cid:1201)t là gán m(cid:1245)t giá tr(cid:1231) nào (cid:255)ó cho m(cid:1245)t
thành viên d(cid:1267) li(cid:1227)u
(cid:133) (cid:54)(cid:1265) (cid:71)(cid:1257)ng ph(cid:1133)(cid:1131)ng th(cid:1261)c c(cid:1201)p nh(cid:1201)t cho phép ta th(cid:1269)c
hi(cid:1227)n vi(cid:1227)c ki(cid:1223)m tra tr(cid:1133)(cid:1247)c khi th(cid:1269)c s(cid:1269) thay (cid:255)(cid:1241)i giá
tr(cid:1231) (cid:70)(cid:1259)a thành viên.
(cid:133) (cid:264)(cid:1237)i v(cid:1247)i d(cid:1189)ng c(cid:1201)p nh(cid:1201)t (cid:255)(cid:1131)n gi(cid:1191)n, quy (cid:1133)(cid:1247)c (cid:255)(cid:1211)t
tên: dùng ti(cid:1221)n t(cid:1237) “set” kèm theo tên thành viên
(cid:70)(cid:1195)n s(cid:1265)a
(cid:133) Cho phép ch(cid:1229) các d(cid:1267) li(cid:1227)u có th(cid:1223) truy v(cid:1193)n hay thay
(cid:133) int setX(int);
(cid:255)(cid:1241)i (cid:255)(cid:1133)(cid:1255)c truy c(cid:1201)p (cid:255)(cid:1219)n.
T.P.TU(cid:1192)N - LTH(cid:264)T T.P.TU(cid:1192)N - LTH(cid:264)T 36 35 9/6/2009 9/6/2009
3. Thi(cid:1219)(cid:1219)t kt k(cid:1219)(cid:1219) LL(cid:1247)(cid:1247)pp
3. Thi
VVíí dd(cid:1257)(cid:1257)
3. Thi(cid:1219)(cid:1219)t kt k(cid:1219)(cid:1219) LL(cid:1247)(cid:1247)pp
3. Thi
(cid:132) Nhóm x(cid:1265) lý tính toán
(cid:133) Xác (cid:255)(cid:1231)nh tr(cid:1189)ng thái m(cid:1247)i cho (cid:255)(cid:1237)i t(cid:1133)(cid:1255)ng ho(cid:1211)c
int Student::setGPA(double newGPA)
{
cung c(cid:1193)p thông tin t(cid:1241)ng h(cid:1255)p t(cid:1263) các thu(cid:1245)c tính
(cid:70)(cid:1259)a (cid:255)(cid:1237)i t(cid:1133)(cid:1255)ng
if ((newGPA >= 0.0) && (newGPA <= 4.0))
{
(cid:133) Ví d(cid:1257):
this->gpa = newGPA;
return 0; // Return 0 to indicate success
}
else
{
return -1; // Return -1 to indicate failure
}
(cid:132) NhanVien.TinhLuong()
(cid:132) SinhVien.XepLoai()
(cid:132) Nghiem (cid:197) PhuongTrinh.GiaiPhuongTrinh()
(cid:132) Giatri (cid:197) PhanSo.TinhGiaTri()
(cid:132) …
}
ThThàành ph
nh ph(cid:1195)(cid:1195)n xn x(cid:1265)(cid:1265) lýlý
T.P.TU(cid:1192)N - LTH(cid:264)T T.P.TU(cid:1192)N - LTH(cid:264)T 38 37 9/6/2009 9/6/2009
BBàài ti t(cid:1201)(cid:1201)pp
3. Thi(cid:1219)(cid:1219)t kt k(cid:1219)(cid:1219) LL(cid:1247)(cid:1247)pp
3. Thi
3. Thi(cid:1219)(cid:1219)t kt k(cid:1219)(cid:1219) LL(cid:1247)(cid:1247)pp
3. Thi
(cid:132) Nhóm ki(cid:1223)m tra ràng bu(cid:1245)c
(cid:133) Ki(cid:1223)m tra tính (cid:255)úng (cid:255)(cid:1203)ng c(cid:1259)a d(cid:1267) li(cid:1227)u
(cid:133) Ví d(cid:1257):
1. (cid:37)(cid:1241) sung vào l(cid:1247)p Date các ph(cid:1133)(cid:1131)ng th(cid:1261)c
thu(cid:1245)c các nhóm trên (m(cid:1243)i nhóm ít nh(cid:1193)t
(cid:80)(cid:1245)t ph(cid:1133)(cid:1131)ng th(cid:1261)c)
2. Cài (cid:255)(cid:1211)t trên máy l(cid:1247)p t(cid:1201)p h(cid:1255)p (Set) và
(cid:132) Ngày tháng n(cid:259)m h(cid:1255)p l(cid:1227)
(cid:132) Ngày vào làm và ngày sinh
(cid:132) (cid:48)(cid:1199)u s(cid:1237) (cid:70)(cid:1259)a phân s(cid:1237) ph(cid:1191)i khác 0
(cid:132) (cid:264)(cid:76)(cid:1223)m s(cid:1237) (cid:70)(cid:1259)a sinh viên >=0 và <=10
(cid:132) …
vi(cid:1219)t ch(cid:1133)(cid:1131)ng trình nh(cid:1201)p vào 2 t(cid:1201)p h(cid:1255)p s(cid:1237)
nguyên (A,B), sau (cid:255)ó
a. Tính giao c(cid:1259)a 2 t(cid:1201)p h(cid:1255)p v(cid:1263)a nh(cid:1201)p
b. Ki(cid:1223)m tra xem t(cid:1201)p A có ph(cid:1191)i là con c(cid:1259)a B hay
không
ThThàành ph
nh ph(cid:1195)(cid:1195)n xn x(cid:1265)(cid:1265) lýlý
T.P.TU(cid:1192)N - LTH(cid:264)T T.P.TU(cid:1192)N - LTH(cid:264)T 40 39 9/6/2009 9/6/2009
4. C4. Cáác ph(cid:1133)(cid:1131)ng th
c ph(cid:1133)(cid:1131)ng th(cid:1261)(cid:1261)c/hc/hààm (cid:255)m (cid:255)(cid:1211)(cid:1211)c bic bi(cid:1227)(cid:1227)tt
4. C4. Cáác ph(cid:1133)(cid:1131)ng th
c ph(cid:1133)(cid:1131)ng th(cid:1261)(cid:1261)c/hc/hààm (cid:255)m (cid:255)(cid:1211)(cid:1211)c bic bi(cid:1227)(cid:1227)tt
(cid:132) Ph(cid:1133)(cid:1131)ng th(cid:1261)(cid:70) (cid:255)(cid:1211)c bi(cid:1227)(cid:87) (cid:255)(cid:1133)(cid:1255)c g(cid:1233)i t(cid:1269) (cid:255)(cid:1245)ng ngay
(cid:132) Ph(cid:1133)(cid:1131)ng th(cid:1261)c kh(cid:1251)i t(cid:1189)o - Constructor
(cid:132) Ph(cid:1133)(cid:1131)ng th(cid:1261)c h(cid:1259)y - Destructor
sau khi (cid:255)(cid:1237)i t(cid:1133)(cid:1255)ng (cid:255)(cid:1133)(cid:1255)c t(cid:1189)o ra
(cid:133) (cid:255)(cid:1133)(cid:1255)c g(cid:1233)i t(cid:1269) (cid:255)(cid:1245)ng, ng(cid:1133)(cid:1249)i dùng không (cid:255)(cid:1133)(cid:1255)c g(cid:1233)i l(cid:1189)i
(cid:133) không tr(cid:1191) (cid:79)(cid:1189)i k(cid:1219)t qu(cid:1191)
(cid:132) Có hình th(cid:1261)c tên trùng v(cid:1247)i tên l(cid:1247)p
(cid:132) Th(cid:1133)(cid:1249)ng làm nhi(cid:1227)m v(cid:1257) kh(cid:1251)i t(cid:1189)o d(cid:1267) li(cid:1227)u cho (cid:255)(cid:1237)i
(cid:87)(cid:1133)(cid:1255)ng
(cid:132) Có th(cid:1223) khai báo trùng
Constructor
Constructor
T.P.TU(cid:1192)N - LTH(cid:264)T T.P.TU(cid:1192)N - LTH(cid:264)T 42 41 9/6/2009 9/6/2009
Date.h:
date.cpp:
#include ”date.h”;
Constructor
Constructor
class Date
{
public:
Date::Date()
{
Constructor
Constructor
y = 2000;
m = 1;
d = 1;
}
Date();
Date(int, int, int);
int getYear();
int getMonth();
int getDay();
bool set(int, int, int);
void set(const Date&);
void print();
void copyTo(Date&);
bool equalTo(const Date&);
Date::Date(int yy, int mm, int dd)
{
private:
set(yy, mm, dd);
int y, m, d;
};
T.P.TU(cid:1192)N - LTH(cid:264)T T.P.TU(cid:1192)N - LTH(cid:264)T 44 43 9/6/2009
}
...
9/6/2009
ng (t(cid:1189)(cid:1189)oo))
m xây d(cid:1269)(cid:1269)ng (t
nh ngh(cid:429)(cid:429)aa và khkh(cid:1251)(cid:1251)i ti t(cid:1189)(cid:1189)oo (cid:255)(cid:1237)i t(cid:1133)(cid:1255)ng cùng 1 lúc.
Constructor
Constructor
myCalendar.cpp:
#include ”date.h”;
...
void main()
{
HHààm xây d
(cid:132) Dùng (cid:255)(cid:1223) (cid:255)(cid:255)(cid:1231)(cid:1231)nh ngh
(cid:132) Có tên trùng v(cid:1247)i tên l(cid:1247)p, không có ki(cid:1223)u tr(cid:1191) (cid:89)(cid:1221).
(cid:132) Không g(cid:1233)i tr(cid:1269)c ti(cid:1219)p, s(cid:1217) (cid:255)(cid:1133)(cid:1255)c t(cid:1269) (cid:255)(cid:1245)ng g(cid:1233)i khi kh(cid:1251)i t(cid:1189)o (cid:255)t.
(cid:132)(cid:132) GGáán gin giáá trtr(cid:1231)(cid:1231), c, c(cid:1193)(cid:1193)p vp vùùng nh
nh viên.
ng nh(cid:1247)(cid:1247) cho các dd(cid:903)(cid:903) lili(cid:863)(cid:863)u thu thàành viên
void main() {
class Point
Point {
int xVal, yVal;
public:
Point pt1(10,20);
pt1.OffsetPt(2,2);
……..
Point (int x, int y) {
// Khai báo nào là sai ?
xVal = x; yVal = y;
}
Date d1;
Date womenDay(2007, 3, 8);
Date d[100];
d1.print();
womenDay.print();
void OffsetPt (int x, int y) {
xVal += x; yVal += y;
}
}
Point pt2;
Point pt3();
Point pt4 = Point(5,5);
Point pt5 = new Point(5,5);
……….
};
}
T.P.TU(cid:1192)N - LTH(cid:264)T T.P.TU(cid:1192)N - LTH(cid:264)T 46 45 9/6/2009 9/6/2009
4. C4. Cáác ph(cid:1133)(cid:1131)ng th
c ph(cid:1133)(cid:1131)ng th(cid:1261)(cid:1261)c/hc/hààm (cid:255)m (cid:255)(cid:1211)(cid:1211)c bic bi(cid:1227)(cid:1227)tt
HHààm xây d
m xây d(cid:1269)(cid:1269)ng (t
ng (t(cid:1189)(cid:1189)oo))
class Point
class SetSet {
private:
Point {
int xVal, yVal;
(cid:48)(cid:1221)m
(cid:71)(cid:1215)o
(cid:75)(cid:1131)n
public:
Point () // Hàm xây d(cid:905)ng m(cid:847)c nhiên
int *elems;
int maxCard;
int card;
{ xVal = 0; yVal = 0; }
public:
(cid:132) Ph(cid:1133)(cid:1131)ng th(cid:1261)(cid:70) (cid:255)(cid:1211)c bi(cid:1227)(cid:87) (cid:255)(cid:1133)(cid:1255)c g(cid:1233)i t(cid:1269) (cid:255)(cid:1245)ng ngay
tr(cid:1133)(cid:1247)c khi (cid:255)(cid:1237)i t(cid:1133)(cid:1255)ng (cid:255)(cid:1133)(cid:1255)c gi(cid:1191)i phóng kh(cid:1235)i b(cid:1245)
nh(cid:1247)
Point (int x, int y) {
Set(const int size) {
xVal = x; yVal = y;
(cid:132) Không có tham s(cid:1237), không có ki(cid:1223)u tr(cid:1191) (cid:79)(cid:1189)i, không
}
elems = new int[size];
maxCard = size;
card = 0;
(cid:255)(cid:1231)nh ngh(cid:429)a trùng
}
Point (float len, float angle) {
xVal = (int) (len * cos(angle));
yVal = (int) (len * sin(angle));
……………
(cid:132) Th(cid:1133)(cid:1249)ng (cid:255)(cid:1133)(cid:1255)c dùng vào m(cid:1257)(cid:70) (cid:255)ích (cid:255)(cid:1211)c bi(cid:1227)t là
}
};
void OffsetPt (int , int ); …
void main() {
};
void main() {
Set s1(100);
Set s2(20);
Set s3(1000); …
(cid:71)(cid:1233)n d(cid:1213)p các tài nguyên mà (cid:255)(cid:1237)i t(cid:1133)(cid:1255)ng s(cid:1265) (cid:71)(cid:1257)ng
(cid:133) gi(cid:1191)i phóng b(cid:1245) nh(cid:1247) (cid:255)(cid:1245)ng
(cid:133) (cid:255)óng t(cid:1227)p
Không c(cid:1195)n
ph(cid:1191)i nh(cid:1247)
(cid:74)(cid:1233)i hàm
EmptySet()
EmptySet()
khi kh(cid:1251)i t(cid:1189)o
}
Destructor
Destructor
Point p1;
Point p2(10,20);
Point p3(60.3, 3.14);
}
T.P.TU(cid:1192)N - LTH(cid:264)T T.P.TU(cid:1192)N - LTH(cid:264)T 47 48 9/6/2009 9/6/2009
Date.h:
date.cpp:
#include ”date.h”;
Destructor
Destructor
class Date
{
public:
Date::Date()
{
Destructor
Destructor
y = 2000;
m = 1;
d = 1;
}
Date();
Date(int, int, int);
int getYear();
int getMonth();
int getDay();
bool set(int, int, int);
...
~Date();
Date::~Date()
{
private:
int y, m, d;
cerr << y << m << d <<” bye!” << endl;
};
T.P.TU(cid:1192)N - LTH(cid:264)T T.P.TU(cid:1192)N - LTH(cid:264)T 50 49 9/6/2009
}
...
9/6/2009
c khi nó (cid:255)(cid:1133)(cid:1255)c thu h(cid:1239)i.
Destructor
Destructor
myCalendar.cpp:
#include ”date.h”;
void f1()
{
Date d(2007, 1, 1);
HHààm hm h(cid:1259)(cid:1259)yy
(cid:132) (cid:39)(cid:1233)n d(cid:1213)p 1 (cid:255)(cid:1237)i t(cid:1133)(cid:1255)ng tr(cid:769)tr(cid:769)(cid:883)(cid:883)c khi
(cid:132) Cú pháp: ~TenLop() { ……... }
(cid:132) Không g(cid:1233)i tr(cid:1269)c ti(cid:1219)p, s(cid:1217) (cid:255)(cid:1133)(cid:1255)c t(cid:1269) (cid:255)(cid:1245)ng g(cid:1233)i khi h(cid:1259)y b(cid:1235) (cid:255)t.
nh viên là con tr
(cid:132)(cid:132) Thu h
ng nh(cid:1247)(cid:1247) cho các dd(cid:903)(cid:903) lili(cid:863)(cid:863)u thu thàành viên
Thu h(cid:1239)(cid:1239)i vi vùùng nh
con tr(cid:871)(cid:871).
}
Set TestFunct1(Set s1) {
class SetSet {
private:
Set *s = new Set(50);
return *s;
}
int *elems;
int maxCard;
int card;
void main()
{
void main() {
public:
(cid:55)(cid:1241)ng c(cid:1245)ng
có bao nhiêu
bao nhiêu
ll(cid:1195)(cid:1195)nn hàm h(cid:1259)y
(cid:255)(cid:1133)(cid:1255)c g(cid:1233)i ?
Set s1(40), s2(50);
s2 = TestFunct1(s1);
Set(const int size) { …… }
~Set() { delete[] elems; }
}
Date d;
f1();
….
};
}
T.P.TU(cid:1192)N - LTH(cid:264)T T.P.TU(cid:1192)N - LTH(cid:264)T 51 52 9/6/2009 9/6/2009
5. H5. Hààm bm b(cid:1189)(cid:1189)n, ln, l(cid:1247)(cid:1247)p bp b(cid:1189)(cid:1189)nn
(cid:55)(cid:1201)p Các
(cid:54)(cid:1237) Nguyên
5. H5. Hààm bm b(cid:1189)(cid:1189)n, ln, l(cid:1247)(cid:1247)p bp b(cid:1189)(cid:1189)nn
(cid:132) Cách 1: Khai báo hàm thành viên c(cid:1259)a l(cid:1247)p
friend) c(cid:1259)a l(cid:1247)p RealSet.
Hàm SetToReal
dùng (cid:255)(cid:1223) chuy(cid:1223)n
(cid:87)(cid:1201)p s(cid:1237) nguyên
thành t(cid:1201)p s(cid:1237) th(cid:1269)c
IntSet là bb(cid:1189)(cid:1189)nn (friend
IntSet {
void IntSet::SetToReal (RealSet &set) {
class IntSet
public:
IntSet {
class IntSet
public:
set.card = card;
for (register i = 0; i < card; ++i)
//...
private:
Gi(cid:1267) nguyên (cid:255)(cid:1231)nh
ngh(cid:429)a c(cid:1259)a l(cid:1247)p IntSet
set.elems[i] = (float) elems[i];
//...
private:
}
int elems[maxCard];
int card;
};
int elems[maxCard];
int card;
};
RealSet {
class RealSet
public:
RealSet {
//...
class RealSet
public:
private:
(cid:55)(cid:1201)p Các
(cid:54)(cid:1237) Th(cid:1269)c
SetToReal (RealSet&);
//...
friend void IntSet::SetToReal
Làm th(cid:1219) nào (cid:255)(cid:1223)
th(cid:1269)c hi(cid:1227)n (cid:255)(cid:1133)(cid:1255)c
vi(cid:1227)c truy xu(cid:1193)t
(cid:255)(cid:1219)n thành viên
Private ?
Private
float elems[maxCard];
int card;
private:
Thêm dòng khai báo
Friend cho
hàm thành viên
SetToReal
};
float elems[maxCard];
int card;
};
T.P.TU(cid:1192)N - LTH(cid:264)T T.P.TU(cid:1192)N - LTH(cid:264)T 54 53 9/6/2009 9/6/2009
5. H5. Hààm bm b(cid:1189)(cid:1189)n, ln, l(cid:1247)(cid:1247)p bp b(cid:1189)(cid:1189)nn
(cid:132) Cách 2:
5. H5. Hààm bm b(cid:1189)(cid:1189)n, ln, l(cid:1247)(cid:1247)p bp b(cid:1189)(cid:1189)nn
(cid:132)(cid:132) HHààm bm b(cid:1189)(cid:1189)nn:
(cid:133) Có quy(cid:1221)n truy xu(cid:1193)t (cid:255)(cid:1219)n t(cid:1193)t c(cid:1191) các dd(cid:903)(cid:903) lili(cid:863)(cid:863)uu và
(cid:133) Chuy(cid:1223)n hàm SetToReal ra ngoài ((cid:255)(cid:255)(cid:1245)(cid:1245)c lc l(cid:1201)(cid:1201)pp).
(cid:133) Khai báo hàm (cid:255)ó là bb(cid:1189)(cid:1189)nn (cid:70)(cid:1259)a c(cid:1191) 2 l(cid:1247)p.
hhààmm thành viên (protected + private) c(cid:1259)a 1 l(cid:1247)p.
IntSet {
(cid:132) LL(cid:1247)(cid:1247)p bp b(cid:1189)(cid:1189)nn:
class IntSet
public:
SetToReal (IntSet& iSet,
void SetToReal
RealSet& rSet )
//...
friend void SetToReal (IntSet &, RealSet&);
(cid:133) (cid:55)(cid:1193)t c(cid:1191) các hàm trong l(cid:1247)p b(cid:1189)n: là hàm b(cid:1189)n.
{
private:
int elems[maxCard];
int card;
rSet.card = iSet.card;
for (int i = 0; i < iSet.card; ++i)
rSet.elems[i] =
RealSet {
(float) iSet.elems[i];
};
class RealSet
public:
IntSet { ……….. }
RealSet { // ……….
class IntSet
class RealSet
}
class A;
class B { // ……….
friend class A;
friend class IntSet;
//...
friend void SetToReal (IntSet &, RealSet&);
private:
};
};
float elems[maxCard];
int card;
Hàm (cid:255)(cid:1245)c l(cid:1201)p
là b(cid:1189)n(friend)
(cid:70)(cid:1259)a c(cid:1191) 2 l(cid:1247)p.
};
T.P.TU(cid:1192)N - LTH(cid:264)T T.P.TU(cid:1192)N - LTH(cid:264)T 55 56 9/6/2009 9/6/2009
5. H5. Hààm bm b(cid:1189)(cid:1189)n, ln, l(cid:1247)(cid:1247)p bp b(cid:1189)(cid:1189)nn
5. H5. Hààm bm b(cid:1189)(cid:1189)n, ln, l(cid:1247)(cid:1247)p bp b(cid:1189)(cid:1189)nn
void HoanVi(CDate &a,CDate &b)
{
CStudent is a class
CStudent is a class
class CDate
{
friend CStudent; // friend class
class CStudent
{
private:
private:
int tam;
tam=a.d;a.d=b.d;b.d=tam;
tam=a.m;a.m=b.m;b.m=tam;
tam=a.y;a.y=b.y;b.y=tam;
int id;
CDate ns;
int d,m,y;
}
public:
public:
void setns(int d,int m,int y)
{
ns.d=d; ns.m=m; ns.y=y;
friend void HoanVi(CDate &a,CDate &b);
//friend function
}
};
};
T.P.TU(cid:1192)N - LTH(cid:264)T T.P.TU(cid:1192)N - LTH(cid:264)T 57 58 9/6/2009 9/6/2009
T.P.TU(cid:1192)N - LTH(cid:264)T 59 9/6/2009
}
}
T.P.TU(cid:1192)N - LTH(cid:264)T T.P.TU(cid:1192)N - LTH(cid:264)T 26 25 9/6/2009 9/6/2009
3. M3. M(cid:1245)(cid:1245)t vt víí dd(cid:1257)(cid:1257) -- LL(cid:1247)(cid:1247)p Set (t
p Set (t(cid:1201)(cid:1201)p hp h(cid:1255)(cid:1255)p)p)
3. M3. M(cid:1245)(cid:1245)t vt víí dd(cid:1257)(cid:1257) -- LL(cid:1247)(cid:1247)p Set (t
p Set (t(cid:1201)(cid:1201)p hp h(cid:1255)(cid:1255)p)p)
void Set::Copy (Set &set) {
Bool Set::IsMember (const int elem) { for (register i = 0; i < card; ++i)
for (register i = 0; i < card; ++i) set.elems[i] = elems[i];
……… int main (void) { s1, s2;
if (elems[i] == elem) return true;
set.card = card;
return false;
#include
const maxCard = 100;
enum Bool {false, true};
class SetSet {
private:
} Bool Set::Equal (Set &set) {
} void Set::AddElem (const int elem) {
if (IsMember(elem))
int elems[maxCard]; int card;
if (card != set.card) return false;
return;
public:
if (card < maxCard)
for (register i = 0; i < card; ++i) if (!set.IsMember(elems[i]))
elems[card++] = elem;
return false;
else
return true;
cout << "Set overflow“<
}
void Set::Print (void) {
KK(cid:1219)(cid:1219)tt
ququ(cid:1191)(cid:1191) ??
}
void Set::RmvElem (const int elem) {
for (register i = 0; i < card; ++i)
Set
s1.EmptySet(); s2.EmptySet();
s1.AddElem(10); s1.AddElem(20);
s1.AddElem(30); s1.AddElem(40);
s2.AddElem(30); s2.AddElem(50);
s2.AddElem(10); s2.AddElem(60);
cout << "s1 = "; s1.Print();
cout << "s2 = "; s2.Print();
s2.RmvElem(50);
cout << "s2 - {50} = ";
s2.Print();
if (s1.IsMember(20))
if (elems[i] == elem) {
cout << "20 is in s1\n";
cout << "{";
for (int i = 0; i < card-1; ++i)
cout << elems[i] << ",";
if (!s1.Equal(s2))
for (; i < card-1; ++i) // D(cid:867)ch
elems[i] = elems[i+1];
if (card > 0)
--card;
cout << "s1 <> s2\n";
cout << elems[card-1];
}
void EmptySet(){ card = 0; }
Bool IsMember (const int);
void AddElem (const int);
void RmvElem (const int);
void Copy (Set&);
Bool Equal (Set&);
void Intersect (Set&, Set&);
void Union (Set&, Set&);
void Print ();
return 0;
cout << "}“<
}
}
};
}
T.P.TU(cid:1192)N - LTH(cid:264)T T.P.TU(cid:1192)N - LTH(cid:264)T 27 28 9/6/2009 9/6/2009
ThTh(cid:1269)(cid:1269)cc hhàànhnh
3. Thi(cid:1219)(cid:1219)t kt k(cid:1219)(cid:1219) LL(cid:1247)(cid:1247)pp
3. Thi
(cid:132) (cid:55)(cid:1189)o l(cid:1247)p Student
(cid:133) có các thu(cid:1245)c tính tên, mã sinh viên, (cid:255)(cid:76)(cid:1223)m
a. Xác (cid:255)(cid:1231)nh thành ph(cid:1195)n d(cid:1267) li(cid:1227)u
b. Xác (cid:255)(cid:1231)nh thành ph(cid:1195)n x(cid:1265) lý
trung bình
(cid:133) ph(cid:1133)(cid:1131)ng th(cid:1261)c print() (cid:255)(cid:1223) in thông tin
(cid:132) Vi(cid:1219)t ch(cid:1133)(cid:1131)ng trình (cid:1261)ng d(cid:1257)ng (cid:255)(cid:1223) nh(cid:1201)p
(cid:133) Nhóm kh(cid:1251)i t(cid:1189)o
(cid:133) Nhóm truy v(cid:1193)n thông tin
(cid:133) Nhóm c(cid:1201)p nh(cid:1201)t thông tin
(cid:133) Nhóm x(cid:1265) lý tính toán
(cid:133) Nhóm ki(cid:1223)m tra ràng bu(cid:1245)c
thông tin cho m(cid:1245)t s(cid:1237) sinh viên, (cid:86)(cid:1203)p x(cid:1219)p l(cid:1189)i
theo th(cid:1261) (cid:87)(cid:1269) (cid:255)(cid:76)(cid:1223)m trung bình t(cid:1263) cao xu(cid:1237)ng
th(cid:1193)p.
T.P.TU(cid:1192)N - LTH(cid:264)T T.P.TU(cid:1192)N - LTH(cid:264)T 30 29 9/6/2009 9/6/2009
3. Thi(cid:1219)(cid:1219)t kt k(cid:1219)(cid:1219) LL(cid:1247)(cid:1247)pp
3. Thi
3. Thi(cid:1219)(cid:1219)t kt k(cid:1219)(cid:1219) LL(cid:1247)(cid:1247)pp
3. Thi
(cid:132) Nhóm kh(cid:1251)i t(cid:1189)o
(cid:132) Ta c(cid:1195)n bi(cid:1219)t nh(cid:1267)ng thông tin gì v(cid:1221) (cid:80)(cid:1245)t (cid:255)(cid:1237)i
(cid:87)(cid:1133)(cid:1255)ng thu(cid:1245)c l(cid:1247)p này
(cid:133) Xác (cid:255)(cid:1231)nh tr(cid:1189)ng thái ban (cid:255)(cid:1195)u cho (cid:255)(cid:1237)i t(cid:1133)(cid:1255)ng
(cid:133) Ví d(cid:1257):
(cid:132) Thành ph(cid:1195)n d(cid:1267) li(cid:1227)u th(cid:1133)(cid:1249)ng (cid:255)(cid:1133)(cid:1255)c (cid:255)(cid:1211)t
(cid:132) KhoiTaoPS (tu=0,mau=1)
(cid:132) KhoiTaoSV (ten=“”,…)
(cid:132) DSLK (Head=Tail=NULL)
(cid:132) ….
trong ph(cid:1189)m vi protected hay private
ThThàành ph
nh ph(cid:1195)(cid:1195)n dn d(cid:1267)(cid:1267) lili(cid:1227)(cid:1227)uu
ThThàành ph
nh ph(cid:1195)(cid:1195)n xn x(cid:1265)(cid:1265) lýlý
T.P.TU(cid:1192)N - LTH(cid:264)T T.P.TU(cid:1192)N - LTH(cid:264)T 31 32 9/6/2009 9/6/2009
3. Thi(cid:1219)(cid:1219)t kt k(cid:1219)(cid:1219) LL(cid:1247)(cid:1247)pp
3. Thi
3. Thi(cid:1219)(cid:1219)t kt k(cid:1219)(cid:1219) LL(cid:1247)(cid:1247)pp
3. Thi
(cid:132) Nhóm truy v(cid:1193)n thông tin
(cid:132) Nhóm truy v(cid:1193)n thông tin
(cid:133) (cid:264)(cid:1237)i v(cid:1247)i các truy v(cid:1193)n (cid:255)(cid:1131)n gi(cid:1191)n, quy (cid:1133)(cid:1247)c (cid:255)(cid:1211)t tên
(cid:133) Các ph(cid:1133)(cid:1131)ng th(cid:1261)c truy v(cid:1193)n (query method) là các
ph(cid:1133)(cid:1131)ng th(cid:1261)c dùng (cid:255)(cid:1223) (cid:75)(cid:1235)i v(cid:1221) giá tr(cid:1231) (cid:70)(cid:1259)a các thành
viên d(cid:1267) li(cid:1227)u c(cid:1259)a m(cid:1245)t (cid:255)(cid:1237)i t(cid:1133)(cid:1255)ng
(cid:133) Có nhi(cid:1221)u lo(cid:1189)i câu h(cid:1235)i truy v(cid:1193)n có th(cid:1223):
ph(cid:1133)(cid:1131)ngth(cid:1261)c: ti(cid:1221)n t(cid:1237) “get”, ti(cid:1219)p theo là tên c(cid:1259)a thành
viên
(cid:132) truy v(cid:1193)n (cid:255)(cid:1131)n gi(cid:1191)n (“giá tr(cid:867) (cid:70)(cid:895)a x là bao nhiêu?”)
(cid:132) truy v(cid:1193)n (cid:255)(cid:76)(cid:1221)u ki(cid:1227)n (“thành viên x có l(cid:883)n h(cid:767)n 10
(cid:133) int getX();
(cid:133) int getSize();
không?”)
(cid:132) truy v(cid:1193)n d(cid:1199)n xu(cid:1193)t (“t(cid:877)ng giá tr(cid:867) (cid:70)(cid:895)a các thành viên x
(cid:133) Các lo(cid:1189)i truy v(cid:1193)n khác nên có tên có tính mô t(cid:1191)
(cid:133) Truy v(cid:1193)n (cid:255)(cid:76)(cid:1221)u ki(cid:1227)n nên có ti(cid:1221)n t(cid:1237) “is”
và y là bao nhiêu?”)
(cid:133) (cid:264)(cid:1211)c (cid:255)(cid:76)(cid:1223)m quan tr(cid:1233)ng c(cid:1259)a ph(cid:1133)(cid:1131)ng th(cid:1261)c truy v(cid:1193)n là
nó không nên thay (cid:255)(cid:1241)i tr(cid:1189)ng thái hi(cid:1227)n t(cid:1189)i c(cid:1259)a (cid:255)(cid:1237)i
(cid:87)(cid:1133)(cid:1255)ng
T.P.TU(cid:1192)N - LTH(cid:264)T T.P.TU(cid:1192)N - LTH(cid:264)T 34 33 9/6/2009 9/6/2009
3. Thi(cid:1219)(cid:1219)t kt k(cid:1219)(cid:1219) LL(cid:1247)(cid:1247)pp
3. Thi
(cid:132) Truy v(cid:1193)n và c(cid:1201)p nh(cid:1201)t
3. Thi(cid:1219)(cid:1219)t kt k(cid:1219)(cid:1219) LL(cid:1247)(cid:1247)pp
3. Thi
(cid:132) (cid:38)(cid:1201)p nh(cid:1201)t thông tin
(cid:133) (cid:49)(cid:1219)u các ph(cid:1133)(cid:1131)ng th(cid:1261)c get/set ch(cid:1229) có nhi(cid:1227)m v(cid:1257)
cho ta (cid:255)(cid:1233)c và ghi giá tr(cid:1231) cho các thành viên d(cid:1267)
li(cid:1227)u, quy (cid:255)(cid:1231)nh các thành viên private (cid:255)(cid:1223) (cid:255)(cid:1133)(cid:1255)c ích
(cid:79)(cid:1255)i gì?
(cid:133) Ng(cid:1133)(cid:1255)c l(cid:1189)i v(cid:1247)i truy v(cid:1193)n thông tin, các ph(cid:1133)(cid:1131)ng
th(cid:1261)c c(cid:1201)p nh(cid:1201)t th(cid:1133)(cid:1249)ng thay (cid:255)(cid:1241)i tr(cid:1189)ng thái c(cid:1259)a
(cid:255)(cid:1237)i t(cid:1133)(cid:1255)ng b(cid:1205)ng cách s(cid:1265)a (cid:255)(cid:1241)i m(cid:1245)t ho(cid:1211)c nhi(cid:1221)u
thành viên d(cid:1267) li(cid:1227)u c(cid:1259)a (cid:255)(cid:1237)i t(cid:1133)(cid:1255)ng (cid:255)ó
(cid:133) Ngoài vi(cid:1227)c b(cid:1191)o v(cid:1227) các nguyên t(cid:1203)c (cid:255)óng gói, ta
còn c(cid:1195)n ki(cid:1223)m tra xem giá tr(cid:1231) (cid:80)(cid:1247)i cho thành viên
(cid:71)(cid:1267) li(cid:1227)u có h(cid:1255)p l(cid:1227) hay không.
(cid:133) (cid:39)(cid:1189)ng (cid:255)(cid:1131)n gi(cid:1191)n nh(cid:1193)t c(cid:1259)a các ph(cid:1133)(cid:1131)ng th(cid:1261)c
(cid:70)(cid:1201)p nh(cid:1201)t là gán m(cid:1245)t giá tr(cid:1231) nào (cid:255)ó cho m(cid:1245)t
thành viên d(cid:1267) li(cid:1227)u
(cid:133) (cid:54)(cid:1265) (cid:71)(cid:1257)ng ph(cid:1133)(cid:1131)ng th(cid:1261)c c(cid:1201)p nh(cid:1201)t cho phép ta th(cid:1269)c
hi(cid:1227)n vi(cid:1227)c ki(cid:1223)m tra tr(cid:1133)(cid:1247)c khi th(cid:1269)c s(cid:1269) thay (cid:255)(cid:1241)i giá
tr(cid:1231) (cid:70)(cid:1259)a thành viên.
(cid:133) (cid:264)(cid:1237)i v(cid:1247)i d(cid:1189)ng c(cid:1201)p nh(cid:1201)t (cid:255)(cid:1131)n gi(cid:1191)n, quy (cid:1133)(cid:1247)c (cid:255)(cid:1211)t
tên: dùng ti(cid:1221)n t(cid:1237) “set” kèm theo tên thành viên
(cid:70)(cid:1195)n s(cid:1265)a
(cid:133) Cho phép ch(cid:1229) các d(cid:1267) li(cid:1227)u có th(cid:1223) truy v(cid:1193)n hay thay
(cid:133) int setX(int);
(cid:255)(cid:1241)i (cid:255)(cid:1133)(cid:1255)c truy c(cid:1201)p (cid:255)(cid:1219)n.
T.P.TU(cid:1192)N - LTH(cid:264)T T.P.TU(cid:1192)N - LTH(cid:264)T 36 35 9/6/2009 9/6/2009
3. Thi(cid:1219)(cid:1219)t kt k(cid:1219)(cid:1219) LL(cid:1247)(cid:1247)pp
3. Thi
VVíí dd(cid:1257)(cid:1257)
3. Thi(cid:1219)(cid:1219)t kt k(cid:1219)(cid:1219) LL(cid:1247)(cid:1247)pp
3. Thi
(cid:132) Nhóm x(cid:1265) lý tính toán
(cid:133) Xác (cid:255)(cid:1231)nh tr(cid:1189)ng thái m(cid:1247)i cho (cid:255)(cid:1237)i t(cid:1133)(cid:1255)ng ho(cid:1211)c
int Student::setGPA(double newGPA)
{
cung c(cid:1193)p thông tin t(cid:1241)ng h(cid:1255)p t(cid:1263) các thu(cid:1245)c tính
(cid:70)(cid:1259)a (cid:255)(cid:1237)i t(cid:1133)(cid:1255)ng
if ((newGPA >= 0.0) && (newGPA <= 4.0))
{
(cid:133) Ví d(cid:1257):
this->gpa = newGPA;
return 0; // Return 0 to indicate success
}
else
{
return -1; // Return -1 to indicate failure
}
(cid:132) NhanVien.TinhLuong()
(cid:132) SinhVien.XepLoai()
(cid:132) Nghiem (cid:197) PhuongTrinh.GiaiPhuongTrinh()
(cid:132) Giatri (cid:197) PhanSo.TinhGiaTri()
(cid:132) …
}
ThThàành ph
nh ph(cid:1195)(cid:1195)n xn x(cid:1265)(cid:1265) lýlý
T.P.TU(cid:1192)N - LTH(cid:264)T T.P.TU(cid:1192)N - LTH(cid:264)T 38 37 9/6/2009 9/6/2009
BBàài ti t(cid:1201)(cid:1201)pp
3. Thi(cid:1219)(cid:1219)t kt k(cid:1219)(cid:1219) LL(cid:1247)(cid:1247)pp
3. Thi
3. Thi(cid:1219)(cid:1219)t kt k(cid:1219)(cid:1219) LL(cid:1247)(cid:1247)pp
3. Thi
(cid:132) Nhóm ki(cid:1223)m tra ràng bu(cid:1245)c
(cid:133) Ki(cid:1223)m tra tính (cid:255)úng (cid:255)(cid:1203)ng c(cid:1259)a d(cid:1267) li(cid:1227)u
(cid:133) Ví d(cid:1257):
1. (cid:37)(cid:1241) sung vào l(cid:1247)p Date các ph(cid:1133)(cid:1131)ng th(cid:1261)c
thu(cid:1245)c các nhóm trên (m(cid:1243)i nhóm ít nh(cid:1193)t
(cid:80)(cid:1245)t ph(cid:1133)(cid:1131)ng th(cid:1261)c)
2. Cài (cid:255)(cid:1211)t trên máy l(cid:1247)p t(cid:1201)p h(cid:1255)p (Set) và
(cid:132) Ngày tháng n(cid:259)m h(cid:1255)p l(cid:1227)
(cid:132) Ngày vào làm và ngày sinh
(cid:132) (cid:48)(cid:1199)u s(cid:1237) (cid:70)(cid:1259)a phân s(cid:1237) ph(cid:1191)i khác 0
(cid:132) (cid:264)(cid:76)(cid:1223)m s(cid:1237) (cid:70)(cid:1259)a sinh viên >=0 và <=10
(cid:132) …
vi(cid:1219)t ch(cid:1133)(cid:1131)ng trình nh(cid:1201)p vào 2 t(cid:1201)p h(cid:1255)p s(cid:1237)
nguyên (A,B), sau (cid:255)ó
a. Tính giao c(cid:1259)a 2 t(cid:1201)p h(cid:1255)p v(cid:1263)a nh(cid:1201)p
b. Ki(cid:1223)m tra xem t(cid:1201)p A có ph(cid:1191)i là con c(cid:1259)a B hay
không
ThThàành ph
nh ph(cid:1195)(cid:1195)n xn x(cid:1265)(cid:1265) lýlý
T.P.TU(cid:1192)N - LTH(cid:264)T T.P.TU(cid:1192)N - LTH(cid:264)T 40 39 9/6/2009 9/6/2009
4. C4. Cáác ph(cid:1133)(cid:1131)ng th
c ph(cid:1133)(cid:1131)ng th(cid:1261)(cid:1261)c/hc/hààm (cid:255)m (cid:255)(cid:1211)(cid:1211)c bic bi(cid:1227)(cid:1227)tt
4. C4. Cáác ph(cid:1133)(cid:1131)ng th
c ph(cid:1133)(cid:1131)ng th(cid:1261)(cid:1261)c/hc/hààm (cid:255)m (cid:255)(cid:1211)(cid:1211)c bic bi(cid:1227)(cid:1227)tt
(cid:132) Ph(cid:1133)(cid:1131)ng th(cid:1261)(cid:70) (cid:255)(cid:1211)c bi(cid:1227)(cid:87) (cid:255)(cid:1133)(cid:1255)c g(cid:1233)i t(cid:1269) (cid:255)(cid:1245)ng ngay
(cid:132) Ph(cid:1133)(cid:1131)ng th(cid:1261)c kh(cid:1251)i t(cid:1189)o - Constructor
(cid:132) Ph(cid:1133)(cid:1131)ng th(cid:1261)c h(cid:1259)y - Destructor
sau khi (cid:255)(cid:1237)i t(cid:1133)(cid:1255)ng (cid:255)(cid:1133)(cid:1255)c t(cid:1189)o ra
(cid:133) (cid:255)(cid:1133)(cid:1255)c g(cid:1233)i t(cid:1269) (cid:255)(cid:1245)ng, ng(cid:1133)(cid:1249)i dùng không (cid:255)(cid:1133)(cid:1255)c g(cid:1233)i l(cid:1189)i
(cid:133) không tr(cid:1191) (cid:79)(cid:1189)i k(cid:1219)t qu(cid:1191)
(cid:132) Có hình th(cid:1261)c tên trùng v(cid:1247)i tên l(cid:1247)p
(cid:132) Th(cid:1133)(cid:1249)ng làm nhi(cid:1227)m v(cid:1257) kh(cid:1251)i t(cid:1189)o d(cid:1267) li(cid:1227)u cho (cid:255)(cid:1237)i
(cid:87)(cid:1133)(cid:1255)ng
(cid:132) Có th(cid:1223) khai báo trùng
Constructor
Constructor
T.P.TU(cid:1192)N - LTH(cid:264)T T.P.TU(cid:1192)N - LTH(cid:264)T 42 41 9/6/2009 9/6/2009
Date.h:
date.cpp:
#include ”date.h”;
Constructor
Constructor
class Date
{
public:
Date::Date()
{
Constructor
Constructor
y = 2000;
m = 1;
d = 1;
}
Date();
Date(int, int, int);
int getYear();
int getMonth();
int getDay();
bool set(int, int, int);
void set(const Date&);
void print();
void copyTo(Date&);
bool equalTo(const Date&);
Date::Date(int yy, int mm, int dd)
{
private:
set(yy, mm, dd);
int y, m, d;
};
T.P.TU(cid:1192)N - LTH(cid:264)T T.P.TU(cid:1192)N - LTH(cid:264)T 44 43 9/6/2009
}
...
9/6/2009
ng (t(cid:1189)(cid:1189)oo))
m xây d(cid:1269)(cid:1269)ng (t
nh ngh(cid:429)(cid:429)aa và khkh(cid:1251)(cid:1251)i ti t(cid:1189)(cid:1189)oo (cid:255)(cid:1237)i t(cid:1133)(cid:1255)ng cùng 1 lúc.
Constructor
Constructor
myCalendar.cpp:
#include ”date.h”;
...
void main()
{
HHààm xây d
(cid:132) Dùng (cid:255)(cid:1223) (cid:255)(cid:255)(cid:1231)(cid:1231)nh ngh
(cid:132) Có tên trùng v(cid:1247)i tên l(cid:1247)p, không có ki(cid:1223)u tr(cid:1191) (cid:89)(cid:1221).
(cid:132) Không g(cid:1233)i tr(cid:1269)c ti(cid:1219)p, s(cid:1217) (cid:255)(cid:1133)(cid:1255)c t(cid:1269) (cid:255)(cid:1245)ng g(cid:1233)i khi kh(cid:1251)i t(cid:1189)o (cid:255)t.
(cid:132)(cid:132) GGáán gin giáá trtr(cid:1231)(cid:1231), c, c(cid:1193)(cid:1193)p vp vùùng nh
nh viên.
ng nh(cid:1247)(cid:1247) cho các dd(cid:903)(cid:903) lili(cid:863)(cid:863)u thu thàành viên
void main() {
class Point
Point {
int xVal, yVal;
public:
Point pt1(10,20);
pt1.OffsetPt(2,2);
……..
Point (int x, int y) {
// Khai báo nào là sai ?
xVal = x; yVal = y;
}
Date d1;
Date womenDay(2007, 3, 8);
Date d[100];
d1.print();
womenDay.print();
void OffsetPt (int x, int y) {
xVal += x; yVal += y;
}
}
Point pt2;
Point pt3();
Point pt4 = Point(5,5);
Point pt5 = new Point(5,5);
……….
};
}
T.P.TU(cid:1192)N - LTH(cid:264)T T.P.TU(cid:1192)N - LTH(cid:264)T 46 45 9/6/2009 9/6/2009
4. C4. Cáác ph(cid:1133)(cid:1131)ng th
c ph(cid:1133)(cid:1131)ng th(cid:1261)(cid:1261)c/hc/hààm (cid:255)m (cid:255)(cid:1211)(cid:1211)c bic bi(cid:1227)(cid:1227)tt
HHààm xây d
m xây d(cid:1269)(cid:1269)ng (t
ng (t(cid:1189)(cid:1189)oo))
class Point
class SetSet {
private:
Point {
int xVal, yVal;
(cid:48)(cid:1221)m
(cid:71)(cid:1215)o
(cid:75)(cid:1131)n
public:
Point () // Hàm xây d(cid:905)ng m(cid:847)c nhiên
int *elems;
int maxCard;
int card;
{ xVal = 0; yVal = 0; }
public:
(cid:132) Ph(cid:1133)(cid:1131)ng th(cid:1261)(cid:70) (cid:255)(cid:1211)c bi(cid:1227)(cid:87) (cid:255)(cid:1133)(cid:1255)c g(cid:1233)i t(cid:1269) (cid:255)(cid:1245)ng ngay
tr(cid:1133)(cid:1247)c khi (cid:255)(cid:1237)i t(cid:1133)(cid:1255)ng (cid:255)(cid:1133)(cid:1255)c gi(cid:1191)i phóng kh(cid:1235)i b(cid:1245)
nh(cid:1247)
Point (int x, int y) {
Set(const int size) {
xVal = x; yVal = y;
(cid:132) Không có tham s(cid:1237), không có ki(cid:1223)u tr(cid:1191) (cid:79)(cid:1189)i, không
}
elems = new int[size];
maxCard = size;
card = 0;
(cid:255)(cid:1231)nh ngh(cid:429)a trùng
}
Point (float len, float angle) {
xVal = (int) (len * cos(angle));
yVal = (int) (len * sin(angle));
……………
(cid:132) Th(cid:1133)(cid:1249)ng (cid:255)(cid:1133)(cid:1255)c dùng vào m(cid:1257)(cid:70) (cid:255)ích (cid:255)(cid:1211)c bi(cid:1227)t là
}
};
void OffsetPt (int , int ); …
void main() {
};
void main() {
Set s1(100);
Set s2(20);
Set s3(1000); …
(cid:71)(cid:1233)n d(cid:1213)p các tài nguyên mà (cid:255)(cid:1237)i t(cid:1133)(cid:1255)ng s(cid:1265) (cid:71)(cid:1257)ng
(cid:133) gi(cid:1191)i phóng b(cid:1245) nh(cid:1247) (cid:255)(cid:1245)ng
(cid:133) (cid:255)óng t(cid:1227)p
Không c(cid:1195)n
ph(cid:1191)i nh(cid:1247)
(cid:74)(cid:1233)i hàm
EmptySet()
EmptySet()
khi kh(cid:1251)i t(cid:1189)o
}
Destructor
Destructor
Point p1;
Point p2(10,20);
Point p3(60.3, 3.14);
}
T.P.TU(cid:1192)N - LTH(cid:264)T T.P.TU(cid:1192)N - LTH(cid:264)T 47 48 9/6/2009 9/6/2009
Date.h:
date.cpp:
#include ”date.h”;
Destructor
Destructor
class Date
{
public:
Date::Date()
{
Destructor
Destructor
y = 2000;
m = 1;
d = 1;
}
Date();
Date(int, int, int);
int getYear();
int getMonth();
int getDay();
bool set(int, int, int);
...
~Date();
Date::~Date()
{
private:
int y, m, d;
cerr << y << m << d <<” bye!” << endl;
};
T.P.TU(cid:1192)N - LTH(cid:264)T T.P.TU(cid:1192)N - LTH(cid:264)T 50 49 9/6/2009
}
...
9/6/2009
c khi nó (cid:255)(cid:1133)(cid:1255)c thu h(cid:1239)i.
Destructor
Destructor
myCalendar.cpp:
#include ”date.h”;
void f1()
{
Date d(2007, 1, 1);
HHààm hm h(cid:1259)(cid:1259)yy
(cid:132) (cid:39)(cid:1233)n d(cid:1213)p 1 (cid:255)(cid:1237)i t(cid:1133)(cid:1255)ng tr(cid:769)tr(cid:769)(cid:883)(cid:883)c khi
(cid:132) Cú pháp: ~TenLop() { ……... }
(cid:132) Không g(cid:1233)i tr(cid:1269)c ti(cid:1219)p, s(cid:1217) (cid:255)(cid:1133)(cid:1255)c t(cid:1269) (cid:255)(cid:1245)ng g(cid:1233)i khi h(cid:1259)y b(cid:1235) (cid:255)t.
nh viên là con tr
(cid:132)(cid:132) Thu h
ng nh(cid:1247)(cid:1247) cho các dd(cid:903)(cid:903) lili(cid:863)(cid:863)u thu thàành viên
Thu h(cid:1239)(cid:1239)i vi vùùng nh
con tr(cid:871)(cid:871).
}
Set TestFunct1(Set s1) {
class SetSet {
private:
Set *s = new Set(50);
return *s;
}
int *elems;
int maxCard;
int card;
void main()
{
void main() {
public:
(cid:55)(cid:1241)ng c(cid:1245)ng
có bao nhiêu
bao nhiêu
ll(cid:1195)(cid:1195)nn hàm h(cid:1259)y
(cid:255)(cid:1133)(cid:1255)c g(cid:1233)i ?
Set s1(40), s2(50);
s2 = TestFunct1(s1);
Set(const int size) { …… }
~Set() { delete[] elems; }
}
Date d;
f1();
….
};
}
T.P.TU(cid:1192)N - LTH(cid:264)T T.P.TU(cid:1192)N - LTH(cid:264)T 51 52 9/6/2009 9/6/2009
5. H5. Hààm bm b(cid:1189)(cid:1189)n, ln, l(cid:1247)(cid:1247)p bp b(cid:1189)(cid:1189)nn
(cid:55)(cid:1201)p Các
(cid:54)(cid:1237) Nguyên
5. H5. Hààm bm b(cid:1189)(cid:1189)n, ln, l(cid:1247)(cid:1247)p bp b(cid:1189)(cid:1189)nn
(cid:132) Cách 1: Khai báo hàm thành viên c(cid:1259)a l(cid:1247)p
friend) c(cid:1259)a l(cid:1247)p RealSet.
Hàm SetToReal
dùng (cid:255)(cid:1223) chuy(cid:1223)n
(cid:87)(cid:1201)p s(cid:1237) nguyên
thành t(cid:1201)p s(cid:1237) th(cid:1269)c
IntSet là bb(cid:1189)(cid:1189)nn (friend
IntSet {
void IntSet::SetToReal (RealSet &set) {
class IntSet
public:
IntSet {
class IntSet
public:
set.card = card;
for (register i = 0; i < card; ++i)
//...
private:
Gi(cid:1267) nguyên (cid:255)(cid:1231)nh
ngh(cid:429)a c(cid:1259)a l(cid:1247)p IntSet
set.elems[i] = (float) elems[i];
//...
private:
}
int elems[maxCard];
int card;
};
int elems[maxCard];
int card;
};
RealSet {
class RealSet
public:
RealSet {
//...
class RealSet
public:
private:
(cid:55)(cid:1201)p Các
(cid:54)(cid:1237) Th(cid:1269)c
SetToReal (RealSet&);
//...
friend void IntSet::SetToReal
Làm th(cid:1219) nào (cid:255)(cid:1223)
th(cid:1269)c hi(cid:1227)n (cid:255)(cid:1133)(cid:1255)c
vi(cid:1227)c truy xu(cid:1193)t
(cid:255)(cid:1219)n thành viên
Private ?
Private
float elems[maxCard];
int card;
private:
Thêm dòng khai báo
Friend cho
hàm thành viên
SetToReal
};
float elems[maxCard];
int card;
};
T.P.TU(cid:1192)N - LTH(cid:264)T T.P.TU(cid:1192)N - LTH(cid:264)T 54 53 9/6/2009 9/6/2009
5. H5. Hààm bm b(cid:1189)(cid:1189)n, ln, l(cid:1247)(cid:1247)p bp b(cid:1189)(cid:1189)nn
(cid:132) Cách 2:
5. H5. Hààm bm b(cid:1189)(cid:1189)n, ln, l(cid:1247)(cid:1247)p bp b(cid:1189)(cid:1189)nn
(cid:132)(cid:132) HHààm bm b(cid:1189)(cid:1189)nn:
(cid:133) Có quy(cid:1221)n truy xu(cid:1193)t (cid:255)(cid:1219)n t(cid:1193)t c(cid:1191) các dd(cid:903)(cid:903) lili(cid:863)(cid:863)uu và
(cid:133) Chuy(cid:1223)n hàm SetToReal ra ngoài ((cid:255)(cid:255)(cid:1245)(cid:1245)c lc l(cid:1201)(cid:1201)pp).
(cid:133) Khai báo hàm (cid:255)ó là bb(cid:1189)(cid:1189)nn (cid:70)(cid:1259)a c(cid:1191) 2 l(cid:1247)p.
hhààmm thành viên (protected + private) c(cid:1259)a 1 l(cid:1247)p.
IntSet {
(cid:132) LL(cid:1247)(cid:1247)p bp b(cid:1189)(cid:1189)nn:
class IntSet
public:
SetToReal (IntSet& iSet,
void SetToReal
RealSet& rSet )
//...
friend void SetToReal (IntSet &, RealSet&);
(cid:133) (cid:55)(cid:1193)t c(cid:1191) các hàm trong l(cid:1247)p b(cid:1189)n: là hàm b(cid:1189)n.
{
private:
int elems[maxCard];
int card;
rSet.card = iSet.card;
for (int i = 0; i < iSet.card; ++i)
rSet.elems[i] =
RealSet {
(float) iSet.elems[i];
};
class RealSet
public:
IntSet { ……….. }
RealSet { // ……….
class IntSet
class RealSet
}
class A;
class B { // ……….
friend class A;
friend class IntSet;
//...
friend void SetToReal (IntSet &, RealSet&);
private:
};
};
float elems[maxCard];
int card;
Hàm (cid:255)(cid:1245)c l(cid:1201)p
là b(cid:1189)n(friend)
(cid:70)(cid:1259)a c(cid:1191) 2 l(cid:1247)p.
};
T.P.TU(cid:1192)N - LTH(cid:264)T T.P.TU(cid:1192)N - LTH(cid:264)T 55 56 9/6/2009 9/6/2009
5. H5. Hààm bm b(cid:1189)(cid:1189)n, ln, l(cid:1247)(cid:1247)p bp b(cid:1189)(cid:1189)nn
5. H5. Hààm bm b(cid:1189)(cid:1189)n, ln, l(cid:1247)(cid:1247)p bp b(cid:1189)(cid:1189)nn
void HoanVi(CDate &a,CDate &b)
{
CStudent is a class
CStudent is a class
class CDate
{
friend CStudent; // friend class
class CStudent
{
private:
private:
int tam;
tam=a.d;a.d=b.d;b.d=tam;
tam=a.m;a.m=b.m;b.m=tam;
tam=a.y;a.y=b.y;b.y=tam;
int id;
CDate ns;
int d,m,y;
}
public:
public:
void setns(int d,int m,int y)
{
ns.d=d; ns.m=m; ns.y=y;
friend void HoanVi(CDate &a,CDate &b);
//friend function
}
};
};
T.P.TU(cid:1192)N - LTH(cid:264)T T.P.TU(cid:1192)N - LTH(cid:264)T 57 58 9/6/2009 9/6/2009
T.P.TU(cid:1192)N - LTH(cid:264)T 59 9/6/2009
} void Set::Print (void) {
KK(cid:1219)(cid:1219)tt ququ(cid:1191)(cid:1191) ??
} void Set::RmvElem (const int elem) { for (register i = 0; i < card; ++i)
Set s1.EmptySet(); s2.EmptySet(); s1.AddElem(10); s1.AddElem(20); s1.AddElem(30); s1.AddElem(40); s2.AddElem(30); s2.AddElem(50); s2.AddElem(10); s2.AddElem(60); cout << "s1 = "; s1.Print(); cout << "s2 = "; s2.Print(); s2.RmvElem(50); cout << "s2 - {50} = "; s2.Print(); if (s1.IsMember(20))
if (elems[i] == elem) {
cout << "20 is in s1\n";
cout << "{"; for (int i = 0; i < card-1; ++i) cout << elems[i] << ",";
if (!s1.Equal(s2))
for (; i < card-1; ++i) // D(cid:867)ch elems[i] = elems[i+1];
if (card > 0)
--card;
cout << "s1 <> s2\n";
cout << elems[card-1];
}
void EmptySet(){ card = 0; } Bool IsMember (const int); void AddElem (const int); void RmvElem (const int); void Copy (Set&); Bool Equal (Set&); void Intersect (Set&, Set&); void Union (Set&, Set&); void Print ();
return 0;
cout << "}“<
}
}
};
}
T.P.TU(cid:1192)N - LTH(cid:264)T T.P.TU(cid:1192)N - LTH(cid:264)T 27 28 9/6/2009 9/6/2009
ThTh(cid:1269)(cid:1269)cc hhàànhnh
3. Thi(cid:1219)(cid:1219)t kt k(cid:1219)(cid:1219) LL(cid:1247)(cid:1247)pp
3. Thi
(cid:132) (cid:55)(cid:1189)o l(cid:1247)p Student
(cid:133) có các thu(cid:1245)c tính tên, mã sinh viên, (cid:255)(cid:76)(cid:1223)m
a. Xác (cid:255)(cid:1231)nh thành ph(cid:1195)n d(cid:1267) li(cid:1227)u
b. Xác (cid:255)(cid:1231)nh thành ph(cid:1195)n x(cid:1265) lý
trung bình
(cid:133) ph(cid:1133)(cid:1131)ng th(cid:1261)c print() (cid:255)(cid:1223) in thông tin
(cid:132) Vi(cid:1219)t ch(cid:1133)(cid:1131)ng trình (cid:1261)ng d(cid:1257)ng (cid:255)(cid:1223) nh(cid:1201)p
(cid:133) Nhóm kh(cid:1251)i t(cid:1189)o
(cid:133) Nhóm truy v(cid:1193)n thông tin
(cid:133) Nhóm c(cid:1201)p nh(cid:1201)t thông tin
(cid:133) Nhóm x(cid:1265) lý tính toán
(cid:133) Nhóm ki(cid:1223)m tra ràng bu(cid:1245)c
thông tin cho m(cid:1245)t s(cid:1237) sinh viên, (cid:86)(cid:1203)p x(cid:1219)p l(cid:1189)i
theo th(cid:1261) (cid:87)(cid:1269) (cid:255)(cid:76)(cid:1223)m trung bình t(cid:1263) cao xu(cid:1237)ng
th(cid:1193)p.
T.P.TU(cid:1192)N - LTH(cid:264)T T.P.TU(cid:1192)N - LTH(cid:264)T 30 29 9/6/2009 9/6/2009
3. Thi(cid:1219)(cid:1219)t kt k(cid:1219)(cid:1219) LL(cid:1247)(cid:1247)pp
3. Thi
3. Thi(cid:1219)(cid:1219)t kt k(cid:1219)(cid:1219) LL(cid:1247)(cid:1247)pp
3. Thi
(cid:132) Nhóm kh(cid:1251)i t(cid:1189)o
(cid:132) Ta c(cid:1195)n bi(cid:1219)t nh(cid:1267)ng thông tin gì v(cid:1221) (cid:80)(cid:1245)t (cid:255)(cid:1237)i
(cid:87)(cid:1133)(cid:1255)ng thu(cid:1245)c l(cid:1247)p này
(cid:133) Xác (cid:255)(cid:1231)nh tr(cid:1189)ng thái ban (cid:255)(cid:1195)u cho (cid:255)(cid:1237)i t(cid:1133)(cid:1255)ng
(cid:133) Ví d(cid:1257):
(cid:132) Thành ph(cid:1195)n d(cid:1267) li(cid:1227)u th(cid:1133)(cid:1249)ng (cid:255)(cid:1133)(cid:1255)c (cid:255)(cid:1211)t
(cid:132) KhoiTaoPS (tu=0,mau=1)
(cid:132) KhoiTaoSV (ten=“”,…)
(cid:132) DSLK (Head=Tail=NULL)
(cid:132) ….
trong ph(cid:1189)m vi protected hay private
ThThàành ph
nh ph(cid:1195)(cid:1195)n dn d(cid:1267)(cid:1267) lili(cid:1227)(cid:1227)uu
ThThàành ph
nh ph(cid:1195)(cid:1195)n xn x(cid:1265)(cid:1265) lýlý
T.P.TU(cid:1192)N - LTH(cid:264)T T.P.TU(cid:1192)N - LTH(cid:264)T 31 32 9/6/2009 9/6/2009
3. Thi(cid:1219)(cid:1219)t kt k(cid:1219)(cid:1219) LL(cid:1247)(cid:1247)pp
3. Thi
3. Thi(cid:1219)(cid:1219)t kt k(cid:1219)(cid:1219) LL(cid:1247)(cid:1247)pp
3. Thi
(cid:132) Nhóm truy v(cid:1193)n thông tin
(cid:132) Nhóm truy v(cid:1193)n thông tin
(cid:133) (cid:264)(cid:1237)i v(cid:1247)i các truy v(cid:1193)n (cid:255)(cid:1131)n gi(cid:1191)n, quy (cid:1133)(cid:1247)c (cid:255)(cid:1211)t tên
(cid:133) Các ph(cid:1133)(cid:1131)ng th(cid:1261)c truy v(cid:1193)n (query method) là các
ph(cid:1133)(cid:1131)ng th(cid:1261)c dùng (cid:255)(cid:1223) (cid:75)(cid:1235)i v(cid:1221) giá tr(cid:1231) (cid:70)(cid:1259)a các thành
viên d(cid:1267) li(cid:1227)u c(cid:1259)a m(cid:1245)t (cid:255)(cid:1237)i t(cid:1133)(cid:1255)ng
(cid:133) Có nhi(cid:1221)u lo(cid:1189)i câu h(cid:1235)i truy v(cid:1193)n có th(cid:1223):
ph(cid:1133)(cid:1131)ngth(cid:1261)c: ti(cid:1221)n t(cid:1237) “get”, ti(cid:1219)p theo là tên c(cid:1259)a thành
viên
(cid:132) truy v(cid:1193)n (cid:255)(cid:1131)n gi(cid:1191)n (“giá tr(cid:867) (cid:70)(cid:895)a x là bao nhiêu?”)
(cid:132) truy v(cid:1193)n (cid:255)(cid:76)(cid:1221)u ki(cid:1227)n (“thành viên x có l(cid:883)n h(cid:767)n 10
(cid:133) int getX();
(cid:133) int getSize();
không?”)
(cid:132) truy v(cid:1193)n d(cid:1199)n xu(cid:1193)t (“t(cid:877)ng giá tr(cid:867) (cid:70)(cid:895)a các thành viên x
(cid:133) Các lo(cid:1189)i truy v(cid:1193)n khác nên có tên có tính mô t(cid:1191)
(cid:133) Truy v(cid:1193)n (cid:255)(cid:76)(cid:1221)u ki(cid:1227)n nên có ti(cid:1221)n t(cid:1237) “is”
và y là bao nhiêu?”)
(cid:133) (cid:264)(cid:1211)c (cid:255)(cid:76)(cid:1223)m quan tr(cid:1233)ng c(cid:1259)a ph(cid:1133)(cid:1131)ng th(cid:1261)c truy v(cid:1193)n là
nó không nên thay (cid:255)(cid:1241)i tr(cid:1189)ng thái hi(cid:1227)n t(cid:1189)i c(cid:1259)a (cid:255)(cid:1237)i
(cid:87)(cid:1133)(cid:1255)ng
T.P.TU(cid:1192)N - LTH(cid:264)T T.P.TU(cid:1192)N - LTH(cid:264)T 34 33 9/6/2009 9/6/2009
3. Thi(cid:1219)(cid:1219)t kt k(cid:1219)(cid:1219) LL(cid:1247)(cid:1247)pp
3. Thi
(cid:132) Truy v(cid:1193)n và c(cid:1201)p nh(cid:1201)t
3. Thi(cid:1219)(cid:1219)t kt k(cid:1219)(cid:1219) LL(cid:1247)(cid:1247)pp
3. Thi
(cid:132) (cid:38)(cid:1201)p nh(cid:1201)t thông tin
(cid:133) (cid:49)(cid:1219)u các ph(cid:1133)(cid:1131)ng th(cid:1261)c get/set ch(cid:1229) có nhi(cid:1227)m v(cid:1257)
cho ta (cid:255)(cid:1233)c và ghi giá tr(cid:1231) cho các thành viên d(cid:1267)
li(cid:1227)u, quy (cid:255)(cid:1231)nh các thành viên private (cid:255)(cid:1223) (cid:255)(cid:1133)(cid:1255)c ích
(cid:79)(cid:1255)i gì?
(cid:133) Ng(cid:1133)(cid:1255)c l(cid:1189)i v(cid:1247)i truy v(cid:1193)n thông tin, các ph(cid:1133)(cid:1131)ng
th(cid:1261)c c(cid:1201)p nh(cid:1201)t th(cid:1133)(cid:1249)ng thay (cid:255)(cid:1241)i tr(cid:1189)ng thái c(cid:1259)a
(cid:255)(cid:1237)i t(cid:1133)(cid:1255)ng b(cid:1205)ng cách s(cid:1265)a (cid:255)(cid:1241)i m(cid:1245)t ho(cid:1211)c nhi(cid:1221)u
thành viên d(cid:1267) li(cid:1227)u c(cid:1259)a (cid:255)(cid:1237)i t(cid:1133)(cid:1255)ng (cid:255)ó
(cid:133) Ngoài vi(cid:1227)c b(cid:1191)o v(cid:1227) các nguyên t(cid:1203)c (cid:255)óng gói, ta
còn c(cid:1195)n ki(cid:1223)m tra xem giá tr(cid:1231) (cid:80)(cid:1247)i cho thành viên
(cid:71)(cid:1267) li(cid:1227)u có h(cid:1255)p l(cid:1227) hay không.
(cid:133) (cid:39)(cid:1189)ng (cid:255)(cid:1131)n gi(cid:1191)n nh(cid:1193)t c(cid:1259)a các ph(cid:1133)(cid:1131)ng th(cid:1261)c
(cid:70)(cid:1201)p nh(cid:1201)t là gán m(cid:1245)t giá tr(cid:1231) nào (cid:255)ó cho m(cid:1245)t
thành viên d(cid:1267) li(cid:1227)u
(cid:133) (cid:54)(cid:1265) (cid:71)(cid:1257)ng ph(cid:1133)(cid:1131)ng th(cid:1261)c c(cid:1201)p nh(cid:1201)t cho phép ta th(cid:1269)c
hi(cid:1227)n vi(cid:1227)c ki(cid:1223)m tra tr(cid:1133)(cid:1247)c khi th(cid:1269)c s(cid:1269) thay (cid:255)(cid:1241)i giá
tr(cid:1231) (cid:70)(cid:1259)a thành viên.
(cid:133) (cid:264)(cid:1237)i v(cid:1247)i d(cid:1189)ng c(cid:1201)p nh(cid:1201)t (cid:255)(cid:1131)n gi(cid:1191)n, quy (cid:1133)(cid:1247)c (cid:255)(cid:1211)t
tên: dùng ti(cid:1221)n t(cid:1237) “set” kèm theo tên thành viên
(cid:70)(cid:1195)n s(cid:1265)a
(cid:133) Cho phép ch(cid:1229) các d(cid:1267) li(cid:1227)u có th(cid:1223) truy v(cid:1193)n hay thay
(cid:133) int setX(int);
(cid:255)(cid:1241)i (cid:255)(cid:1133)(cid:1255)c truy c(cid:1201)p (cid:255)(cid:1219)n.
T.P.TU(cid:1192)N - LTH(cid:264)T T.P.TU(cid:1192)N - LTH(cid:264)T 36 35 9/6/2009 9/6/2009
3. Thi(cid:1219)(cid:1219)t kt k(cid:1219)(cid:1219) LL(cid:1247)(cid:1247)pp
3. Thi
VVíí dd(cid:1257)(cid:1257)
3. Thi(cid:1219)(cid:1219)t kt k(cid:1219)(cid:1219) LL(cid:1247)(cid:1247)pp
3. Thi
(cid:132) Nhóm x(cid:1265) lý tính toán
(cid:133) Xác (cid:255)(cid:1231)nh tr(cid:1189)ng thái m(cid:1247)i cho (cid:255)(cid:1237)i t(cid:1133)(cid:1255)ng ho(cid:1211)c
int Student::setGPA(double newGPA)
{
cung c(cid:1193)p thông tin t(cid:1241)ng h(cid:1255)p t(cid:1263) các thu(cid:1245)c tính
(cid:70)(cid:1259)a (cid:255)(cid:1237)i t(cid:1133)(cid:1255)ng
if ((newGPA >= 0.0) && (newGPA <= 4.0))
{
(cid:133) Ví d(cid:1257):
this->gpa = newGPA;
return 0; // Return 0 to indicate success
}
else
{
return -1; // Return -1 to indicate failure
}
(cid:132) NhanVien.TinhLuong()
(cid:132) SinhVien.XepLoai()
(cid:132) Nghiem (cid:197) PhuongTrinh.GiaiPhuongTrinh()
(cid:132) Giatri (cid:197) PhanSo.TinhGiaTri()
(cid:132) …
}
ThThàành ph
nh ph(cid:1195)(cid:1195)n xn x(cid:1265)(cid:1265) lýlý
T.P.TU(cid:1192)N - LTH(cid:264)T T.P.TU(cid:1192)N - LTH(cid:264)T 38 37 9/6/2009 9/6/2009
BBàài ti t(cid:1201)(cid:1201)pp
3. Thi(cid:1219)(cid:1219)t kt k(cid:1219)(cid:1219) LL(cid:1247)(cid:1247)pp
3. Thi
3. Thi(cid:1219)(cid:1219)t kt k(cid:1219)(cid:1219) LL(cid:1247)(cid:1247)pp
3. Thi
(cid:132) Nhóm ki(cid:1223)m tra ràng bu(cid:1245)c
(cid:133) Ki(cid:1223)m tra tính (cid:255)úng (cid:255)(cid:1203)ng c(cid:1259)a d(cid:1267) li(cid:1227)u
(cid:133) Ví d(cid:1257):
1. (cid:37)(cid:1241) sung vào l(cid:1247)p Date các ph(cid:1133)(cid:1131)ng th(cid:1261)c
thu(cid:1245)c các nhóm trên (m(cid:1243)i nhóm ít nh(cid:1193)t
(cid:80)(cid:1245)t ph(cid:1133)(cid:1131)ng th(cid:1261)c)
2. Cài (cid:255)(cid:1211)t trên máy l(cid:1247)p t(cid:1201)p h(cid:1255)p (Set) và
(cid:132) Ngày tháng n(cid:259)m h(cid:1255)p l(cid:1227)
(cid:132) Ngày vào làm và ngày sinh
(cid:132) (cid:48)(cid:1199)u s(cid:1237) (cid:70)(cid:1259)a phân s(cid:1237) ph(cid:1191)i khác 0
(cid:132) (cid:264)(cid:76)(cid:1223)m s(cid:1237) (cid:70)(cid:1259)a sinh viên >=0 và <=10
(cid:132) …
vi(cid:1219)t ch(cid:1133)(cid:1131)ng trình nh(cid:1201)p vào 2 t(cid:1201)p h(cid:1255)p s(cid:1237)
nguyên (A,B), sau (cid:255)ó
a. Tính giao c(cid:1259)a 2 t(cid:1201)p h(cid:1255)p v(cid:1263)a nh(cid:1201)p
b. Ki(cid:1223)m tra xem t(cid:1201)p A có ph(cid:1191)i là con c(cid:1259)a B hay
không
ThThàành ph
nh ph(cid:1195)(cid:1195)n xn x(cid:1265)(cid:1265) lýlý
T.P.TU(cid:1192)N - LTH(cid:264)T T.P.TU(cid:1192)N - LTH(cid:264)T 40 39 9/6/2009 9/6/2009
4. C4. Cáác ph(cid:1133)(cid:1131)ng th
c ph(cid:1133)(cid:1131)ng th(cid:1261)(cid:1261)c/hc/hààm (cid:255)m (cid:255)(cid:1211)(cid:1211)c bic bi(cid:1227)(cid:1227)tt
4. C4. Cáác ph(cid:1133)(cid:1131)ng th
c ph(cid:1133)(cid:1131)ng th(cid:1261)(cid:1261)c/hc/hààm (cid:255)m (cid:255)(cid:1211)(cid:1211)c bic bi(cid:1227)(cid:1227)tt
(cid:132) Ph(cid:1133)(cid:1131)ng th(cid:1261)(cid:70) (cid:255)(cid:1211)c bi(cid:1227)(cid:87) (cid:255)(cid:1133)(cid:1255)c g(cid:1233)i t(cid:1269) (cid:255)(cid:1245)ng ngay
(cid:132) Ph(cid:1133)(cid:1131)ng th(cid:1261)c kh(cid:1251)i t(cid:1189)o - Constructor
(cid:132) Ph(cid:1133)(cid:1131)ng th(cid:1261)c h(cid:1259)y - Destructor
sau khi (cid:255)(cid:1237)i t(cid:1133)(cid:1255)ng (cid:255)(cid:1133)(cid:1255)c t(cid:1189)o ra
(cid:133) (cid:255)(cid:1133)(cid:1255)c g(cid:1233)i t(cid:1269) (cid:255)(cid:1245)ng, ng(cid:1133)(cid:1249)i dùng không (cid:255)(cid:1133)(cid:1255)c g(cid:1233)i l(cid:1189)i
(cid:133) không tr(cid:1191) (cid:79)(cid:1189)i k(cid:1219)t qu(cid:1191)
(cid:132) Có hình th(cid:1261)c tên trùng v(cid:1247)i tên l(cid:1247)p
(cid:132) Th(cid:1133)(cid:1249)ng làm nhi(cid:1227)m v(cid:1257) kh(cid:1251)i t(cid:1189)o d(cid:1267) li(cid:1227)u cho (cid:255)(cid:1237)i
(cid:87)(cid:1133)(cid:1255)ng
(cid:132) Có th(cid:1223) khai báo trùng
Constructor
Constructor
T.P.TU(cid:1192)N - LTH(cid:264)T T.P.TU(cid:1192)N - LTH(cid:264)T 42 41 9/6/2009 9/6/2009
Date.h:
date.cpp:
#include ”date.h”;
Constructor
Constructor
class Date
{
public:
Date::Date()
{
Constructor
Constructor
y = 2000;
m = 1;
d = 1;
}
Date();
Date(int, int, int);
int getYear();
int getMonth();
int getDay();
bool set(int, int, int);
void set(const Date&);
void print();
void copyTo(Date&);
bool equalTo(const Date&);
Date::Date(int yy, int mm, int dd)
{
private:
set(yy, mm, dd);
int y, m, d;
};
T.P.TU(cid:1192)N - LTH(cid:264)T T.P.TU(cid:1192)N - LTH(cid:264)T 44 43 9/6/2009
}
...
9/6/2009
ng (t(cid:1189)(cid:1189)oo))
m xây d(cid:1269)(cid:1269)ng (t
nh ngh(cid:429)(cid:429)aa và khkh(cid:1251)(cid:1251)i ti t(cid:1189)(cid:1189)oo (cid:255)(cid:1237)i t(cid:1133)(cid:1255)ng cùng 1 lúc.
Constructor
Constructor
myCalendar.cpp:
#include ”date.h”;
...
void main()
{
HHààm xây d
(cid:132) Dùng (cid:255)(cid:1223) (cid:255)(cid:255)(cid:1231)(cid:1231)nh ngh
(cid:132) Có tên trùng v(cid:1247)i tên l(cid:1247)p, không có ki(cid:1223)u tr(cid:1191) (cid:89)(cid:1221).
(cid:132) Không g(cid:1233)i tr(cid:1269)c ti(cid:1219)p, s(cid:1217) (cid:255)(cid:1133)(cid:1255)c t(cid:1269) (cid:255)(cid:1245)ng g(cid:1233)i khi kh(cid:1251)i t(cid:1189)o (cid:255)t.
(cid:132)(cid:132) GGáán gin giáá trtr(cid:1231)(cid:1231), c, c(cid:1193)(cid:1193)p vp vùùng nh
nh viên.
ng nh(cid:1247)(cid:1247) cho các dd(cid:903)(cid:903) lili(cid:863)(cid:863)u thu thàành viên
void main() {
class Point
Point {
int xVal, yVal;
public:
Point pt1(10,20);
pt1.OffsetPt(2,2);
……..
Point (int x, int y) {
// Khai báo nào là sai ?
xVal = x; yVal = y;
}
Date d1;
Date womenDay(2007, 3, 8);
Date d[100];
d1.print();
womenDay.print();
void OffsetPt (int x, int y) {
xVal += x; yVal += y;
}
}
Point pt2;
Point pt3();
Point pt4 = Point(5,5);
Point pt5 = new Point(5,5);
……….
};
}
T.P.TU(cid:1192)N - LTH(cid:264)T T.P.TU(cid:1192)N - LTH(cid:264)T 46 45 9/6/2009 9/6/2009
4. C4. Cáác ph(cid:1133)(cid:1131)ng th
c ph(cid:1133)(cid:1131)ng th(cid:1261)(cid:1261)c/hc/hààm (cid:255)m (cid:255)(cid:1211)(cid:1211)c bic bi(cid:1227)(cid:1227)tt
HHààm xây d
m xây d(cid:1269)(cid:1269)ng (t
ng (t(cid:1189)(cid:1189)oo))
class Point
class SetSet {
private:
Point {
int xVal, yVal;
(cid:48)(cid:1221)m
(cid:71)(cid:1215)o
(cid:75)(cid:1131)n
public:
Point () // Hàm xây d(cid:905)ng m(cid:847)c nhiên
int *elems;
int maxCard;
int card;
{ xVal = 0; yVal = 0; }
public:
(cid:132) Ph(cid:1133)(cid:1131)ng th(cid:1261)(cid:70) (cid:255)(cid:1211)c bi(cid:1227)(cid:87) (cid:255)(cid:1133)(cid:1255)c g(cid:1233)i t(cid:1269) (cid:255)(cid:1245)ng ngay
tr(cid:1133)(cid:1247)c khi (cid:255)(cid:1237)i t(cid:1133)(cid:1255)ng (cid:255)(cid:1133)(cid:1255)c gi(cid:1191)i phóng kh(cid:1235)i b(cid:1245)
nh(cid:1247)
Point (int x, int y) {
Set(const int size) {
xVal = x; yVal = y;
(cid:132) Không có tham s(cid:1237), không có ki(cid:1223)u tr(cid:1191) (cid:79)(cid:1189)i, không
}
elems = new int[size];
maxCard = size;
card = 0;
(cid:255)(cid:1231)nh ngh(cid:429)a trùng
}
Point (float len, float angle) {
xVal = (int) (len * cos(angle));
yVal = (int) (len * sin(angle));
……………
(cid:132) Th(cid:1133)(cid:1249)ng (cid:255)(cid:1133)(cid:1255)c dùng vào m(cid:1257)(cid:70) (cid:255)ích (cid:255)(cid:1211)c bi(cid:1227)t là
}
};
void OffsetPt (int , int ); …
void main() {
};
void main() {
Set s1(100);
Set s2(20);
Set s3(1000); …
(cid:71)(cid:1233)n d(cid:1213)p các tài nguyên mà (cid:255)(cid:1237)i t(cid:1133)(cid:1255)ng s(cid:1265) (cid:71)(cid:1257)ng
(cid:133) gi(cid:1191)i phóng b(cid:1245) nh(cid:1247) (cid:255)(cid:1245)ng
(cid:133) (cid:255)óng t(cid:1227)p
Không c(cid:1195)n
ph(cid:1191)i nh(cid:1247)
(cid:74)(cid:1233)i hàm
EmptySet()
EmptySet()
khi kh(cid:1251)i t(cid:1189)o
}
Destructor
Destructor
Point p1;
Point p2(10,20);
Point p3(60.3, 3.14);
}
T.P.TU(cid:1192)N - LTH(cid:264)T T.P.TU(cid:1192)N - LTH(cid:264)T 47 48 9/6/2009 9/6/2009
Date.h:
date.cpp:
#include ”date.h”;
Destructor
Destructor
class Date
{
public:
Date::Date()
{
Destructor
Destructor
y = 2000;
m = 1;
d = 1;
}
Date();
Date(int, int, int);
int getYear();
int getMonth();
int getDay();
bool set(int, int, int);
...
~Date();
Date::~Date()
{
private:
int y, m, d;
cerr << y << m << d <<” bye!” << endl;
};
T.P.TU(cid:1192)N - LTH(cid:264)T T.P.TU(cid:1192)N - LTH(cid:264)T 50 49 9/6/2009
}
...
9/6/2009
c khi nó (cid:255)(cid:1133)(cid:1255)c thu h(cid:1239)i.
Destructor
Destructor
myCalendar.cpp:
#include ”date.h”;
void f1()
{
Date d(2007, 1, 1);
HHààm hm h(cid:1259)(cid:1259)yy
(cid:132) (cid:39)(cid:1233)n d(cid:1213)p 1 (cid:255)(cid:1237)i t(cid:1133)(cid:1255)ng tr(cid:769)tr(cid:769)(cid:883)(cid:883)c khi
(cid:132) Cú pháp: ~TenLop() { ……... }
(cid:132) Không g(cid:1233)i tr(cid:1269)c ti(cid:1219)p, s(cid:1217) (cid:255)(cid:1133)(cid:1255)c t(cid:1269) (cid:255)(cid:1245)ng g(cid:1233)i khi h(cid:1259)y b(cid:1235) (cid:255)t.
nh viên là con tr
(cid:132)(cid:132) Thu h
ng nh(cid:1247)(cid:1247) cho các dd(cid:903)(cid:903) lili(cid:863)(cid:863)u thu thàành viên
Thu h(cid:1239)(cid:1239)i vi vùùng nh
con tr(cid:871)(cid:871).
}
Set TestFunct1(Set s1) {
class SetSet {
private:
Set *s = new Set(50);
return *s;
}
int *elems;
int maxCard;
int card;
void main()
{
void main() {
public:
(cid:55)(cid:1241)ng c(cid:1245)ng
có bao nhiêu
bao nhiêu
ll(cid:1195)(cid:1195)nn hàm h(cid:1259)y
(cid:255)(cid:1133)(cid:1255)c g(cid:1233)i ?
Set s1(40), s2(50);
s2 = TestFunct1(s1);
Set(const int size) { …… }
~Set() { delete[] elems; }
}
Date d;
f1();
….
};
}
T.P.TU(cid:1192)N - LTH(cid:264)T T.P.TU(cid:1192)N - LTH(cid:264)T 51 52 9/6/2009 9/6/2009
5. H5. Hààm bm b(cid:1189)(cid:1189)n, ln, l(cid:1247)(cid:1247)p bp b(cid:1189)(cid:1189)nn
(cid:55)(cid:1201)p Các
(cid:54)(cid:1237) Nguyên
5. H5. Hààm bm b(cid:1189)(cid:1189)n, ln, l(cid:1247)(cid:1247)p bp b(cid:1189)(cid:1189)nn
(cid:132) Cách 1: Khai báo hàm thành viên c(cid:1259)a l(cid:1247)p
friend) c(cid:1259)a l(cid:1247)p RealSet.
Hàm SetToReal
dùng (cid:255)(cid:1223) chuy(cid:1223)n
(cid:87)(cid:1201)p s(cid:1237) nguyên
thành t(cid:1201)p s(cid:1237) th(cid:1269)c
IntSet là bb(cid:1189)(cid:1189)nn (friend
IntSet {
void IntSet::SetToReal (RealSet &set) {
class IntSet
public:
IntSet {
class IntSet
public:
set.card = card;
for (register i = 0; i < card; ++i)
//...
private:
Gi(cid:1267) nguyên (cid:255)(cid:1231)nh
ngh(cid:429)a c(cid:1259)a l(cid:1247)p IntSet
set.elems[i] = (float) elems[i];
//...
private:
}
int elems[maxCard];
int card;
};
int elems[maxCard];
int card;
};
RealSet {
class RealSet
public:
RealSet {
//...
class RealSet
public:
private:
(cid:55)(cid:1201)p Các
(cid:54)(cid:1237) Th(cid:1269)c
SetToReal (RealSet&);
//...
friend void IntSet::SetToReal
Làm th(cid:1219) nào (cid:255)(cid:1223)
th(cid:1269)c hi(cid:1227)n (cid:255)(cid:1133)(cid:1255)c
vi(cid:1227)c truy xu(cid:1193)t
(cid:255)(cid:1219)n thành viên
Private ?
Private
float elems[maxCard];
int card;
private:
Thêm dòng khai báo
Friend cho
hàm thành viên
SetToReal
};
float elems[maxCard];
int card;
};
T.P.TU(cid:1192)N - LTH(cid:264)T T.P.TU(cid:1192)N - LTH(cid:264)T 54 53 9/6/2009 9/6/2009
5. H5. Hààm bm b(cid:1189)(cid:1189)n, ln, l(cid:1247)(cid:1247)p bp b(cid:1189)(cid:1189)nn
(cid:132) Cách 2:
5. H5. Hààm bm b(cid:1189)(cid:1189)n, ln, l(cid:1247)(cid:1247)p bp b(cid:1189)(cid:1189)nn
(cid:132)(cid:132) HHààm bm b(cid:1189)(cid:1189)nn:
(cid:133) Có quy(cid:1221)n truy xu(cid:1193)t (cid:255)(cid:1219)n t(cid:1193)t c(cid:1191) các dd(cid:903)(cid:903) lili(cid:863)(cid:863)uu và
(cid:133) Chuy(cid:1223)n hàm SetToReal ra ngoài ((cid:255)(cid:255)(cid:1245)(cid:1245)c lc l(cid:1201)(cid:1201)pp).
(cid:133) Khai báo hàm (cid:255)ó là bb(cid:1189)(cid:1189)nn (cid:70)(cid:1259)a c(cid:1191) 2 l(cid:1247)p.
hhààmm thành viên (protected + private) c(cid:1259)a 1 l(cid:1247)p.
IntSet {
(cid:132) LL(cid:1247)(cid:1247)p bp b(cid:1189)(cid:1189)nn:
class IntSet
public:
SetToReal (IntSet& iSet,
void SetToReal
RealSet& rSet )
//...
friend void SetToReal (IntSet &, RealSet&);
(cid:133) (cid:55)(cid:1193)t c(cid:1191) các hàm trong l(cid:1247)p b(cid:1189)n: là hàm b(cid:1189)n.
{
private:
int elems[maxCard];
int card;
rSet.card = iSet.card;
for (int i = 0; i < iSet.card; ++i)
rSet.elems[i] =
RealSet {
(float) iSet.elems[i];
};
class RealSet
public:
IntSet { ……….. }
RealSet { // ……….
class IntSet
class RealSet
}
class A;
class B { // ……….
friend class A;
friend class IntSet;
//...
friend void SetToReal (IntSet &, RealSet&);
private:
};
};
float elems[maxCard];
int card;
Hàm (cid:255)(cid:1245)c l(cid:1201)p
là b(cid:1189)n(friend)
(cid:70)(cid:1259)a c(cid:1191) 2 l(cid:1247)p.
};
T.P.TU(cid:1192)N - LTH(cid:264)T T.P.TU(cid:1192)N - LTH(cid:264)T 55 56 9/6/2009 9/6/2009
5. H5. Hààm bm b(cid:1189)(cid:1189)n, ln, l(cid:1247)(cid:1247)p bp b(cid:1189)(cid:1189)nn
5. H5. Hààm bm b(cid:1189)(cid:1189)n, ln, l(cid:1247)(cid:1247)p bp b(cid:1189)(cid:1189)nn
void HoanVi(CDate &a,CDate &b)
{
CStudent is a class
CStudent is a class
class CDate
{
friend CStudent; // friend class
class CStudent
{
private:
private:
int tam;
tam=a.d;a.d=b.d;b.d=tam;
tam=a.m;a.m=b.m;b.m=tam;
tam=a.y;a.y=b.y;b.y=tam;
int id;
CDate ns;
int d,m,y;
}
public:
public:
void setns(int d,int m,int y)
{
ns.d=d; ns.m=m; ns.y=y;
friend void HoanVi(CDate &a,CDate &b);
//friend function
}
};
};
T.P.TU(cid:1192)N - LTH(cid:264)T T.P.TU(cid:1192)N - LTH(cid:264)T 57 58 9/6/2009 9/6/2009
T.P.TU(cid:1192)N - LTH(cid:264)T 59 9/6/2009
}
}
};
}
T.P.TU(cid:1192)N - LTH(cid:264)T T.P.TU(cid:1192)N - LTH(cid:264)T 27 28 9/6/2009 9/6/2009
ThTh(cid:1269)(cid:1269)cc hhàànhnh
3. Thi(cid:1219)(cid:1219)t kt k(cid:1219)(cid:1219) LL(cid:1247)(cid:1247)pp 3. Thi
(cid:132) (cid:55)(cid:1189)o l(cid:1247)p Student
(cid:133) có các thu(cid:1245)c tính tên, mã sinh viên, (cid:255)(cid:76)(cid:1223)m
a. Xác (cid:255)(cid:1231)nh thành ph(cid:1195)n d(cid:1267) li(cid:1227)u b. Xác (cid:255)(cid:1231)nh thành ph(cid:1195)n x(cid:1265) lý
trung bình
(cid:133) ph(cid:1133)(cid:1131)ng th(cid:1261)c print() (cid:255)(cid:1223) in thông tin (cid:132) Vi(cid:1219)t ch(cid:1133)(cid:1131)ng trình (cid:1261)ng d(cid:1257)ng (cid:255)(cid:1223) nh(cid:1201)p
(cid:133) Nhóm kh(cid:1251)i t(cid:1189)o (cid:133) Nhóm truy v(cid:1193)n thông tin (cid:133) Nhóm c(cid:1201)p nh(cid:1201)t thông tin (cid:133) Nhóm x(cid:1265) lý tính toán (cid:133) Nhóm ki(cid:1223)m tra ràng bu(cid:1245)c
thông tin cho m(cid:1245)t s(cid:1237) sinh viên, (cid:86)(cid:1203)p x(cid:1219)p l(cid:1189)i theo th(cid:1261) (cid:87)(cid:1269) (cid:255)(cid:76)(cid:1223)m trung bình t(cid:1263) cao xu(cid:1237)ng th(cid:1193)p.
T.P.TU(cid:1192)N - LTH(cid:264)T T.P.TU(cid:1192)N - LTH(cid:264)T 30 29 9/6/2009 9/6/2009
3. Thi(cid:1219)(cid:1219)t kt k(cid:1219)(cid:1219) LL(cid:1247)(cid:1247)pp 3. Thi
3. Thi(cid:1219)(cid:1219)t kt k(cid:1219)(cid:1219) LL(cid:1247)(cid:1247)pp 3. Thi (cid:132) Nhóm kh(cid:1251)i t(cid:1189)o
(cid:132) Ta c(cid:1195)n bi(cid:1219)t nh(cid:1267)ng thông tin gì v(cid:1221) (cid:80)(cid:1245)t (cid:255)(cid:1237)i
(cid:87)(cid:1133)(cid:1255)ng thu(cid:1245)c l(cid:1247)p này
(cid:133) Xác (cid:255)(cid:1231)nh tr(cid:1189)ng thái ban (cid:255)(cid:1195)u cho (cid:255)(cid:1237)i t(cid:1133)(cid:1255)ng (cid:133) Ví d(cid:1257):
(cid:132) Thành ph(cid:1195)n d(cid:1267) li(cid:1227)u th(cid:1133)(cid:1249)ng (cid:255)(cid:1133)(cid:1255)c (cid:255)(cid:1211)t
(cid:132) KhoiTaoPS (tu=0,mau=1) (cid:132) KhoiTaoSV (ten=“”,…) (cid:132) DSLK (Head=Tail=NULL) (cid:132) ….
trong ph(cid:1189)m vi protected hay private
ThThàành ph
nh ph(cid:1195)(cid:1195)n dn d(cid:1267)(cid:1267) lili(cid:1227)(cid:1227)uu
ThThàành ph
nh ph(cid:1195)(cid:1195)n xn x(cid:1265)(cid:1265) lýlý
T.P.TU(cid:1192)N - LTH(cid:264)T T.P.TU(cid:1192)N - LTH(cid:264)T 31 32 9/6/2009 9/6/2009
3. Thi(cid:1219)(cid:1219)t kt k(cid:1219)(cid:1219) LL(cid:1247)(cid:1247)pp 3. Thi
3. Thi(cid:1219)(cid:1219)t kt k(cid:1219)(cid:1219) LL(cid:1247)(cid:1247)pp 3. Thi
(cid:132) Nhóm truy v(cid:1193)n thông tin
(cid:132) Nhóm truy v(cid:1193)n thông tin
(cid:133) (cid:264)(cid:1237)i v(cid:1247)i các truy v(cid:1193)n (cid:255)(cid:1131)n gi(cid:1191)n, quy (cid:1133)(cid:1247)c (cid:255)(cid:1211)t tên
(cid:133) Các ph(cid:1133)(cid:1131)ng th(cid:1261)c truy v(cid:1193)n (query method) là các ph(cid:1133)(cid:1131)ng th(cid:1261)c dùng (cid:255)(cid:1223) (cid:75)(cid:1235)i v(cid:1221) giá tr(cid:1231) (cid:70)(cid:1259)a các thành viên d(cid:1267) li(cid:1227)u c(cid:1259)a m(cid:1245)t (cid:255)(cid:1237)i t(cid:1133)(cid:1255)ng
(cid:133) Có nhi(cid:1221)u lo(cid:1189)i câu h(cid:1235)i truy v(cid:1193)n có th(cid:1223):
ph(cid:1133)(cid:1131)ngth(cid:1261)c: ti(cid:1221)n t(cid:1237) “get”, ti(cid:1219)p theo là tên c(cid:1259)a thành viên
(cid:132) truy v(cid:1193)n (cid:255)(cid:1131)n gi(cid:1191)n (“giá tr(cid:867) (cid:70)(cid:895)a x là bao nhiêu?”) (cid:132) truy v(cid:1193)n (cid:255)(cid:76)(cid:1221)u ki(cid:1227)n (“thành viên x có l(cid:883)n h(cid:767)n 10
(cid:133) int getX(); (cid:133) int getSize();
không?”)
(cid:132) truy v(cid:1193)n d(cid:1199)n xu(cid:1193)t (“t(cid:877)ng giá tr(cid:867) (cid:70)(cid:895)a các thành viên x
(cid:133) Các lo(cid:1189)i truy v(cid:1193)n khác nên có tên có tính mô t(cid:1191) (cid:133) Truy v(cid:1193)n (cid:255)(cid:76)(cid:1221)u ki(cid:1227)n nên có ti(cid:1221)n t(cid:1237) “is”
và y là bao nhiêu?”)
(cid:133) (cid:264)(cid:1211)c (cid:255)(cid:76)(cid:1223)m quan tr(cid:1233)ng c(cid:1259)a ph(cid:1133)(cid:1131)ng th(cid:1261)c truy v(cid:1193)n là nó không nên thay (cid:255)(cid:1241)i tr(cid:1189)ng thái hi(cid:1227)n t(cid:1189)i c(cid:1259)a (cid:255)(cid:1237)i (cid:87)(cid:1133)(cid:1255)ng
T.P.TU(cid:1192)N - LTH(cid:264)T T.P.TU(cid:1192)N - LTH(cid:264)T 34 33 9/6/2009 9/6/2009
3. Thi(cid:1219)(cid:1219)t kt k(cid:1219)(cid:1219) LL(cid:1247)(cid:1247)pp 3. Thi (cid:132) Truy v(cid:1193)n và c(cid:1201)p nh(cid:1201)t
3. Thi(cid:1219)(cid:1219)t kt k(cid:1219)(cid:1219) LL(cid:1247)(cid:1247)pp 3. Thi (cid:132) (cid:38)(cid:1201)p nh(cid:1201)t thông tin
(cid:133) (cid:49)(cid:1219)u các ph(cid:1133)(cid:1131)ng th(cid:1261)c get/set ch(cid:1229) có nhi(cid:1227)m v(cid:1257) cho ta (cid:255)(cid:1233)c và ghi giá tr(cid:1231) cho các thành viên d(cid:1267) li(cid:1227)u, quy (cid:255)(cid:1231)nh các thành viên private (cid:255)(cid:1223) (cid:255)(cid:1133)(cid:1255)c ích (cid:79)(cid:1255)i gì?
(cid:133) Ng(cid:1133)(cid:1255)c l(cid:1189)i v(cid:1247)i truy v(cid:1193)n thông tin, các ph(cid:1133)(cid:1131)ng th(cid:1261)c c(cid:1201)p nh(cid:1201)t th(cid:1133)(cid:1249)ng thay (cid:255)(cid:1241)i tr(cid:1189)ng thái c(cid:1259)a (cid:255)(cid:1237)i t(cid:1133)(cid:1255)ng b(cid:1205)ng cách s(cid:1265)a (cid:255)(cid:1241)i m(cid:1245)t ho(cid:1211)c nhi(cid:1221)u thành viên d(cid:1267) li(cid:1227)u c(cid:1259)a (cid:255)(cid:1237)i t(cid:1133)(cid:1255)ng (cid:255)ó
(cid:133) Ngoài vi(cid:1227)c b(cid:1191)o v(cid:1227) các nguyên t(cid:1203)c (cid:255)óng gói, ta còn c(cid:1195)n ki(cid:1223)m tra xem giá tr(cid:1231) (cid:80)(cid:1247)i cho thành viên (cid:71)(cid:1267) li(cid:1227)u có h(cid:1255)p l(cid:1227) hay không.
(cid:133) (cid:39)(cid:1189)ng (cid:255)(cid:1131)n gi(cid:1191)n nh(cid:1193)t c(cid:1259)a các ph(cid:1133)(cid:1131)ng th(cid:1261)c (cid:70)(cid:1201)p nh(cid:1201)t là gán m(cid:1245)t giá tr(cid:1231) nào (cid:255)ó cho m(cid:1245)t thành viên d(cid:1267) li(cid:1227)u
(cid:133) (cid:54)(cid:1265) (cid:71)(cid:1257)ng ph(cid:1133)(cid:1131)ng th(cid:1261)c c(cid:1201)p nh(cid:1201)t cho phép ta th(cid:1269)c hi(cid:1227)n vi(cid:1227)c ki(cid:1223)m tra tr(cid:1133)(cid:1247)c khi th(cid:1269)c s(cid:1269) thay (cid:255)(cid:1241)i giá tr(cid:1231) (cid:70)(cid:1259)a thành viên.
(cid:133) (cid:264)(cid:1237)i v(cid:1247)i d(cid:1189)ng c(cid:1201)p nh(cid:1201)t (cid:255)(cid:1131)n gi(cid:1191)n, quy (cid:1133)(cid:1247)c (cid:255)(cid:1211)t tên: dùng ti(cid:1221)n t(cid:1237) “set” kèm theo tên thành viên (cid:70)(cid:1195)n s(cid:1265)a
(cid:133) Cho phép ch(cid:1229) các d(cid:1267) li(cid:1227)u có th(cid:1223) truy v(cid:1193)n hay thay
(cid:133) int setX(int);
(cid:255)(cid:1241)i (cid:255)(cid:1133)(cid:1255)c truy c(cid:1201)p (cid:255)(cid:1219)n.
T.P.TU(cid:1192)N - LTH(cid:264)T T.P.TU(cid:1192)N - LTH(cid:264)T 36 35 9/6/2009 9/6/2009
3. Thi(cid:1219)(cid:1219)t kt k(cid:1219)(cid:1219) LL(cid:1247)(cid:1247)pp 3. Thi
VVíí dd(cid:1257)(cid:1257)
3. Thi(cid:1219)(cid:1219)t kt k(cid:1219)(cid:1219) LL(cid:1247)(cid:1247)pp 3. Thi (cid:132) Nhóm x(cid:1265) lý tính toán
(cid:133) Xác (cid:255)(cid:1231)nh tr(cid:1189)ng thái m(cid:1247)i cho (cid:255)(cid:1237)i t(cid:1133)(cid:1255)ng ho(cid:1211)c
int Student::setGPA(double newGPA) {
cung c(cid:1193)p thông tin t(cid:1241)ng h(cid:1255)p t(cid:1263) các thu(cid:1245)c tính (cid:70)(cid:1259)a (cid:255)(cid:1237)i t(cid:1133)(cid:1255)ng
if ((newGPA >= 0.0) && (newGPA <= 4.0)) {
(cid:133) Ví d(cid:1257):
this->gpa = newGPA; return 0; // Return 0 to indicate success
} else {
return -1; // Return -1 to indicate failure
}
(cid:132) NhanVien.TinhLuong() (cid:132) SinhVien.XepLoai() (cid:132) Nghiem (cid:197) PhuongTrinh.GiaiPhuongTrinh() (cid:132) Giatri (cid:197) PhanSo.TinhGiaTri() (cid:132) …
}
ThThàành ph
nh ph(cid:1195)(cid:1195)n xn x(cid:1265)(cid:1265) lýlý
T.P.TU(cid:1192)N - LTH(cid:264)T T.P.TU(cid:1192)N - LTH(cid:264)T 38 37 9/6/2009 9/6/2009
BBàài ti t(cid:1201)(cid:1201)pp
3. Thi(cid:1219)(cid:1219)t kt k(cid:1219)(cid:1219) LL(cid:1247)(cid:1247)pp 3. Thi
3. Thi(cid:1219)(cid:1219)t kt k(cid:1219)(cid:1219) LL(cid:1247)(cid:1247)pp 3. Thi (cid:132) Nhóm ki(cid:1223)m tra ràng bu(cid:1245)c
(cid:133) Ki(cid:1223)m tra tính (cid:255)úng (cid:255)(cid:1203)ng c(cid:1259)a d(cid:1267) li(cid:1227)u (cid:133) Ví d(cid:1257):
1. (cid:37)(cid:1241) sung vào l(cid:1247)p Date các ph(cid:1133)(cid:1131)ng th(cid:1261)c thu(cid:1245)c các nhóm trên (m(cid:1243)i nhóm ít nh(cid:1193)t (cid:80)(cid:1245)t ph(cid:1133)(cid:1131)ng th(cid:1261)c)
2. Cài (cid:255)(cid:1211)t trên máy l(cid:1247)p t(cid:1201)p h(cid:1255)p (Set) và
(cid:132) Ngày tháng n(cid:259)m h(cid:1255)p l(cid:1227) (cid:132) Ngày vào làm và ngày sinh (cid:132) (cid:48)(cid:1199)u s(cid:1237) (cid:70)(cid:1259)a phân s(cid:1237) ph(cid:1191)i khác 0 (cid:132) (cid:264)(cid:76)(cid:1223)m s(cid:1237) (cid:70)(cid:1259)a sinh viên >=0 và <=10 (cid:132) …
vi(cid:1219)t ch(cid:1133)(cid:1131)ng trình nh(cid:1201)p vào 2 t(cid:1201)p h(cid:1255)p s(cid:1237) nguyên (A,B), sau (cid:255)ó a. Tính giao c(cid:1259)a 2 t(cid:1201)p h(cid:1255)p v(cid:1263)a nh(cid:1201)p b. Ki(cid:1223)m tra xem t(cid:1201)p A có ph(cid:1191)i là con c(cid:1259)a B hay
không
ThThàành ph
nh ph(cid:1195)(cid:1195)n xn x(cid:1265)(cid:1265) lýlý
T.P.TU(cid:1192)N - LTH(cid:264)T T.P.TU(cid:1192)N - LTH(cid:264)T 40 39 9/6/2009 9/6/2009
4. C4. Cáác ph(cid:1133)(cid:1131)ng th
c ph(cid:1133)(cid:1131)ng th(cid:1261)(cid:1261)c/hc/hààm (cid:255)m (cid:255)(cid:1211)(cid:1211)c bic bi(cid:1227)(cid:1227)tt
4. C4. Cáác ph(cid:1133)(cid:1131)ng th
c ph(cid:1133)(cid:1131)ng th(cid:1261)(cid:1261)c/hc/hààm (cid:255)m (cid:255)(cid:1211)(cid:1211)c bic bi(cid:1227)(cid:1227)tt
(cid:132) Ph(cid:1133)(cid:1131)ng th(cid:1261)(cid:70) (cid:255)(cid:1211)c bi(cid:1227)(cid:87) (cid:255)(cid:1133)(cid:1255)c g(cid:1233)i t(cid:1269) (cid:255)(cid:1245)ng ngay
(cid:132) Ph(cid:1133)(cid:1131)ng th(cid:1261)c kh(cid:1251)i t(cid:1189)o - Constructor
(cid:132) Ph(cid:1133)(cid:1131)ng th(cid:1261)c h(cid:1259)y - Destructor
sau khi (cid:255)(cid:1237)i t(cid:1133)(cid:1255)ng (cid:255)(cid:1133)(cid:1255)c t(cid:1189)o ra (cid:133) (cid:255)(cid:1133)(cid:1255)c g(cid:1233)i t(cid:1269) (cid:255)(cid:1245)ng, ng(cid:1133)(cid:1249)i dùng không (cid:255)(cid:1133)(cid:1255)c g(cid:1233)i l(cid:1189)i (cid:133) không tr(cid:1191) (cid:79)(cid:1189)i k(cid:1219)t qu(cid:1191)
(cid:132) Có hình th(cid:1261)c tên trùng v(cid:1247)i tên l(cid:1247)p (cid:132) Th(cid:1133)(cid:1249)ng làm nhi(cid:1227)m v(cid:1257) kh(cid:1251)i t(cid:1189)o d(cid:1267) li(cid:1227)u cho (cid:255)(cid:1237)i
(cid:87)(cid:1133)(cid:1255)ng
(cid:132) Có th(cid:1223) khai báo trùng
Constructor Constructor
T.P.TU(cid:1192)N - LTH(cid:264)T T.P.TU(cid:1192)N - LTH(cid:264)T 42 41 9/6/2009 9/6/2009
Date.h:
date.cpp: #include ”date.h”;
Constructor Constructor
class Date { public:
Date::Date() {
Constructor Constructor
y = 2000; m = 1; d = 1;
}
Date(); Date(int, int, int); int getYear(); int getMonth(); int getDay(); bool set(int, int, int); void set(const Date&); void print(); void copyTo(Date&); bool equalTo(const Date&);
Date::Date(int yy, int mm, int dd) {
private:
set(yy, mm, dd);
int y, m, d;
};
T.P.TU(cid:1192)N - LTH(cid:264)T T.P.TU(cid:1192)N - LTH(cid:264)T 44 43 9/6/2009
} ... 9/6/2009
ng (t(cid:1189)(cid:1189)oo))
m xây d(cid:1269)(cid:1269)ng (t
nh ngh(cid:429)(cid:429)aa và khkh(cid:1251)(cid:1251)i ti t(cid:1189)(cid:1189)oo (cid:255)(cid:1237)i t(cid:1133)(cid:1255)ng cùng 1 lúc.
Constructor Constructor
myCalendar.cpp: #include ”date.h”; ... void main() {
HHààm xây d (cid:132) Dùng (cid:255)(cid:1223) (cid:255)(cid:255)(cid:1231)(cid:1231)nh ngh (cid:132) Có tên trùng v(cid:1247)i tên l(cid:1247)p, không có ki(cid:1223)u tr(cid:1191) (cid:89)(cid:1221). (cid:132) Không g(cid:1233)i tr(cid:1269)c ti(cid:1219)p, s(cid:1217) (cid:255)(cid:1133)(cid:1255)c t(cid:1269) (cid:255)(cid:1245)ng g(cid:1233)i khi kh(cid:1251)i t(cid:1189)o (cid:255)t. (cid:132)(cid:132) GGáán gin giáá trtr(cid:1231)(cid:1231), c, c(cid:1193)(cid:1193)p vp vùùng nh
nh viên. ng nh(cid:1247)(cid:1247) cho các dd(cid:903)(cid:903) lili(cid:863)(cid:863)u thu thàành viên
void main() {
class Point
Point { int xVal, yVal;
public:
Point pt1(10,20); pt1.OffsetPt(2,2); ……..
Point (int x, int y) {
// Khai báo nào là sai ?
xVal = x; yVal = y;
}
Date d1; Date womenDay(2007, 3, 8); Date d[100]; d1.print(); womenDay.print();
void OffsetPt (int x, int y) { xVal += x; yVal += y;
}
}
Point pt2; Point pt3(); Point pt4 = Point(5,5); Point pt5 = new Point(5,5); ……….
};
}
T.P.TU(cid:1192)N - LTH(cid:264)T T.P.TU(cid:1192)N - LTH(cid:264)T 46 45 9/6/2009 9/6/2009
4. C4. Cáác ph(cid:1133)(cid:1131)ng th
c ph(cid:1133)(cid:1131)ng th(cid:1261)(cid:1261)c/hc/hààm (cid:255)m (cid:255)(cid:1211)(cid:1211)c bic bi(cid:1227)(cid:1227)tt
HHààm xây d
m xây d(cid:1269)(cid:1269)ng (t
ng (t(cid:1189)(cid:1189)oo))
class Point
class SetSet { private:
Point { int xVal, yVal;
(cid:48)(cid:1221)m (cid:71)(cid:1215)o (cid:75)(cid:1131)n
public:
Point () // Hàm xây d(cid:905)ng m(cid:847)c nhiên
int *elems; int maxCard; int card;
{ xVal = 0; yVal = 0; }
public:
(cid:132) Ph(cid:1133)(cid:1131)ng th(cid:1261)(cid:70) (cid:255)(cid:1211)c bi(cid:1227)(cid:87) (cid:255)(cid:1133)(cid:1255)c g(cid:1233)i t(cid:1269) (cid:255)(cid:1245)ng ngay tr(cid:1133)(cid:1247)c khi (cid:255)(cid:1237)i t(cid:1133)(cid:1255)ng (cid:255)(cid:1133)(cid:1255)c gi(cid:1191)i phóng kh(cid:1235)i b(cid:1245) nh(cid:1247)
Point (int x, int y) {
Set(const int size) {
xVal = x; yVal = y;
(cid:132) Không có tham s(cid:1237), không có ki(cid:1223)u tr(cid:1191) (cid:79)(cid:1189)i, không
}
elems = new int[size]; maxCard = size; card = 0;
(cid:255)(cid:1231)nh ngh(cid:429)a trùng
}
Point (float len, float angle) { xVal = (int) (len * cos(angle)); yVal = (int) (len * sin(angle));
……………
(cid:132) Th(cid:1133)(cid:1249)ng (cid:255)(cid:1133)(cid:1255)c dùng vào m(cid:1257)(cid:70) (cid:255)ích (cid:255)(cid:1211)c bi(cid:1227)t là
}
};
void OffsetPt (int , int ); …
void main() {
}; void main() {
Set s1(100); Set s2(20); Set s3(1000); …
(cid:71)(cid:1233)n d(cid:1213)p các tài nguyên mà (cid:255)(cid:1237)i t(cid:1133)(cid:1255)ng s(cid:1265) (cid:71)(cid:1257)ng (cid:133) gi(cid:1191)i phóng b(cid:1245) nh(cid:1247) (cid:255)(cid:1245)ng (cid:133) (cid:255)óng t(cid:1227)p
Không c(cid:1195)n ph(cid:1191)i nh(cid:1247) (cid:74)(cid:1233)i hàm EmptySet() EmptySet() khi kh(cid:1251)i t(cid:1189)o
}
Destructor Destructor
Point p1; Point p2(10,20); Point p3(60.3, 3.14);
}
T.P.TU(cid:1192)N - LTH(cid:264)T T.P.TU(cid:1192)N - LTH(cid:264)T 47 48 9/6/2009 9/6/2009
Date.h:
date.cpp: #include ”date.h”;
Destructor Destructor
class Date { public:
Date::Date() {
Destructor Destructor
y = 2000; m = 1; d = 1;
}
Date(); Date(int, int, int); int getYear(); int getMonth(); int getDay(); bool set(int, int, int);
...
~Date();
Date::~Date() {
private:
int y, m, d;
cerr << y << m << d <<” bye!” << endl;
};
T.P.TU(cid:1192)N - LTH(cid:264)T T.P.TU(cid:1192)N - LTH(cid:264)T 50 49 9/6/2009
} ... 9/6/2009
c khi nó (cid:255)(cid:1133)(cid:1255)c thu h(cid:1239)i.
Destructor Destructor
myCalendar.cpp: #include ”date.h”; void f1() {
Date d(2007, 1, 1);
HHààm hm h(cid:1259)(cid:1259)yy (cid:132) (cid:39)(cid:1233)n d(cid:1213)p 1 (cid:255)(cid:1237)i t(cid:1133)(cid:1255)ng tr(cid:769)tr(cid:769)(cid:883)(cid:883)c khi (cid:132) Cú pháp: ~TenLop() { ……... } (cid:132) Không g(cid:1233)i tr(cid:1269)c ti(cid:1219)p, s(cid:1217) (cid:255)(cid:1133)(cid:1255)c t(cid:1269) (cid:255)(cid:1245)ng g(cid:1233)i khi h(cid:1259)y b(cid:1235) (cid:255)t. nh viên là con tr (cid:132)(cid:132) Thu h
ng nh(cid:1247)(cid:1247) cho các dd(cid:903)(cid:903) lili(cid:863)(cid:863)u thu thàành viên
Thu h(cid:1239)(cid:1239)i vi vùùng nh
con tr(cid:871)(cid:871).
}
Set TestFunct1(Set s1) {
class SetSet { private:
Set *s = new Set(50); return *s;
}
int *elems; int maxCard; int card;
void main() {
void main() {
public:
(cid:55)(cid:1241)ng c(cid:1245)ng có bao nhiêu bao nhiêu ll(cid:1195)(cid:1195)nn hàm h(cid:1259)y (cid:255)(cid:1133)(cid:1255)c g(cid:1233)i ?
Set s1(40), s2(50); s2 = TestFunct1(s1);
Set(const int size) { …… } ~Set() { delete[] elems; }
}
Date d; f1();
….
};
}
T.P.TU(cid:1192)N - LTH(cid:264)T T.P.TU(cid:1192)N - LTH(cid:264)T 51 52 9/6/2009 9/6/2009
5. H5. Hààm bm b(cid:1189)(cid:1189)n, ln, l(cid:1247)(cid:1247)p bp b(cid:1189)(cid:1189)nn
(cid:55)(cid:1201)p Các (cid:54)(cid:1237) Nguyên
5. H5. Hààm bm b(cid:1189)(cid:1189)n, ln, l(cid:1247)(cid:1247)p bp b(cid:1189)(cid:1189)nn (cid:132) Cách 1: Khai báo hàm thành viên c(cid:1259)a l(cid:1247)p
friend) c(cid:1259)a l(cid:1247)p RealSet.
Hàm SetToReal dùng (cid:255)(cid:1223) chuy(cid:1223)n (cid:87)(cid:1201)p s(cid:1237) nguyên thành t(cid:1201)p s(cid:1237) th(cid:1269)c
IntSet là bb(cid:1189)(cid:1189)nn (friend
IntSet {
void IntSet::SetToReal (RealSet &set) {
class IntSet public:
IntSet {
class IntSet public:
set.card = card; for (register i = 0; i < card; ++i)
//... private:
Gi(cid:1267) nguyên (cid:255)(cid:1231)nh ngh(cid:429)a c(cid:1259)a l(cid:1247)p IntSet
set.elems[i] = (float) elems[i];
//... private:
}
int elems[maxCard]; int card;
};
int elems[maxCard]; int card;
};
RealSet {
class RealSet public:
RealSet {
//...
class RealSet public:
private:
(cid:55)(cid:1201)p Các (cid:54)(cid:1237) Th(cid:1269)c
SetToReal (RealSet&);
//... friend void IntSet::SetToReal
Làm th(cid:1219) nào (cid:255)(cid:1223) th(cid:1269)c hi(cid:1227)n (cid:255)(cid:1133)(cid:1255)c vi(cid:1227)c truy xu(cid:1193)t (cid:255)(cid:1219)n thành viên Private ? Private
float elems[maxCard]; int card;
private:
Thêm dòng khai báo Friend cho hàm thành viên SetToReal
};
float elems[maxCard]; int card;
};
T.P.TU(cid:1192)N - LTH(cid:264)T T.P.TU(cid:1192)N - LTH(cid:264)T 54 53 9/6/2009 9/6/2009
5. H5. Hààm bm b(cid:1189)(cid:1189)n, ln, l(cid:1247)(cid:1247)p bp b(cid:1189)(cid:1189)nn (cid:132) Cách 2:
5. H5. Hààm bm b(cid:1189)(cid:1189)n, ln, l(cid:1247)(cid:1247)p bp b(cid:1189)(cid:1189)nn (cid:132)(cid:132) HHààm bm b(cid:1189)(cid:1189)nn:
(cid:133) Có quy(cid:1221)n truy xu(cid:1193)t (cid:255)(cid:1219)n t(cid:1193)t c(cid:1191) các dd(cid:903)(cid:903) lili(cid:863)(cid:863)uu và
(cid:133) Chuy(cid:1223)n hàm SetToReal ra ngoài ((cid:255)(cid:255)(cid:1245)(cid:1245)c lc l(cid:1201)(cid:1201)pp). (cid:133) Khai báo hàm (cid:255)ó là bb(cid:1189)(cid:1189)nn (cid:70)(cid:1259)a c(cid:1191) 2 l(cid:1247)p.
hhààmm thành viên (protected + private) c(cid:1259)a 1 l(cid:1247)p.
IntSet {
(cid:132) LL(cid:1247)(cid:1247)p bp b(cid:1189)(cid:1189)nn:
class IntSet public:
SetToReal (IntSet& iSet,
void SetToReal
RealSet& rSet )
//... friend void SetToReal (IntSet &, RealSet&);
(cid:133) (cid:55)(cid:1193)t c(cid:1191) các hàm trong l(cid:1247)p b(cid:1189)n: là hàm b(cid:1189)n.
{
private:
int elems[maxCard]; int card;
rSet.card = iSet.card; for (int i = 0; i < iSet.card; ++i)
rSet.elems[i] =
RealSet {
(float) iSet.elems[i];
}; class RealSet public:
IntSet { ……….. } RealSet { // ……….
class IntSet class RealSet
}
class A; class B { // ………. friend class A;
friend class IntSet;
//... friend void SetToReal (IntSet &, RealSet&);
private:
};
};
float elems[maxCard]; int card;
Hàm (cid:255)(cid:1245)c l(cid:1201)p là b(cid:1189)n(friend) (cid:70)(cid:1259)a c(cid:1191) 2 l(cid:1247)p.
};
T.P.TU(cid:1192)N - LTH(cid:264)T T.P.TU(cid:1192)N - LTH(cid:264)T 55 56 9/6/2009 9/6/2009
5. H5. Hààm bm b(cid:1189)(cid:1189)n, ln, l(cid:1247)(cid:1247)p bp b(cid:1189)(cid:1189)nn
5. H5. Hààm bm b(cid:1189)(cid:1189)n, ln, l(cid:1247)(cid:1247)p bp b(cid:1189)(cid:1189)nn
void HoanVi(CDate &a,CDate &b) {
CStudent is a class CStudent is a class
class CDate {
friend CStudent; // friend class
class CStudent { private:
private:
int tam; tam=a.d;a.d=b.d;b.d=tam; tam=a.m;a.m=b.m;b.m=tam; tam=a.y;a.y=b.y;b.y=tam;
int id; CDate ns;
int d,m,y;
}
public:
public:
void setns(int d,int m,int y) {
ns.d=d; ns.m=m; ns.y=y;
friend void HoanVi(CDate &a,CDate &b); //friend function
}
};
};
T.P.TU(cid:1192)N - LTH(cid:264)T T.P.TU(cid:1192)N - LTH(cid:264)T 57 58 9/6/2009 9/6/2009
T.P.TU(cid:1192)N - LTH(cid:264)T 59 9/6/2009

