Lập trình hướng đối tượng tren C/C++ - OOP 09 interface and polymorphism - Pdf 95

Interface Interface
vàvà
ĐaĐa
hìnhhình
GV. GV. NguyễnNguyễn Minh Minh HuyHuy
Interface Interface
vàvà
ĐaĐa
hìnhhình
1Phương pháp lập trình hướng đối tượng - Nguyễn Minh Huy
NộiNội dungdung
 KháiKhái niệmniệm interface.interface.
 HàmHàm ảoảo vàvà liênliên kếtkết độngđộng
 PhươngPhương thứcthức hủyhủy ảoảo
2Phương pháp lập trình hướng đối tượng - Nguyễn Minh Huy
NộiNội dungdung
 KháiKhái niệmniệm interface.interface.
 HàmHàm ảoảo vàvà liênliên kếtkết độngđộng
 PhươngPhương thứcthức hủyhủy ảoảo
3Phương pháp lập trình hướng đối tượng - Nguyễn Minh Huy
KháiKhái niệmniệm interfaceinterface
 GiaoGiao tiếptiếp giữagiữa đốiđối tượngtượng vàvà bênbên ngoàingoài::

QuyQuy tắctắc hộphộp đenđen::
 ThuộcThuộc tínhtính: : private, private, hạnhạn chếchế truytruy xuấtxuất
 PhươngPhương thứcthức: : public, public, cungcung cấpcấp tínhtính năngnăng
 ĐốiĐối tượngtượng giaogiao tiếptiếp qua qua phươngphương thứcthức

PhầnPhần
khaikhai
báobáo

Nhận interface PhanSo
class class PhanSoPhanSo
{{
private:private:
intint m_tum_tu;;
intint m_maum_mau;;
public:public:
PhanSoPhanSo((intint tutu, , intint maumau););
PhanSoPhanSo rutGonrutGon();();
PhanSoPhanSo nghichDaonghichDao();();
};};
5Phương pháp lập trình hướng đối tượng - Nguyễn Minh Huy
void void
xuLyxuLy
((
PhanSoPhanSo
pp
))
{{ // // XửXử lýlý trêntrên pp
}}
void main()void main()
{{
PhanSoPhanSo p1(1, 2);p1(1, 2);
PhanSoPhanSo p2(1, 3);p2(1, 3);
xuLyxuLy(p1);(p1);
xuLyxuLy(p2);(p2);
}}
KháiKhái niệmniệm interfaceinterface
 Interface Interface trongtrong kếkế thừathừa::


KháiKhái niệmniệm interfaceinterface
 Interface Interface vàvà trongtrong kếkế thừathừa::
