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