HàmHàm
toántoán
tửtử
GV. GV. NguyễnNguyễn Minh Minh HuyHuy
HàmHàm
toántoán
tửtử
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 cơcơ bảnbản
Con Con trỏtrỏ this.this.
HàmHàm Friend.Friend.
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 cơcơ bảnbản
Con Con trỏtrỏ this.this.
HàmHàm Friend.Friend.
3Phương pháp lập trình hướng đối tượng - Nguyễn Minh Huy
KháiKhái niệmniệm cơcơ bảnbản
SựSự kháckhác biệtbiệt giữagiữa intint vàvà PhanSoPhanSo??
// // ThaoThao táctác trêntrên kiểukiểu intint
void main()void main()
{{
intint a, b;a, b;
intint c = a + b;c = a + b;
}}
// // ThaoThao táctác trêntrên kiểukiểu PhanSoPhanSo
void void mainmain()()
{{
PhanSoPhanSo p1, p2;p1, p2;
PhansoPhanso p3 = p1.cong(p2);p3 = p1.cong(p2);
}}
ChươngChương trìnhtrình tìmtìm min min cócó gìgì saisai??
template <class T>template <class T>
TT timMintimMin((TT a, a, TT b)b)
{{
return (a < b) ? a : b;return (a < b) ? a : b;
}}
4Phương pháp lập trình hướng đối tượng - Nguyễn Minh Huy
void main()void main()
{{
intint a, b;a, b;
intint c = c = timMintimMin(a, b);(a, b);
PhanSoPhanSo p1, p2;p1, p2;
PhanSoPhanSo p3 = p3 = timMintimMin(p1, p2);(p1, p2);
}}
KháiKhái niệmniệm cơcơ bảnbản
HàmHàm toántoán tửtử::
KháiKhái niệmniệm::
MộtMột hàmhàm trongtrong chươngchương trìnhtrình
CóCó têntên làlà kýký hiệuhiệu toántoán tửtử
DùngDùng từtừ khóakhóa “operator” “operator” đểđể phânphân biệtbiệt ((trongtrong C++).C++).
PhanSoPhanSo
operator +operator +
(const (const
PhanSoPhanSo
&p1, const &p1, const
PhanSoPhanSo
&p2);&p2);
PhanSoPhanSo
operator +operator +
(const (const
PhanSoPhanSo
&p1, const &p1, const
PhanSoPhanSo
&p2);&p2);
CôngCông dụngdụng::
SửSử dụngdụng toántoán tửtử trêntrên kiểukiểu ngườingười dùngdùng địnhđịnh nghĩanghĩa
PhanSoPhanSo p3 = p1 p3 = p1 ++ p2;p2;
ĐịnhĐịnh nghĩanghĩa nhiềunhiều cáchcách thựcthực hiệnhiện toántoán tửtử ((nnạpạp chồngchồng hàmhàm).).
float float opeartoropeartor ++(const (const PhanSoPhanSo &p, float so);&p, float so);
5Phương pháp lập trình hướng đối tượng - Nguyễn Minh Huy
KháiKhái niệmniệm cơcơ bảnbản
PhânPhân loạiloại hàmhàm toántoán tửtử::
ToánToán tửtử độcđộc lậplập::
KhôngKhông thuộcthuộc lớplớp nàonào
SốSố lượnglượng thamtham sốsố = = ngôingôi toántoán tửtử
PhanSoPhanSo operator +operator +(const (const PhanSoPhanSo &p1, const &p1, const PhanSoPhanSo &p2);&p2);
boolbool
operator >operator >
(const (const
PhanSoPhanSo
&p1, const &p1, const
PhanSoPhanSo
&p2);&p2);
boolbool
operator >operator >
(const (const
PhanSoPhanSo
&p1, const &p1, const
PhanSoPhanSo
&p2);&p2);
ToánToán tửtử thuộcthuộc lớplớp::
LàLà phươngphương thứcthức củacủa lớplớp
SốSố lượnglượng thamtham sốsố + 1 = + 1 = ngôingôi toántoán tửtử
PhanSoPhanSo PhanSoPhanSo::operator +::operator +(const (const PhanSoPhanSo &p);&p);
boolbool PhanSoPhanSo::operator >::operator >(const (const PhanSoPhanSo &p);&p);
CáchCách sửsử dụngdụng 2 2 loạiloại làlà nhưnhư nhaunhau!!!!
6Phương pháp lập trình hướng đối tượng - Nguyễn Minh Huy
KháiKhái niệmniệm cơcơ bảnbản
NhữngNhững toántoán tửtử cócó thểthể địnhđịnh nghĩanghĩa lạilại::
NgôiNgôi NhómNhóm Toán tửToán tử
1 Ngôi (Unary)1 Ngôi (Unary) Tăng giảmTăng giảm ++, ++,
Dấu số họcDấu số học +, +,
LogicLogic !, ~!, ~
Con trỏCon trỏ
*, &*, &
7Phương pháp lập trình hướng đối tượng - Nguyễn Minh Huy
Con trỏCon trỏ
*, &*, &
Ép kiểuÉp kiểu int, float, double, int, float, double,
2 Ngôi (Binary)2 Ngôi (Binary) SốSố họchọc +, +, , *, /, %, +=, , *, /, %, +=, =, *=, /=, %==, *=, /=, %=
So sánhSo sánh >, <, ==, >=, <=, !=>, <, ==, >=, <=, !=
LogicLogic &&, ||, &, |&&, ||, &, |
Nhập xuấtNhập xuất <<, >><<, >>
GánGán ==
Lấy chỉ số mảngLấy chỉ số mảng [ ][ ]
KháiKhái niệmniệm cơcơ bảnbản
NhữngNhững toántoán tửtử khôngkhông thểthể địnhđịnh nghĩanghĩa lạilại::
ToánToán tửtử Ý nghĩaÝ nghĩa
Truy xuất phần tửTruy xuất phần tử
.*.* TruyTruy xuấtxuất con con trỏtrỏ phầnphần tửtử
::::
ToánToán
tửtử
::::
8Phương pháp lập trình hướng đối tượng - Nguyễn Minh Huy
::::
ToánToán
tửtử
::::
? :? : ToánToán tửtử điềuđiều kiệnkiện
## ChỉChỉ thịthị tiềntiền xửxử lýlý
# ## # ChỉChỉ thịthị tiềntiền xửxử lýlý
KháiKhái niệmniệm cơcơ bảnbản
NhữngNhững hạnhạn chếchế (4 (4 khôngkhông):):
KhôngKhông thểthể tạotạo toántoán tửtử mớimới
KhôngKhông thểthể địnhđịnh nghĩanghĩa lạilại toántoán tửtử trêntrên kiểukiểu cơcơ bảnbản
KhôngKhông thểthể thaythay đổiđổi ngôingôi củacủa toántoán tửtử
KhôngKhông thểthể thaythay đổiđổi độđộ ưuưu tiêntiên củacủa toántoán tửtử
9Phương pháp lập trình hướng đối tượng - Nguyễn Minh Huy
KháiKhái niệmniệm cơcơ bảnbản
Dr. Guru Dr. Guru khuyênkhuyên::
QuyQuy tắctắc địnhđịnh nghĩanghĩa toántoán tửtử::
TênTên hàmhàm: : operator <operator <têntên toántoán tửtử>>
SốSố lượnglượng thamtham sốsố: : ngôingôi toántoán tửtử
KiểuKiểu thamtham sốsố: : kiểukiểu toántoán hạnghạng
KiểuKiểu
trảtrả
vềvề
: :
kếtkết
quảquả
toántoán
tửtử
KiểuKiểu
trảtrả
vềvề
: :
kếtkết
quảquả
toántoán
tửtử
VíVí dụdụ::
ToánToán tửtử >.>.
ToánToán tửtử [ ].[ ].
10Phươ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 cơcơ bảnbản
Con Con trỏtrỏ this.this.
HàmHàm Friend.Friend.
11Phương pháp lập trình hướng đối tượng - Nguyễn Minh Huy
Con Con trỏtrỏ thisthis
XétXét toántoán tửtử +=:+=:
TrangTrang bịbị toántoán tửtử +=+= chocho lớplớp PhanSoPhanSo
ToánToán tửtử += += trảtrả vềvề gìgì??
LàmLàm saosao lấylấy đượcđược đốiđối tượngtượng đangđang gọigọi phươngphương thứcthức??
Con Con trỏtrỏ this.this.
12Phương pháp lập trình hướng đối tượng - Nguyễn Minh Huy
Con Con trỏtrỏ thisthis
Con Con trỏtrỏ this:this:
MộtMột con con trỏtrỏ đặcđặc biệtbiệt trongtrong C++.C++.
GiữGiữ địađịa chỉchỉ củacủa đốiđối tượngtượng đangđang gọigọi phươngphương thứcthức
PhanSoPhanSo& & PhanSoPhanSo::::operator +=operator +=(const (const PhanSoPhanSo &p)&p)
{{
// // CộngCộng phânphân sốsố
return *this;return *this;
}}
VíVí dụdụ::
ToánToán tửtử =.=.
13Phươ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 cơcơ bảnbản
Con Con trỏtrỏ this.this.
HàmHàm Friend.Friend.
14Phương pháp lập trình hướng đối tượng - Nguyễn Minh Huy
HàmHàm FriendFriend
XétXét toántoán tửtử xuấtxuất <<:<<:
TrangTrang bịbị toántoán tửtử <<<< chocho lớplớp PhanSoPhanSo
ToánToán tửtử << << thuộcthuộc vềvề lớplớp nàonào??
ToánToán tửtử độcđộc lậplập
ToánToán tửtử độcđộc lậplập truytruy xuấtxuất thànhthành phầnphần củacủa lớplớp??
HàmHàm Friend.Friend.
15Phương pháp lập trình hướng đối tượng - Nguyễn Minh Huy
HàmHàm FriendFriend
HàmHàm Friend:Friend:
HàmHàm cócó thểthể truytruy xuấtxuất thànhthành phầnphần củacủa lớplớp
CáchCách sửsử dụngdụng::
KhaiKhai báobáo bênbên trongtrong lớplớp
DùngDùng từtừ khóakhóa friendfriend đểđể phânphân biệtbiệt ((trongtrong C++).C++).
CàiCài
đặtđặt
bênbên
ngoàingoài
lớplớp
CàiCài
đặtđặt
bênbên
ngoàingoài
lớplớp
class class PhanSoPhanSo
{{
friendfriend ostreamostream& & operator <<operator <<((ostreamostream &&osos, const , const PhanSoPhanSo &p);&p);
};};
ostreamostream& & operator <<(operator <<(ostreamostream &&osos, const , const PhanSoPhanSo &p)&p)
{{
osos << << p.m_tup.m_tu << “/” << << “/” << p.m_maup.m_mau << << endlendl;;
}}
16Phương pháp lập trình hướng đối tượng - Nguyễn Minh Huy
TómTóm tắttắt
HàmHàm toántoán tửtử::
HàmHàm cócó têntên làlà toántoán tửtử
DùngDùng địnhđịnh nghĩanghĩa lạilại toántoán tửtử
CóCó 2 2 loạiloại hàmhàm toántoán tửtử::
ToánToán tửtử độcđộc lậplập
ToánToán tửtử thuộcthuộc lớplớp
Con Con trỏtrỏ this:this:
GiữGiữ địađịa chỉchỉ củacủa đốiđối tượngtượng gọigọi phươngphương thứcthức
HàmHàm Friend:Friend:
HàmHàm truytruy xuấtxuất đượcđược thànhthành phầnphần củacủa lớplớp
17Phươ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 4.1:4.1:
TrangTrang bịbị chocho lớplớp phânphân sốsố nhữngnhững toántoán tửtử sausau::
ToánToán tửtử sốsố họchọc: +, : +, , *, /, =, +=, , *, /, =, +=, =.=.
ToánToán tửtử so so sánhsánh: >, <, ==, >=, <=, !=.: >, <, ==, >=, <=, !=.
ToánToán tửtử mộtmột ngôingôi: ++, : ++, ((tăngtăng, , giảmgiảm 1 1 đơnđơn vịvị).).
ToánToán
tửtử
épép
kiểukiểu
: (float), (: (float), (
intint
).).
ToánToán
tửtử
épép
kiểukiểu
: (float), (: (float), (
intint
).).
ToánToán tửtử nhậpnhập, , xuấtxuất: >>, <<.: >>, <<.
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 4.2:4.2:
TrangTrang bịbị chocho lớplớp đơnđơn thứcthức nhữngnhững toántoán tửtử sausau::
ToánToán tửtử sốsố họchọc: +, : +, , *, /, =, +=, , *, /, =, +=, =.=.
ToánToán tửtử so so sánhsánh: >, <, ==, >=, <=, !=.: >, <, ==, >=, <=, !=.
ToánToán tửtử mộtmột ngôingôi::
++, ++,
((
tăngtăng
, ,
giảmgiảm
bậcbậc
).).
++, ++,
((
tăngtăng
, ,
giảmgiảm
bậcbậc
).).
! (! (đạođạo hàmhàm), ~ (), ~ (nguyênnguyên hàmhàm).).
ToánToán tửtử nhậpnhập, , xuấtxuất: >>, <<.: >>, <<.
19Phươ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 4.3:4.3:
TrangTrang bịbị chocho lớplớp mảngmảng nhữngnhững toántoán tửtử sausau::
ToánToán tửtử gángán: =.: =.
ToánToán tửtử lấylấy phầnphần tửtử: [ ].: [ ].
ToánToán tửtử épép kiểukiểu: (: (intint *).*).
ToánToán
tửtử
nhậpnhập
, ,
xuấtxuất
: >>, <<.: >>, <<.
ToánToán
tửtử
nhậpnhập
, ,
xuấtxuất
: >>, <<.: >>, <<.
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 4.4:4.4:
XâyXây dựngdựng lớplớp TimeTime cócó nhữngnhững phươngphương thứcthức sausau::
((NhómNhóm tạotạo hủyhủy))
KhởiKhởi tạotạo mặcmặc địnhđịnh vàovào thờithời điểmđiểm hiệnhiện tạitại
KhởiKhởi tạotạo từtừ giờgiờ, , phútphút, , giâygiây chocho trướctrước
KhởiKhởi
tạotạo
từtừ
giâygiây
tuyệttuyệt
đốiđối
trongtrong
ngàyngày
KhởiKhởi
tạotạo
từtừ
giâygiây
tuyệttuyệt
đốiđối
trongtrong
ngàyngày
KhởiKhởi tạotạo từtừ mộtmột đốiđối tượngtượng Time Time kháckhác
((NhómNhóm truytruy xuấtxuất thôngthông tin)tin)
ThôngThông báobáo giờgiờ, , phútphút, , giâygiây
ThôngThông báobáo giâygiây tuyệttuyệt đốiđối trongtrong ngàyngày
21Phươ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 4.4:4.4:
XâyXây dựngdựng lớplớp TimeTime ((tiếptiếp theotheo):):
((NhómNhóm xửxử lýlý nghiệpnghiệp vụvụ))
So So sánhsánh thứthứ tựtự vớivới đốiđối tượngtượng Time Time kháckhác
TínhTính khoảngkhoảng cáchcách đếnđến đốiđối tượngtượng Time Time kháckhác ((đơnđơn vịvị giâygiây).).
CộngCộng
giờgiờ
, ,
cộngcộng
phútphút
, ,
cộngcộng
giâygiây
CộngCộng
giờgiờ
, ,
cộngcộng
phútphút
, ,
cộngcộng
giâygiây
((NhómNhóm toántoán tửtử))
ToánToán tửtử so so sánhsánh: >, <, ==, >=, <=, !=.: >, <, ==, >=, <=, !=.
ToánToán tửtử cộngcộng, , trừtrừ: +, : +,
ToánToán tửtử tăngtăng, , giảmgiảm giâygiây: ++, : ++,
ToánToán tửtử nhậpnhập xuấtxuất: >>, <<.: >>, <<.
22Phươ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 4.5:4.5:
XâyXây dựngdựng lớplớp DateDate cócó nhữngnhững phươngphương thứcthức sausau::
((NhómNhóm tạotạo hủyhủy))
KhởiKhởi tạotạo mặcmặc địnhđịnh vàovào ngàyngày hiệnhiện tạitại
KhởiKhởi tạotạo từtừ ngàyngày, , thángtháng, , nămnăm chocho trướctrước
KhởiKhởi
tạotạo
từtừ
nămnăm
vàvà
ngàyngày
tuyệttuyệt
đốiđối
trongtrong
nămnăm
KhởiKhởi
tạotạo
từtừ
nămnăm
vàvà
ngàyngày
tuyệttuyệt
đốiđối
trongtrong
nămnăm
KhởiKhởi tạotạo từtừ mộtmột đốiđối tượngtượng Date Date kháckhác
((NhómNhóm truytruy xuấtxuất thôngthông tin)tin)
ThôngThông báobáo ngàyngày, , thángtháng, , nămnăm
ThôngThông báobáo ngàyngày tuyệttuyệt đốiđối trongtrong nămnăm
ThôngThông báobáo thứthứ trongtrong tuầntuần
ThôngThông báobáo tuầntuần trongtrong nămnăm
23Phươ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 4.5:4.5:
XâyXây dựngdựng lớplớp DateDate ((tiếptiếp theotheo):):
((NhómNhóm xửxử lýlý nghiệpnghiệp vụvụ))
KiểmKiểm tratra nămnăm nhuậnnhuận
So So sánhsánh thứthứ tựtự vớivới đốiđối tượngtượng Date Date kháckhác
TínhTính
khoảngkhoảng
cáchcách
đếnđến
đốiđối
tượngtượng
Date Date
kháckhác
((
đơnđơn
vịvị
ngàyngày
).).
TínhTính
khoảngkhoảng
cáchcách
đếnđến
đốiđối
tượngtượng
Date Date
kháckhác
((
đơnđơn
vịvị
ngàyngày
).).
CộngCộng ngàyngày, , cộngcộng thángtháng, , cộngcộng nămnăm
((NhómNhóm toántoán tửtử))
ToánToán tửtử so so sánhsánh: >, <, ==, >=, <=, !=.: >, <, ==, >=, <=, !=.
ToánToán tửtử cộngcộng, , trừtrừ: +, : +,
ToánToán tửtử tăngtăng, , giảmgiảm ngàyngày: ++, : ++,
ToánToán tửtử nhậpnhập xuấtxuất: >>, <<.: >>, <<.
24Phương pháp lập trình hướng đối tượng - Nguyễn Minh Huy