... 251Khuônhình-247-//char*)getch();}min(n,p)=12min(adr1,adr2)=CD2DNhvậy,bảnchấtcủacụthểhoákhuônhìnhhàmlàđịnhnghĩacáchàmthôngthờngcócùngtênvớikhuônhìnhhàmđểgiảiquyếtmộtsốtrờnghợprủirokhitaápdụngkhuônhìnhhàmchomộtsốkiểudữliệuđặcbiệtnàođó.TTTTổổổổngngngngkkkkếếếếttttvvvvềềềềccccáááácccckhukhukhukhuôôôônnnnhhhhììììnhnhnhnhhhhhààààmmmmMộtcáchtổngquát,tacóthểđịnhnghĩamộthaynhiềukhuônhìnhcùngtên,mỗikhuônhìnhcócácthamsốkiểucũngnhlàcácthamsốbiểuthứcriêng.Hơnnữa,cóthểcungcấpcáchàmthôngthờngvớicùngtênvớimộtkhuônhìnhhàm;trongtrờnghợpnàytanóiđólàsựcụthểhoámộthàmthểhiện.Trongtrờnghợptổngquátkhicóđồngthờicảhàmđịnhnghĩachồngvàkhuônhìnhhàm,chơngtrìnhdịchlựachọnhàmtơngứngvớimộtlờigọihàmdựatrêncácnguyêntắcsauđây:(vii)Đầutiên,kiểmtratấtcảcáchàmthôngthờngcùngtênvàchúýđếnsựtơngứngchínhxác;nếuchỉcómộthàmphùhợp,hàmđóđợcchọn;cònnếucónhiềuhàmcùngthoảmÃn(cósựnhậpnhằng)sẽtạoramộtlỗibiêndịchvàquátrìnhtìmkiếmbịgiánđoạn.(viii)Nếukhôngcóhàmthôngthờngnàotơngứngchínhxácvớilờigọi,khiđótakiểmtratấtcảcáckhuônhìnhhàmcócùngtênvớilờigọi;nếuchỉcómộttơngứngchínhxácđợctìmthấy,hàmthểhiệntơngứngđợcsảnsinhvàvấnđềđợcgiảiquyết;cònnếucónhiềuhơnmộtkhuônhìnhhàm(cósựnhậpnhằng)điềuđósẽgâyralỗibiêndịchvàquátrìnhtìmkiếmbịngắt.(ix)Cuốicùng,nếukhôngcókhuônhìnhhàmphùhợp,takiểmtramộtlầnnữatấtcảcáchàmthôngthờngcùngtênvớilờigoi.TrongtrờnghợpnàychúngtaphảitìmkiếmsựtơngứngdựavàocảcácchuyểnkiểuchophéptrongC/C++.KHUKHUKHUKHUôôôôNNNNhhhhììììnhnhnhnhllllớớớớppppKhuKhuKhuKhuôôôônnnnhhhhììììnhnhnhnhllllớớớớppppllllààààggggìììì????Bêncạnhkháiniệmkhuônhìnhhàm,C++cònchophépđịnhnghĩakhuônhìnhlớp.Cũnggiốngnhkhuônhìnhhàm,ởđâytachỉcầnviếtđịnhnghĩacáckhuônhìnhlớpmộtlầnrồisauđócóthểápdụngchúngvớicáckiểudữliệukhácnhauđểđợccáclớpthểhiệnkhácnhau.Khuônhình-260-nguyên.Kýhiệut2d[1][2]biểuthịmộtthamchiếuđếnthànhphầnthứbacủat2d[1],bảngt2d[1]làphầntửthứhaicủabảnghaichiềucácsốnguyênt2d.Sauđâylàmộtchơngtrìnhhoànchỉnh:VVVVííííddddụụụụ6.106.106.106.10#include<iostream.h>#include<conio.h>template<classT,intn>classtable{Ttab[n];public:table()//hàmthiếtlập{cout<<"Taobangco"<<n<<"phantu\n";}T&operator[](inti)//hàmtoántử[]{returntab[i];}};voidmain(){clrscr();table<table<int,2>,3>t2d;t2d[1][2]=15;cout<<"t2d[1][2]="<<t2d[1][2]<<"\n";inti,j;for(i=0;i<2;i++)for(j=0;j<3;j++)t2d[i][j]=i*3+j;for(i=0;i<2;i++){for(j=0;j<3;j++)cout<<t2d[i][j]<<"";cout<<"\n";}Khuônhình-246-Lờigọifct(&x,&y)cóthểtơngứngvớikhuônhìnhhàm1haykhuônhìnhhàm4.CCCCụụụụththththểểểểhohohohoááááccccáááácccchhhhààààmmmmththththểểểểhihihihiệệệệnnnnMộtkhuônhìnhhàmđịnhnghĩamộthọcáchàmdựatrênmộtđịnhnghĩachung,nóicáchkhácchúngthựchiệntheocùngmộtgiảithuật.Trongmộtsốtrờnghợp,sựtổngquátnàycóthểchịurủiro,chẳnghạnnhtrongtrờnghợpápdụngkhuônhìnhhàmminchokiểucharcharcharchar*nhđÃnóiởtrên.Kháiniệmcụthểhoá,đaramộtgiảiphápkhắcphụccácrủirokiểunhtrên.C++chophéptacungcấp,ngoàiđịnhnghĩacủamộtkhuônhìnhhàm,địnhnghĩacủamộtsốcáchàmchomộtsốkiểudữliệucủathamsố.Taxétchơngtrìnhvídụsauđây:VVVVííííddddụụụụ6.76.76.76.7/*templat8.cpp*//*templat8.cpp*//*templat8.cpp*//*templat8.cpp*/#include<iostream.h>#include<string.h>#include<conio.h>//khuônhìnhhàmmintemplate<classT>Tmin(Ta,Tb){if(a<b)returna;elsereturnb;}//hàmminchokiểuxâukýtựchar*min(char*cha,char*chb){if(strcmp(cha,chb)<0)returncha;elsereturnchb;}voidmain(){clrscr();intn=12,p=15;char*adr1="DHBK",*adr2="CD2D";cout<<"min(n,p)="<<min(n,p)<<"\n";//khuônhìnhhàmcout<<"min(adr1,adr2)="<<min(adr1,adr2)<<endl;//hàmchar*min(char*,Khuônhình-251-point<int>ai(3,5);ai.display();point<char>ac('d','y');ac.display();point<double>ad(3.5,2.3);ad.display();getch();}Toado:35Toado:dyToado:3.52.3CCCCááááccccthamthamthamthamssssốốốốtrongtrongtrongtrongkhukhukhukhuôôôônnnnhhhhììììnhnhnhnhllllớớớớppppHoàntoàngiốngnhkhuônhìnhhàm,cáckhuônhìnhlớpcóthểcócácthamsốkiểuvàthamsốbiểuthức.Trongphầnnàytabànvềcácthamsốkiểu;còncácthamsốbiểuthứcsẽđợcnóitrongphầnsau.Tuycónhiềuđiểmgiốngnhaugiữakhuônhìnhhàmvàkhuônhìnhlớp,nhngcácràngbuộcđốivớicáckiểuthamsốlạikhôngnhnhau.SSSSốốốốllllợợợợngngngngccccááááccccthamthamthamthamssssốốốốkikikikiểểểểuuuutrongtrongtrongtrongmmmmộộộộttttkhukhukhukhuôôôônnnnhhhhììììnhnhnhnhllllớớớớppppXétvídụkhaibáosau:template<classT,classU,classV>//danhsáchbathamsốkiểuclasstry{Tx;Ut[5]; ... inđaragiátrịnhỏnhấttronghaigiátrịcócùngkiểu.Tacóthểviếtmộtđịnhnghĩanhthếđốivớikiểuintnhsau:intmin(inta,intb){if(a<b)returna;Khuônhình-250-khaibáomộtđốitợngaicóhaithànhphầntoạđộlàkiểunguyên(intintintint).Điềuđócónghĩalàpoint<int>cóvaitrònhmộtkiểudữliệulớp;ngờitagọinólàmộtlớpthểhiệncủakhuônhìnhlớppoint.Mộtcáchtổngquát,khiápdụngmộtkiểudữliệunàođóvớikhuônhìnhlớppointtasẽcóđợcmộtlớpthểhiệntơngứngvớikiểudữliệu.Nhvậy:point<double>ad;địnhnghĩamộtđốitợngadcócáctoạđộlàsốthực;cònvớipoint<double>đóngvaitròmộtlớpvàđợcgọilàmộtlớpthểhiệncủakhuônhìnhlớppoint.Trongtrờnghợpcầnphảitruyềncácthamsốchocáchàmthiếtlập,talàmbìnhthờng.Vídụ:point<int>ai(3,5);point<double>ad(2.5,4.4);VVVVííííddddụụụụssssửửửửddddụụụụngngngngkhukhukhukhuôôôônnnnhhhhììììnhnhnhnhllllớớớớppppTaxétvídụsau:VVVVííííddddụụụụ6 .8 6 .8 6 .8 6 .8 /*templat9.cpp*//*templat9.cpp*//*templat9.cpp*//*templat9.cpp*/#include<iostream.h>#include<conio.h>//tạomộtkhuônhìnhlớptemplate<classT>classpoint{Tx,y;public:point(Tabs=0,Tord=0){x=abs;y=ord;}voiddisplay(){cout<<"Toado:"<<x<<""<<y<<"\n";}};voidmain(){clrscr();Khuônhình-2 48- TTTTạạạạoooommmmộộộộttttkhukhukhukhuôôôônnnnhhhhììììnhnhnhnhllllớớớớppppTathờngtạoralớppointtheokiểu(ởđâytabỏquađịnhnghĩacủacáchàmthànhphần):classpoint{intx,y;public:point(intabs=0,intord=0);voiddisplay();// ... };(ii)Ngợclại,khiđịnhnghĩacủahàmthànhphầnnằmngoàiđịnhnghĩalớp,khiđócầnphảinhắclạichochơngtrìnhdịchbiết:cácthamsốkiểucủakhuônhìnhlớp,cónghĩalàphảinhắclại:template<classT>trớcđịnhnghĩahàm,còntêncủakhuônhìnhlớpđợcviếtnhlàpoint<T>Tómlại,dòngtiêuđềđầyđủchohàmthànhphầndisplay()củakhuônhìnhhàmpointnhsau:template<classT>voidpoint<T>::display()Sauđâylàđịnhnghĩađầyđủcủakhuônhìnhlớppoint:#include<iostream.h>//tạokhuônhìnhhàmtemplate<classT>classpoint{Tx,y;public://địnhnghĩahàmthànhphầnởbêntrongkhuônhìnhlớppoint(Tabs=0,Tord=0){x=abs;y=ord;}voiddisplay();};//địnhnghĩahàmthànhphầnởbênngoàikhuônhìnhlớptemplate<classT>voidpoint<T>::display(){cout<<"Toado:"<<x<<""<<y<<"\n";}SSSSửửửửddddụụụụngngngngkhukhukhukhuôôôônnnnhhhhììììnhnhnhnhllllớớớớppppMộtkhikhuônhìnhlớppointđÃđợcđịnhnghĩa,mộtkhaibáonh:point<int>ai;Khuônhình-255-CCCCụụụụththththểểểểhohohohoáááákhukhukhukhuôôôônnnnhhhhììììnhnhnhnhllllớớớớppppKhảnăngcụthểhoákhuônhìnhlớpcóđôichútkhácbiệtsovớikhuônhìnhhàm.Khuônhìnhlớpđịnhnghĩahọcáclớptrongđómỗilớpchứađồngthờiđịnhnghĩacủachínhnóvàcáchàmthànhphần.Nhvậy,tấtcảcáchàmthànhphầncùngtênsẽđợcthựchiệntheocùngmộtgiảithuật.Nếutamuốnchomộthàmthànhphầnthíchứngvớimộttìnhhuốngcụthểcụthểnàođó,cóthểviếtmộtđịnhnghĩakhácchonó.Sauđâylàmộtvídụcảitiếnkhuônhìnhlớppoint.ởđâychúngtađÃcụthểhoáhàmhiểnthịdisplay()chotrờnghợpkiểudữliệucharcharcharchar:VVVVííííddddụụụụ6.106.106.106.10/*templat11.cpp*//*templat11.cpp*//*templat11.cpp*//*templat11.cpp*/#include<iostream.h>#include<conio.h>//tạomộtkhuônhìnhlớptemplate<classT>classpoint{Tx,y;public:point(Tabs=0,Tord=0){x=abs;y=ord;}voiddisplay();};template<classT>voidpoint<T>::display(){cout<<"Toado:"<<x<<""<<y<<"\n";}//Thêmmộthàmdisplaycụthểhoátrongtrờnghợpcáckýtựvoidpoint<char>::display(){cout<<"Toado:"<<(int)x<<""<<(int)y<<"\n";}voidmain(){clrscr();point<int>ai(3,5);ai.display();Khuônhình-264-1.Khuônhìnhhàm...