class class AnimalAnimal
{{
public:public:
void talk() void talk() { { coutcout << “Don’t talk”; }<< “Don’t talk”; }
};};
class class
CatCat
: public : public
AnimalAnimal
void void xuLyxuLy((Animal pAnimal p))
{{
p.talkp.talk();();
}}
void main()void main()
{{
Animal a;Animal a;
Nhận interface Animal
class class
CatCat
: public : public
AnimalAnimal
{{
public:public:
void talk() void talk() { { coutcout << “<< “MeoMeo meomeo”; }”; }
};};
class class DogDog: public : public AnimalAnimal
{{
public:public:

CatCat
: public : public
AnimalAnimal
void void xuLyxuLy((Animal pAnimal p))
{{
p.talkp.talk();();
}}
void main()void main()
{{
CatCat
c;c;
Liên kết
cài đặt
Animal
class class
CatCat
: public : public
AnimalAnimal
{{
public:public:
void talk() void talk() { { coutcout << “<< “MeoMeo meomeo”; }”; }
};};
class class DogDog: public : public AnimalAnimal
{{
public:public:
void talk() void talk() { { coutcout << “<< “GauGau gaugau”; }”; }
};};
9Phương pháp lập trình hướng đối tượng - Nguyễn Minh Huy
CatCat
c;c;



LờiLời
gọigọi
hàmhàm
chỉchỉ
gắngắn
vớivới
interface interface

LiênLiên
kếtkết
độngđộng

 BỏBỏ ngỏngỏ phầnphần càicài đặtđặt
 ĐượcĐược gắngắn độngđộng vàovào lúclúc chạychạy
 TùyTùy thuộcthuộc đốiđối tượngtượng gọigọi phươngphương thứcthức
 TrongTrong C++:C++:
 KhaiKhai báobáo: : virtualvirtual <<ChữChữ kýký hàmhàm>;>;
 ChỉChỉ dùngdùng đượcđược vớivới con con trỏtrỏ đốiđối tượngtượng
10Phương pháp lập trình hướng đối tượng - Nguyễn Minh Huy
HàmHàm ảoảo vàvà liênliên kếtkết độngđộng
 VấnVấn đềđề liênliên kếtkết tĩnhtĩnh trongtrong C++:C++:
class class AnimalAnimal
{{
public:public:
virtual void talk() virtual void talk() { { coutcout << “Don’t talk”; }<< “Don’t talk”; }
};};
class class
CatCat

CatCat
c;c;
DogDog d;d;
xuLyxuLy(c);(c);
xuLyxuLy(d);(d);
Animal *p;Animal *p;
p = &c;p = &c;
pp >talk();>talk();
p = &d;p = &d;
pp >talk();>talk();
}}
cài
đặt
Liên kết
interface
Animal
Bỏ ngõ
cài đặt
HàmHàm ảoảo vàvà liênliên kếtkết độngđộng
 XâyXây dựngdựng interface interface trongtrong C++:C++:

C++ C++ giảgiả lậplập interface interface bằngbằng abstract class.abstract class.
 ĐặcĐặc điểmđiểm abstract class:abstract class:
 KhaiKhai báobáo lớplớp: : dùngdùng từtừ khóakhóa “abstract”“abstract”
 KhaiKhai báobáo phươngphương thứcthức: : hàmhàm ảoảo thêmthêm ““dấudấu =“=“ ở ở cuốicuối
KhôngKhông
cócó
thuộcthuộc
tínhtính
vàvà

virtual void talk() = 0;virtual void talk() = 0;
};};
class class
CatCat
: public : public
AnimalAnimal
void void xuLyxuLy((Animal *pAnimal *p))
{{
pp >talk();>talk();
}}
void main()void main()
{{
CatCat
c;c;
class class
CatCat
: public : public
AnimalAnimal
{{
public:public:
void talk() void talk() { { coutcout << “<< “MeoMeo meomeo”; }”; }
};};
class class DogDog: public : public AnimalAnimal
{{
public:public:
void talk() void talk() { { coutcout << “<< “GauGau gaugau”; }”; }
};};
13Phương pháp lập trình hướng đối tượng - Nguyễn Minh Huy
CatCat
c;c;

 HàmHàm ảoảo vàvà liênliên kếtkết độngđộng
 PhươngPhương thứcthức hủyhủy ảoảo
15Phương pháp lập trình hướng đối tượng - Nguyễn Minh Huy
PhươngPhương thứcthức hủyhủy ảoảo
 XétXét víví dụdụ::
class class GiaoVienGiaoVien
{{
private:private:
charchar **m_hoTenm_hoTen;;
public:public:
~~GiaoVienGiaoVien() () { delete { delete m_hoTenm_hoTen; }; }
};};
void main()void main()
{{
GiaoVienGiaoVien *p1 = new *p1 = new GiaoVienGiaoVien;;
delete p1;delete p1;
GVCNGVCN *p2 = new GVCN;*p2 = new GVCN;
delete p2;delete p2;
};};
class class GVCNGVCN : public : public GiaoVienGiaoVien
{{
private:private:
charchar **m_strLopCNm_strLopCN;;
public:public:
~GVCN() ~GVCN() { delete { delete m_strLopCNm_strLopCN; }; }
};};
16Phương pháp lập trình hướng đối tượng - Nguyễn Minh Huy
delete p2;delete p2;
GiaoVienGiaoVien *p3 = new GVCN;*p3 = new GVCN;
delete p3;delete p3;

HàmHàm
ảoảo
::
 ChỉChỉ ràngràng buộcbuộc vớivới interface, interface, khôngkhông ràngràng buộcbuộc càicài đặtđặt
 KhaiKhai báobáo dùngdùng “virtual”“virtual”
 PhươngPhương thứcthức hủyhủy ảoảo::

PhươngPhương thứcthức hủyhủy phảiphải luônluôn làlà hàmhàm ảoảo
18Phương pháp lập trình hướng đối tượng - Nguyễn Minh Huy
BàiBài tậptập
 BàiBài tậptập 9.1:9.1:
class Aclass A
{ public:{ public:
[[yyyyyy]] void f1() { void f1() { coutcout << “Good morning.<< “Good morning.\\n”; n”; f2();f2(); }}
[[zzzzzz]] void f2() { void f2() { coutcout << “Good afternoon.<< “Good afternoon.\\n”; }n”; }
};};
class B: public Aclass B: public A
{ public:{ public:
Cho Cho biếtbiết nhữngnhững gìgì xuấtxuất hiệnhiện
trêntrên mànmàn hìnhhình trongtrong cáccác
trườngtrường hợphợp::
a) [a) [yyyyyy] ] trốngtrống, [, [zzzzzz] ] trốngtrống
b) [b) [yyyyyy] ] trốngtrống, [, [zzzzzz] virtual.] virtual.
c) [c) [
yyyyyy
] virtual, [] virtual, [
zzzzzz
] ]
trốngtrống


