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 8), 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 8) Ch¬ng ¬ Ch¬ng 6 khu« khu«n h×nh (Template) Môc ®Ých ch¬ng nµy: 1. HiÓu ®îc lîi Ých cña viÖc sö dông khu«n h×nh hµm vµ khu«n h×nh líp ®Ó viÕt ch¬ng tr×nh. 2. BiÕt c¸ch t¹o vµ sö dông mét khu«n h×nh hµm vµ khu«n h×nh líp. 3. Kh¸i niÖm c¸c tham sè kiÓu vµ c¸c tham sè biÓu thøc trong khu«n h×nh hµm, khu«n h×nh líp. 4. §Þnh nghÜa chång khu«n h×nh hµm. 5. Cô thÓ ho¸ mét khu«n h×nh hµm, mét hµm thµnh phÇn cña khu«n h×nh líp. 6. ThuËt to¸n s¶n sinh mét thÓ hiÖn hµm (hµm thÓ hiÖn) cña mét khu«n h×nh hµm 7. C¸c vÊn ®Ò kh¸c cña lËp tr×nh híng ®èi tîng liªn quan ®Õn khu«n h×nh líp.Khu«Khu«n h×nh hµm Khu« Khu«n h×nh hµm lµ g×? Ta ®· biÕt ®Þnh nghÜa chång hµm cho phÐp dïng mét tªn duy nhÊt cho nhiÒuhµm thùc hiÖn c¸c c«ng viÖc kh¸c nhau. Kh¸i niÖm khu«n h×nh hµm còng cho phÐpsö dông cïng mét tªn duy nhÊt ®Ó thùc hiÖn c¸c c«ng viÖc kh¸c nhau, tuy nhiªn sovíi ®Þnh nghÜa chång hµm, nã cã phÇn m¹nh h¬n vµ chÆt chÏ h¬n; m¹nh h¬n v× chØcÇn viÕt ®Þnh nghÜa khu«n h×nh hµm mét lÇn, råi sau ®ã ch¬ng tr×nh biªn dÞch lµmcho nã thÝch øng víi c¸c kiÓu d÷ liÖu kh¸c nhau; chÆt chÏ h¬n bëi v× dùa theokhu«n h×nh hµm, tÊt c¶ c¸c hµm thÓ hiÖn ®îc sinh ra bëi tr×nh biªn dÞch sÏ t¬ngøng víi cïng mét ®Þnh nghÜa vµ nh vËy sÏ cã cïng mét gi¶i thuËt. T¹o mét khu«n h×nh hµm khu« Gi¶ thiÕt r»ng chóng ta cÇn viÕt mét hµm m in ®a ra gi¸ trÞ nhá nhÊt trong haigi¸ trÞ cã cïng kiÓu. Ta cã thÓ viÕt mét ®Þnh nghÜa nh thÕ ®èi víi kiÓu in tnh sau:int min (int a, int b) { if (a < b) return a; -233- Khu«n h×nh else return b; } Gi¶ sö, ta l¹i ph¶i viÕt ®Þnh nghÜa hµm min() cho kiÓudouble,float char,char float char,char*double float,char,char ...float min(float a, float b) { if (a < b) return a; else b; } NÕu tiÕp tôc nh vËy, sÏ cã khuynh híng ph¶i viÕt rÊt nhiÒu ®Þnh nghÜa hµmhoµn toµn t¬ng tù nhau; chØ cã kiÓu d÷ liÖu c¸c tham sè lµ thay ®æi. C¸c ch¬ngtr×nh biªn dÞch C++ hiÖn cã cho phÐp gi¶i quyÕt ®¬n gi¶n vÊn ®Ò trªn b»ng c¸ch®Þnh nghÜa mét khu«n h×nh hµm duy nhÊt theo c¸ch nh sau:#include //t¹o mét khu«n h×nh hµmtemplate T min(T a, T b) { if (a < b) return a; else return b; } So s¸nh víi ®Þnh nghÜa hµm th«ng thêng, ta thÊy chØ cã dßng ®Çu tiªn bÞ thay®æi:template T min (T a, T b) trong ®ã template x¸c ®Þnh r»ng ®ã lµ mét khu«n h×nh víi mét tham sè kiÓu T; PhÇn cßn l¹i T min(T a, T b) nãi r»ng, m in()lµ mét hµm víi hai tham sè h×nh thøc kiÓu T vµ cã gi¸ trÞ tr¶ vÒcòng lµ kiÓu T. -234- Khu«n h×nh Sö dông khu«n h×nh hµm khu« Khu«n h×nh hµm cho kiÓu d÷ liÖu c¬ së Khu« kiÓ liÖ §Ó sö dông khu«n h×nh hµm min() võa t¹o ra, chØ cÇn sö dông hµm min()trong nh÷ng ®iÒu kiÖn phï hîp (ë ®©y cã nghÜa lµ hai tham sè cña hµm cã cïngkiÓu d÷ liÖu). Nh vËy, nÕu trong mét ch¬ng tr×nh cã hai tham sè nguyªn n vµ p,víi lêi gäi min(n,p) ch¬ng tr×nh biªn dÞch sÏ tù ®éng s¶n sinh ra hµm min() (tagäi lµ mét hµm thÓ hiÖn) t¬ng øng víi hai tham sè kiÓu nguyªn int NÕu chóng ta int.gäi min() víi hai tham sè kiÓu float ch¬ng tr×nh biªn dÞch còng sÏ tù ®éng s¶n float,sinh mét hµm thÓ hiÖn min kh¸c t¬ng øng víi c¸c tham sè kiÓu float vµ cø thÕ.Sau ®©y lµ mét vÝ dô hoµn chØnh: VÝ dô 6.1/*template1.cpp*/#include #include //t¹o mét khu«n h×nh hµmtemplate T min(T a, T b) { if ( a < b) return a; else return b; }//vÝ dô sö dông khu«n h×nh hµm minvoid main() { clrscr(); int n = 4, p = 12; float x = 2.5, y= 3.25; cout Khu«n h×nh Khu«n h×nh hµm min cho kiÓu char * Khu« kiÓ/*template2.cpp*/#include #include template T min (T a, T b) { if (a < b) return a; else return b; }void main() { clrscr(); char * adr1 = DHBK; char * adr2 = CDSD; cout Khu«n h×nh VÝ dô 6.2/*template3.cpp*/#include #include //khu«n h×nh hµm mintemplate T min( T a, T b) { if (a < b) return a; else return b; }//líp vectclass vect { int x, y; public: vect(int abs =0, int ord = 0) { x= abs, y= ord;} void display() { cout Khu«n h×nh C¸c tham sè kiÓu cña khu«n h×nh hµm kiÓ khu« PhÇn nµy tr×nh bµy c¸ch ®a vµo c¸c tham sè kiÓu trong mét khu«n h×nh hµm,®Ó ch¬ng tr×nh biªn dÞch s¶n sinh mét hµm thÓ hiÖn. C¸c tham sè kiÓu trong ®Þnh nghÜa khu«n h×nh hµm kiÓ ®Þnh nghÜ khu« Mét c¸ch tæng qu¸t, khu«n h×nh hµm cã thÓ cã mét hay nhiÒu tham sè kiÓu,víi mçi tham sè nµy cã tõ kho¸ class ®i liÒn tríc, ch¼ng h¹n nh:template int fct (T a, T *b, U c) {... } C¸c tham sè nµy cã thÓ ®Ó ë bÊt kú ®©u trong ®Þnh nghÜa cña khu«n h×nh hµm,nghÜa lµ: Trong dßng tiªu ®Ò ( nh ®· chØ ra trong vÝ dô trªn). Trong c¸c khai ...