6. Khoa C担ng Ngh畛 Th担ng Tin - 畉i H畛c C畉n Th董 6
V鱈 d畛 (tt) - m担 t畉 trong b畛 nh畛V鱈 d畛 (tt) - m担 t畉 trong b畛 nh畛
Ch動董ng 9
*contacts 1
*contacts 2
*contacts 3
*contacts i
*contacts n
**contacts
dirSize
maxSize
**contacts
dirSize
maxSize
*recent*recent
Contact 1
Contact 2
Contact i
*contacts 1
*contacts 2
*contacts 3
*contacts i
*contacts n
Contact 1
Contact 2
Contact i
ContactDir
SmartDir
7. Khoa C担ng Ngh畛 Th担ng Tin - 畉i H畛c C畉n Th董 7
Hm x但y d畛ng v hm h畛yHm x但y d畛ng v hm h畛y
Trong th畛a k畉, khi kh畛i t畉o 畛i t動畛ng:
Hm x但y d畛ng c畛a l畛p cha s畉 動畛c g畛i tr動畛c
Sau 坦 m畛i l hm x但y d畛ng c畛a l畛p con.
Trong th畛a k畉, khi h畛y b畛 畛i t動畛ng:
Hm h畛y c畛a l畛p con s畉 動畛c g畛i tr動畛c
Sau 坦 m畛i l hm h畛y c畛a l畛p cha.
Ch動董ng 9
AA
BB
CC
8. Khoa C担ng Ngh畛 Th担ng Tin - 畉i H畛c C畉n Th董 8
Hm x但y d畛ng v hm h畛y (tt)Hm x但y d畛ng v hm h畛y (tt)
Ch動董ng 9
class SmartDirSmartDir : public ContactDir {
private:
char *recent; // ten duoc tim gan nhat
public:
SmartDir(const int max) : ContactDir(max)
{ recent = 0; }
SmartDir(const SmartDir& sd): ContactDir(sd)
{ recent = 0; }
~SmartDir() {
delete recent;
}
// .
};
G畛i hm
x但y d畛ng
c畛a l畛p cha
Thu h畛i v湛ng nh畛
c畛a con tr畛 thnh vi棚n
c畛a l畛p con n畉u 達
c畉p v湛ng nh畛 trong
hm x但y d畛ng.
9. Khoa C担ng Ngh畛 Th担ng Tin - 畉i H畛c C畉n Th董 9
Thnh vi棚n l畛p 動畛c b畉o v畛Thnh vi棚n l畛p 動畛c b畉o v畛
Th畛a k畉:
C坦 t畉t c畉 c叩c d畛 li畛u v hm thnh vi棚n.
Kh担ng 動畛c truy xu畉t 畉n thnh vi棚n private.
Thu畛c t鱈nh truy c畉p protectedprotected:
Cho ph辿p l畛p con truy xu畉t.
Ch動董ng 9
class ContactDirContactDir {
//...
protected:
int Lookup (const char *name);
Contact **contacts; // ds cac doi tac
int dirSize; // kich thuoc hien tai
int maxSize; // kich thuoc toi da
};
class Foo {
public:
// cac thanh vien chung...
private:
// cac thanh vien rieng...
protected:
// cac thanh vien duoc bao ve...
public:
// cac thanh vien chung nua...
protected:
// cac thanh vien duoc bao ve nua...
};
10. Khoa C担ng Ngh畛 Th担ng Tin - 畉i H畛c C畉n Th董 10
L畛p c董 s畛 ri棚ng, chung v 動畛c b畉o v畛L畛p c董 s畛 ri棚ng, chung v 動畛c b畉o v畛
Ch動董ng 9
class AA {
private:
int x;
void Fx (void);
public:
int y;
void Fy (void);
protected:
int z;
void Fz (void);
};
class BB : A { // Th畛a k畉 d畉ng private
.
};
class CC : private A { // A l l畛p c董 s畛 ri棚ng c畛a B
};
class DD : public A { // A l l畛p c董 s畛 chung c畛a C
};
class EE : protected A { // A: l畛p c董 s畛 動畛c b畉o v畛
.
};
L畛p c董 s畛 Th畛a k畉 public Th畛a k畉 private Th畛a k畉 protected
privateprivate _ _ _
publicpublic public private protected
protectedprotected protected private protected
11. Khoa C担ng Ngh畛 Th担ng Tin - 畉i H畛c C畉n Th董 11
a th畛a k畉芯a th畛a k畉
Ch動董ng 9
OptionListOptionList WindowWindow
MenuMenu
class WindowWindow {
public:
Window (Rect &);
~Window (void);
//...
};
class Menu
: public OptionList, public Window {
public:
Menu (int n, Rect &bounds);
~Menu (void);
//...
};
Menu::Menu (int n, Rect &bounds) :
OptionList(n), Window(bounds)
{ /* ... */ }
OptionList object
OptionList
data members
Window object
Window
data members
Menu object
OptionList
data members
Window
data members
Menu
data members
class OptionListOptionList {
public:
OptionList (int n);
~OptionList ();
//...
};
12. Khoa C担ng Ngh畛 Th担ng Tin - 畉i H畛c C畉n Th董 12
S畛 m董 h畛 trong a th畛a k畉S畛 m董 h畛 trong a th畛a k畉
Ch動董ng 9
class OptionListOptionList {
public:
//
void Highlight (int part);
};
class WindowWindow {
public:
//
void Highlight (int part);
};
class Menu : public OptionList,
public Window
{ . };
void main() {
Menu m1(.);
m1.Highlight(10);
.
}
G畛iG畛i
hmhm
c畛a l畛pc畛a l畛p
no ?no ?
void main() {
Menu m1(.);
m1.OptionList::::Highlight(10);
m1.Window::::Highlight(20);
.
}
Ch畛 r探 hmCh畛 r探 hm
c畛a l畛p noc畛a l畛p no
x畛 l箪x畛 l箪
Hm c湛ng t棚nHm c湛ng t棚n
13. Khoa C担ng Ngh畛 Th担ng Tin - 畉i H畛c C畉n Th董 13
Chuy畛n ki畛uChuy畛n ki畛u
C坦 s畉n 1 ph辿p chuy畛n ki畛u kh担ng t動畛ng minh:
畛i t動畛ng l畛p cha = 畛i t動畛ng l畛p con;
p d畛ng cho c畉 畛i t動畛ng, tham chi畉u v con tr畛.
Ch動董ng 9
Kh担ng 動畛c th畛c hi畛n ph辿p g叩n ng動畛c:
畛i t動畛ng l畛p con = 畛i t動畛ng l畛p cha; // SAISAI
Menu m(n, bounds);
Window win = m;
Window &wRef = m;
Window *wPtr = &menu;
class MenuMenu : public OptionList, public Window {
public:
//...
Menu (Window&);
};
N畉u mu畛n th畛c
hi畛n
ph畉i t畛 畛nh ngh挑a
ph辿p 辿p ki畛u
Window
data members
OptionList data members
Window data members
Menu data members
win
m
14. Khoa C担ng Ngh畛 Th担ng Tin - 畉i H畛c C畉n Th董 14
Hm 畉oHm 畉o
Li棚n k畉t t挑nh (static binding):
X叩c 畛nh khi bi棚n d畛ch ch動董ng tr狸nh.
D湛ng hm thnh vi棚n.
G畛i hm c畛a l畛p c董 s畛 (l畛p cha).
Ch動董ng 9
class ContactDirContactDir {
//...
public:
int Lookup (const char *name);
//...
};
class SortedDirSortedDir : public ContactDir {
public:
SortedDir(const int max) : ContactDir(max) {}
int Lookup(const char *name);
};
void main() {
ContactDir c1(10);
SortedDir *p; p = &c1;
cout<<p->Lookup(ABC);
.
}
G畛iG畛i
hmhm
no ?no ?