trongtrong
danhdanh
sáchsách

NếuNếu thêmthêm vàovào loạiloại hìnhhình mớimới làlà hìnhhình tròntròn
HìnhHình tròntròn: : biểubiểu diễndiễn bởibởi tâmtâm vàvà bánbán kínhkính
KhiKhi đóđó, , chươngchương trìnhtrình sẽsẽ thaythay đổiđổi nhưnhư thếthế nàonào??
20Phương pháp lập trình hướng đối tượng - Nguyễn Minh Huy
BàiBài tậptập
 BàiBài tậptập 9.3:9.3:
Cho Cho bảngbảng tốctốc độđộ chạychạy củacủa cáccác độngđộng vậtvật nhưnhư sausau::
Động vậtĐộng vật Tốc độTốc độ
BáoBáo 100km/h100km/h
Linh dươngLinh dương 80km/h80km/h
SưSư
tửtử
70km/h70km/h
ViếtViết hàmhàm nhậnnhận vàovào 2 2 độngđộng vậtvật trongtrong bảngbảng trêntrên vàvà
so so sánhsánh tốctốc độđộ chạychạy giữagiữa chúngchúng
NếuNếu thêmthêm vàovào con con ngựangựa chạychạy 60km/h, 60km/h, khikhi đóđó
chươngchương trìnhtrình sẽsẽ thaythay đổiđổi nhưnhư thếthế nàonào??
21Phương pháp lập trình hướng đối tượng - Nguyễn Minh Huy
SưSư
tửtử
70km/h70km/h
ChóChó 60km/h60km/h
NgườiNgười 30km/h30km/h
BàiBài tậptập
 BàiBài tậptập 9.4:9.4:
Cho Cho bảngbảng cáchcách thứcthức hoạthoạt độngđộng củacủa cáccác loàiloài độngđộng vậtvật nhưnhư sausau::

U con = U con =
dv.deTrungdv.deTrung
();();
dv2.boi();dv2.boi();
}}
void void thiBaythiBay((YY dv1, dv1, YY dv2)dv2)
{{
dv1.bay();dv1.bay();
dv2.bay();dv2.bay();
}}
void void thuanHoaThuthuanHoaThu((ZZ dvdv))
{{
Z con = Z con = dv.deCondv.deCon();();
}}
23Phương pháp lập trình hướng đối tượng - Nguyễn Minh Huy
U con = U con =
dv.deTrungdv.deTrung
();();
}}
void void nuoiBoSatnuoiBoSat((VV dvdv))
{{
dv.bo();dv.bo();
dv.anTapdv.anTap();();
V con = V con = dv.deTrungdv.deTrung();();
}}
BàiBài tậptập
 BàiBài tậptập 9.5 (*):9.5 (*):
Cho Cho lớplớp Line Line vàvà Rectangle Rectangle dùngdùng vẽvẽ đườngđường thẳngthẳng vàvà hìnhhình chữchữ nhậtnhật::
class class LineLine
{{


Nhờ tải bản gốc
Music ♫

Copyright: Tài liệu đại học © DMCA.com Protection Status