Thông tin tài liệu:
Tham khảo tài liệu giáo trình c++ - đại học bách khoa (phần 6), công nghệ thông tin, kỹ thuật lập trình phục vụ nhu cầu học tập, nghiên cứu và làm việc hiệu quả
Nội dung trích xuất từ tài liệu:
Giáo trình C++ - Đại Học Bách Khoa (phần 6) ¬ Ch¬ng Ch¬ng 4 ®Þnh nghÜa to¸n tö trªn líp ®Þnh nghÜ to¸ trª (class operators) Môc ®Ých ch¬ng nµy : 1. C¸ch ®Þnh nghÜa c¸c phÐp to¸n cho kiÓu d÷ liÖu líp vµ cÊu tróc 2. C¸c to¸n tö chuyÓn kiÓu ¸p dông cho kiÓu d÷ liÖu líp1. Giíi thiÖu chung Gií thiÖ Thùc ra, vÊn ®Ò ®Þnh nghÜa chång to¸n tö ®· tõng cã trong C, vÝ dô trongbiÓu thøc: a + b ký hiÖu + tuú theo kiÓu cña a vµ b cã thÓ biÓu thÞ: 3. phÐp céng hai sè nguyªn, float float) 4. phÐp céng hai sè thùc ®é chÝnh x¸c ®¬n (float double double) 5. phÐp céng hai sè thùc chÝnh x¸c ®«i (double 6. phÐp céng mét sè nguyªn vµo mét con trá. Trong C++, cã thÓ ®Þnh nghÜa chång ®èi víi hÇu hÕt c¸c phÐp to¸n (métng«i hoÆc hai ng«i) trªn c¸c líp, nghÜa lµ mét trong sè c¸c to¸n h¹ng thamgia phÐp to¸n lµ c¸c ®èi tîng. §©y lµ mét kh¶ n¨ng m¹nh v× nã cho phÐpx©y dùng trªn c¸c líp c¸c to¸n tö cÇn thiÕt, lµm cho ch¬ng tr×nh ®îc viÕtng¾n gän dÔ ®äc h¬n vµ cã ý nghÜa h¬n. Ch¼ng h¹n, khi ®Þnh nghÜa mét lípcomplex ®Ó biÓu diÔn c¸c sè phøc, cã thÓ viÕt trong C++: a+b, a-b,a*b, a/b víi a,b lµ c¸c ®èi tîng complex. §Ó cã ®îc ®iÒu nµy, ta ®Þnh nghÜa chång c¸c phÐp to¸n +, -, * vµ/ b»ng c¸ch ®Þnh nghÜa ho¹t ®éng cña tõng phÐp to¸n gièng nh ®Þnh nghÜamét hµm, chØ kh¸c lµ ®©y lµ hµm to¸n tö (operator function). Hµm to¸n tö cãtªn ®îc ghÐp bëi tõ kho¸ operator vµ ký hiÖu cña phÐp to¸n t¬ng øng.B¶ng 4.1 ®a ra mét sè vÝ dô vÒ tªn hµm to¸n tö. Hµm to¸n tö cã thÓ dïng nh lµ mét hµm thµnh phÇn cña mét líp hoÆclµ hµm tù do; khi ®ã hµm to¸n tö ph¶i ®îc khai b¸o lµ b¹n cña c¸c líp cãc¸c ®èi tîng mµ hµm thao t¸c. -109- §Þnh nghÜa to¸n tö trªn líp Tªn hµm Dïng ®Ó operator+ operator ®Þnh nghÜa phÐp + operator* operator ®Þnh nghÜa phÐp nh©n * operator/ operator ®Þnh nghÜa phÐp chia / operator+= operator ®Þnh nghÜa phÐp tù céng += operator!= operator ®Þnh nghÜa phÐp so s¸nh kh¸c nhau B¶ng 4.1 Mét sè tªn hµm to¸n tö quen thuéc2. VÝ dô trªn líp sè phøc trª phø 2.1 Hµm to¸n tö lµ hµm thµnh phÇn to¸ thµ phÇ Trong ch¬ng tr×nh complex1.cpp to¸n tö + gi÷a hai ®èi tîngcomplex ®îc ®Þnh nghÜa nh mét hµm thµnh phÇn. Hµm to¸n tö thµnh phÇncã mét tham sè ngÇm ®Þnh lµ ®èi tîng gäi hµm nªn chØ cã mét tham sètêng minh. VÝ dô 4.1/*complex1.cpp*/#include #include #include class complex { float real, image; public: complex(float r=0, float i =0) { real = r; image = i; } void display() { cout §Þnh nghÜa to¸n tö trªn líp /*hµm operator+ ®Þnh nghÜa phÐp to¸n + hai ng«i trªn líp sè phøccomplex*/ complex operator+(complex b) { complex c; c.real = a.real+b.real; c.image =a.image+b.image; return c; } };void main() { clrscr(); complex a(-2,5); complex b(3,4); cout §Þnh nghÜa to¸n tö trªn líp c = a+b; trong vÝ dô trªn ®îc ch¬ng tr×nh dÞch hiÓu lµ: c = a.operator+(b); NhË NhËn xÐt7. Thùc ra c¸ch viÕt a+b chØ lµ mét quy íc cña ch¬ng tr×nh dÞch cho phÐp ngêi sö dông viÕt gän l¹i, nhê ®ã c¶m thÊy tù nhiªn h¬n. 8. Hµm to¸n tö operator+ ph¶i cã thuéc tÝnh public v× nÕu kh«ng ch¬ng tr×nh dÞch kh«ng thÓ thùc hiÖn ®îc nã ë ngoµi ph¹m vi líp. 9. Trong lêi gäi a.operator+(b), a ®ãng vai trß cña tham sè ngÇm ®Þnh cña hµm thµnh phÇn vµ b lµ tham sè têng minh. Sè tham sè têng minh cho hµm to¸n tö thµnh phÇn lu«n Ýt h¬n sè ng«i cña phÐp to¸n lµ 1 v× cã mét tham sè ngÇm ®Þnh lµ ®èi tîng gäi hµm to¸n tö. 10. Ch¬ng tr×nh dÞch sÏ kh«ng thÓ hiÓu ®îc biÓu thøc 3+a v× c¸ch viÕt t¬ng øng 3.operator(a) kh«ng cã ý nghÜa. §Ó gi¶i quyÕt t×nh huèng nµy ta dïng hµm b¹n ®Ó ®Þnh nghÜa hµm to¸n tö. 2.2 Hµm to¸n tö lµ hµm b¹n to¸ Ch¬ng tr×nh complex2.cpp ®îc ph¸t triÓn tõ complex1.cpp b»ng c¸ch thªmhµm to¸n tö céng thªm mét sè thùc float vµo phÇn thùc cña mét ®èi tîngcomplex, ®îc ...