1. Trang chủ
  2. » Công Nghệ Thông Tin

Định nghĩa chồng toán tử

14 964 3
Tài liệu đã được kiểm tra trùng lặp

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Định dạng
Số trang 14
Dung lượng 230,68 KB

Nội dung

CHƯƠNG ð NH NGHĨA CH NG TOÁN T ð nh nghĩa ch ng (overloading) m t kh m nh C++ cho phép xây d ng toán t c n thi t l p, giúp cho chương trình đư c vi t ng n g n rõ ràng Trong C++ có th đ nh nghĩa ch ng h u h t tốn t Các tốn t có th ñư c ñ nh nghĩa ch ng m t hàm thành ph n (phương th c) c a l p ho c m t hàm b n c a l p Chương s trình bày v cách ñ nh nghĩa ch ng s d ng hàm tốn t C++ § VÍ D TRÊN L P S PH C 1.1 Xây d ng hàm b n c ng hai s ph c Xét m t l p s ph c (SP) xây d ng m t hàm b n ñ c ng hai s ph c sau: class SP { double a, b; // Ph n th c, ph n o public: friend SP cong(SP u1, SP u2) { SP u; u.a = u1.a + u2.a ; u.b = u1.b + u2.b ; return u; } }; void main() { SP u, u1, u2; u = cong(u1, u2); // u t ng u1+u2 } 1.2 Xây d ng hàm toán t c ng hai s ph c Trong ví d v l p SP trên, ñã xây d ng hàm c ng hai s ph c b ng cách s d ng hàm b n Tuy v y, trư ng h p này, có th khơng c n s d ng hàm b n ch làm vi c v i m t l p 90 Ví d sau có m c đích (c ng hai s ph c) xây d ng hàm cong m t phương th c c a l p SP: class SP { double a, b; // Ph n th c, ph n o public: SP cong(SP u2); }; SP SP::cong(SP u2) { SP u; u.a= a+u2.a; u.b= b+u2.b; return u; } void main() { SP u, v, u1, u2, u3, u4; u= u1.cong(u2); // u t ng u1+u2 v= u1.cong(u2.cong(u3.cong(u4))); // v t ng u1+u2+u3+u4 } Nh n xét: V i c hai cách (dùng hàm b n dùng phương th c c a l p), bi u th c s ph c t p n u có nhi u phép tốn s ph c (như tính v ví d trên) C++ cho ta m t cơng c đ gi i quy t v n đ này: kh đ nh nghĩa ch ng toán t Các toán t sau ñư c ñ nh nghĩa ch ng cho l p có th s d ng v i đ i tư ng c a l p theo cách tương t v i bi n thu c ki u d li u chu n Ví d : class SP { double a, b; public: SP operator+(SP u2); 91 }; SP SP::operator+(SP u2) { SP u; u.a= a+u2.a; u.b= b+u2.b; return u; } void main() { SP u, v, u1, u2, u3, u4; u= u1+u2; // u t ng u1+u2 v= u1+u2+u3+u4; // v t ng u1+u2+u3+u4 } Nh n xét: Toán t c ng ‘+’ đóng vai trị hàm cong ví d trên, th c ch t chương trình d ch hi u m t hàm Nói cách khác ch th u= u1+u2 trư ng h p ñư c hi u u= u1.operator+(u2) Nhưng rõ ràng cách s d ng toán t làm cho bi u th c t nhiên ng n g n nhi u § GI I H N C A ð NH NGHĨA CH NG TOÁN T 2.1 Các tốn t có th đ nh nghĩa ch ng Ph n l n tốn t C++ đ u có th đ nh nghĩa ch ng, ngo i tr toán t truy nh p vào thành ph n ‘.’, tốn t xác đ nh ph m vi ‘::’, tốn t u ki n ‘?:’ toán t sizeof Chú ý r ng c m t “ñ nh nghĩa ch ng” ñã ph n ánh rõ: khơng th t o tốn t m i mà ch ñ nh nghĩa l i tốn t có đ có th làm vi c v i nh ng ki u d li u khác v i thi t k chu n c a 2.2 Các nguyên t c ñ nh nghĩa ch ng tốn t Các tốn t đ nh nghĩa ch ng ph i b o tồn s ngơi c a tốn t (theo cách hi u thơng thư ng), ví d có th đ nh nghĩa tốn t ‘-‘ m t ngơi (đ o d u) hai ngơi khơng th đ nh nghĩa tốn t gán ‘=’ m t ngơi Các tốn t đ nh nghĩa ch ng nên b o toàn ý nghĩa nguyên th y c a nó, ví d ta có th ñ nh nghĩa ch ng toán t ‘-‘ ñ th c hi n phép c ng (hai ñ i tư ng), u rõ ràng khơng có ích l i mà d gây nh m l n Các hàm tốn t có th đư c đ nh nghĩa hàm thành ph n c a l p ho c m t hàm b n: 92 + Trong trư ng h p hàm toán t hàm thành ph n c a l p (phương th c): hàm có m t đ i (tham s ) ng m ñ nh (xác ñ nh đ i tư ng g i hàm), v y v i tốn t m t ngơi hàm tốn t khơng ch a đ i nào, cịn v i tốn t hai ngơi hàm tốn t có m t đ i + Trong trư ng h p hàm toán t hàm b n: toán t ngơi hàm c n có b y nhiêu đ i Chú ý: Vì tốn t ph i thao tác d li u c a ñ i tư ng mà d li u thư ng thành ph n riêng nên hàm tốn t khơng th m t hàm t V y đ nh nghĩa (hàm tốn t ) hàm thành ph n, hàm b n? Nguyên t c chung là: n u tốn t ch làm vi c v i đ i tư ng c a m t l p đ nh nghĩa hàm thành ph n hay hàm b n ñ u ñư c, n u tốn t làm vi c v i đ i tư ng thu c nhi u l p khác b t bu c ph i hàm b n M t s trư ng h p c th c n lưu ý: + Các toán t = , [] ph i ñư c ñ nh nghĩa hàm thành ph n c a l p + Các tốn t > ph i đư c đ nh nghĩa hàm b n + Các toán t ++ , có th đư c s d ng theo hai cách khác (ti n t h u t ), u địi h i hai hàm toán t khác Trong th c t thư ng hay đ nh nghĩa hàm tốn t phương th c c a l p, th s đ c p chi ti t § Cách đ nh nghĩa ch ng m t s tốn t quan tr ng đư c trình bày § § PHƯƠNG TH C TOÁN T 3.1 Cách xây d ng phương th c tốn t Các phương th c tốn t đư c xây d ng phương th c thông thư ng, ch có khác cách đ t tên Tên c a phương th c toán t (cũng gi ng hàm tốn t ) đư c t o b ng cách ghép t khoá operator v i m t phép tốn (tốn t ) Chúng ta ch có th s d ng phép tốn đư c đ nh nghĩa C++ ñ ñ nh nghĩa phương th c cho m t l p m i, nên ñư c g i ñ nh nghĩa ch ng tốn t (operator overloading) Ví d : operator+ operator> Cũng gi ng phương th c thông thư ng, phương th c tốn t có đ i đ u tiên (đ i khơng tư ng minh) tr this 3.2 Toán t m t toán h ng Các phương th c toán t m t toán h ng (m t ngơi) dùng tr this đ bi u th toán h ng nh t này, nên phương th c s khơng có đ i tư ng minh Ví d phương th c tốn t ‘-‘ ñ ñ i d u m t ñ i tư ng ki u SP (s ph c) có th vi t sau: 93 class SP { double a; // Ph n th c double b; // Ph n o public: SP operator-(); }; SP SP:: operator-() { SP u ; u.a = - this->a ; u.b = - this->b ; return u; } Cách dùng: SP u, v; u = -v; Chú ý: Các phép toán ++ có th s d ng theo hai cách khác (ti n t h u t ) nên đ nh nghĩa địi h i ph i có hai cách khác sau: + Cho d ng ti n t : operator++() operator () + Cho d ng h u t s d ng thêm ñ i gi int: operator++(int) operator (int) 3.3 Toán t hai toán h ng V i phương th c toán t hai tốn h ng tr this ng v i toán h ng th nh t, nên phương th c ch c n dùng m t ñ i tư ng minh đ bi u th tốn h ng th hai Ví d phương th c tốn t ‘+’ ñ c ng hai ñ i tư ng ki u SP (s ph c) có th vi t sau: class SP { double a; // Ph n th c double b; // Ph n o public: SP operator+(SP u2); }; 94 SP SP:: operator+(SP u2) { SP u ; u.a = this->a + u2.a ; u.b = this->b + u2.b ; return u; } Cách dùng: SP p, p, r; r = p+q; § ð NH NGHĨA CH NG M T S TỐN T 4.1 Tốn t gán ‘=’ Trong m i l p đ u có m t tốn t gán m c đ nh, n u thành ph n d li u khơng có tr tốn t gán m c đ nh ñ ñáp ng yêu c u, không c n thi t ph i đ nh nghĩa ch ng tốn t gán Khi đ nh nghĩa ch ng tốn t gán ph i ñư c ñ nh nghĩa hàm thành ph n c a l p, tốn t hai ngơi nên s ch c n m t tham s hàm toán t Phép gán a=b th c ch t ñư c hi u a.operator=(b) b có th đư c truy n theo dư i d ng tham tr ho c tham chi u Vi c truy n theo tham tr địi h i s có m t c a hàm t o chép, th n a có th làm chương trình ch y ch m m t th i gian chép m t lư ng d li u l n Vì v y b thư ng đư c truy n cho hàm toán t operator= dư i d ng tham chi u Giá tr tr v c a hàm toán t ph thu c vào m c ñích s d ng c a bi u th c gán Gi s a, b, c ñ i tư ng ki u X, n u giá tr tr v c a hàm toán t gán ki u void khơng th th c hi n phép gán a=b=c Ví d : class DT { int n; float *a; public: DT() { } DT(int n1); ~DT() { delete a; } void hien(); DT& operator=(DT& d); }; DT::DT(int n1) { n= n1; a= new float[n]; 95 for (int i=0; i

Ngày đăng: 30/09/2013, 00:20

TỪ KHÓA LIÊN QUAN

w