... >int*int*int*int*đốivớicâulệnhthứhai.CácmởrộngcủaC++-27-a=3;b =4; cout<<"Truockhigoiswap2:\n";cout<<"a="<<a<<"b="<<b<<"\n";swap2(&a,&b);cout<<"Saukhigoiswap2:\n";cout<<"a="<<a<<"b="<<b<<"\n";a=3;b =4; cout<<"Truockhigoiswap3:\n";cout<<"a="<<a<<"b="<<b<<"\n";swap3(a,b);cout<<"Saukhigoiswap3:\n";cout<<"a="<<a<<"b="<<b<<"\n";getch();}Truockhigoiswap1:a=3b =4 Saukhigoiswap1:a=3b =4 Truockhigoiswap2a=3b =4 Saukhigoiswap2:a=4b=3Truockhigoiswap3:a=3b =4 Saukhigoiswap3:a=4b=3Trongchơngtrìnhtrên,tatruyềnthamsốa,bchohàmswap1()theothamtrịchonêngiátrịcủachúngkhôngthayđổitrớcvàsaukhigọihàm.Giảiphápđaratronghàmswap2()làthayvìtruyềntrựctiếpgiátrịhaibiếnavàbngờitatruyềnđịachỉcủachúngrồithôngquacácđịachỉnàyđểxácđịnhgiátrịbiến.Bằngcáchđógiátrịcủahaibiếnavàbsẽhoánđổichonhausaulờigọihàm.Khácvớiswap2(),hàmswap3()đaragiảiphápsửdụngthamchiếu.Cácthamsốhìnhthứccủahàmswap3()bâygiờlàcácthamchiếuđếncácthamsốthựcđợctruyềnchohàm.Nhờvậymàgiátrịcủahaithamsốthựcavàbcóthểhoánđổiđợcchonhau.CácmởrộngcủaC++-20-3.23.23.23.2KhaiKhaiKhaiKhaibbbbááááoooommmmọọọọiiiinnnnơơơơiiiiTrongC++khôngnhấtthiếtphảinhómlênđầucáckhaibáođặtbêntrongmộthàmhaymộtkhốilệnh,màcóthểđặtxenkẽvớicáclệnhxửlý.Vídụ.{intn;n=23;cout<<n<<"\n"; ... >(voidvoidvoidvoid*).Xétvídụsauđây:VVVVííííddddụụụụ2 .4 2 .4 2 .4 2 .4 #include<iostream.h>voidvoidmain(){intn=25;longp=250000;unsignedq=63000;charc='a';floatx=12. 345 6789;doubley=12. 345 6789e16;char*ch="WelcomeC++";int*ad=&n;cout<<"Valueofn:"<<n<<"\n";cout<<"Valueofp:"<<p<<"\n";cout<<"Valueofc:"<<c<<"\n";cout<<"Valueofq:"<<q<<"\n";cout<<"Valueofx:"<<x<<"\n";cout<<"Valueofy:"<<y<<"\n";cout<<"Valueofch:"<<ch<<"\n";cout<<"Addreseofn:"<<ad<<"\n";cout<<"Addresedech:"<<(void*)ch<<"\n";}Valueofn:25Valueofp:250000Valueofc:aValueofq:63000Valueofx:12. 345 679Valueofy:1.2 345 67e+17Valueofch:WelcomeC++Addreseofn:0xfff2Addresedech:0x00b2CácmởrộngcủaC++-29-int&fr(int*d,inti);voidmain(){clrscr();cout<<"Nhapgiatrichomanga:\n";for(inti=0;i<5;i++){cout<<"a["<<i<<"]=";cin>>fr(a,i);}cout<<"Mangasaukhinhap\n";for(i=0;i<5;i++)cout<<a[i]<<"";cout<<"\n";getch();}int&fr(int*d,inti){returnd[i];}Nhapgiatrichomanga:a[0]=6a[1] =4 a[2]=3a[3]=5a [4] =6Mangasaukhinhap 643 56BạnđọccóthểxemthêmphầnĐịnhnghĩachồngtoántửđểthấyđợclợiíchcủavấnđềtrảvềthamchiếuchohàm.6.6.6.6.ĐịĐịĐịĐịnhnhnhnhnghnghnghnghĩĩĩĩaaaachchchchồồồồngngngnghhhhààààmmmm((((OverloadingOverloadingOverloadingOverloadingfunctionsfunctionsfunctionsfunctions))))C++chophépsửdụngmộttênchonhiềuhàmkhácnhautagọiđólàsựchồnghàm.Trongtrờnghợpđó,cáchàmsẽkhácnhauởgiátrịtrảvềvàdanhsáchkiểucácthamsố.Chẳnghạnchúngtamuốnđịnhnghĩacáchàmtrảvềsốnhỏnhấttrong:CácmởrộngcủaC++-33-khaibáoint=12chỉrarằngtrongtrờnghợpvắngmặtthamsốthứhaiởlờigọihàmfct()thìthamsốhìnhthứctơngứngsẽđợcgángiátrịngầmđịnh12.Lờigọifct();khôngđợcchấpnhậnbởivìkhôngcógiátrịngầmđịnhchothamsốthứnhất.VVVVííííddddụụụụ2. 14 2. 14 2. 14 2. 14 #include<iostream.h>voidmain(){intn=10,p=20;voidfct(int=0,int=12);//khaibáohàmvớihaithamsốcógiátrịngầmđịnhfct(n,p);//lờigọithôngthờng,cóhaithamsốfct(n);//lờigọichỉvớimộtthamsốfct();//fct()đÃđợcchấpnhận}voidfct(inta,intb)//khaibáobìnhthờng{cout<<"thamsothunhat:"<<a<<"\n";cout<<"thamsothuhai:"<<b<<"\n";}thamsothunhat:10thamsothuhai:20thamsothunhat:10thamsothuhai:12thamsothunhat:0thamsothuhai:12ChChChChúúúúýýýý18.Cácthamsốvớigiátrịngầmđịnhphảiđợcđặtởcuốitrongdanhsáchcácthamsốcủahàmđểtránhnhầmlẫncácgiátrị.19.Cácgiátrịngầmđịnhcủathamsốđợckhaibáokhisửdụngchứkhôngphảitrongphầnđịnhnghĩahàm.Vídụsauđâygâyralỗibiêndịch:C¸cmëréngcñaC++-37-deletemat[i];deletemat;}voidNhap(int**mat){inti,j;for(i=0;i<10;i++)for(j=0;j<10;j++){cout<<"Thanhphanthu["<<i<<"]["<<j<<"]=";cin>>mat[i][j];}}voidIn(int**mat){inti,j;for(i=0;i<10;i++){for(j=0;j<10;j++)cout<<mat[i][j]<<"";cout<<"\n";}}VVVVÝÝÝÝddddôôôô2.182.182.182.18Qu¶nlýtrµnbénhíset_new_handler#include<iostream>main(){voidoutof();set_new_handler(&outof);longtaille;int*adr;intnbloc;cout<<"Kichthuoccannhap?";CácmởrộngcủaC++-19-Tathamkhảochơngtrìnhsau:VVVVííííddddụụụụ2.62.62.62.6#include<iostream.h>#include<conio.h>voidmain(){intn;floatx;chart[81];clrscr();do{cout<<"Nhapvaomotsonguyen,motxau,motsothuc:";cin>>n>>t>>x;cout<<"Danhap"<<n<<","<<t<<"va"<<x<<"\n";}while(n);}Nhapvaomotsonguyen,motxau,motsothuc:3long3 .4 Danhap3,longva3 .4 Nhapvaomotsonguyen,motxau,motsothuc:5hung5.6Danhap5,hungand5.6Nhapvaomotsonguyen,motxau,motsothuc: 04 3Danhap0,4va33.3.3.3.NhNhNhNhữữữữngngngngtitititiệệệệnnnnííííchchchchchochochochongngngngờờờờiiiillllậậậậpppptrtrtrtrììììnhnhnhnh3.13.13.13.1ChChChChúúúúththththííííchchchchcucucucuốốốốiiiiddddòòòòngngngngMọikýhiệuđisau//chođếnhếtdòngđợccoilàchúthích,đợcchơngtrìnhdịchbỏquakhibiêndịchchơngtrình.Xétvídụsau:cout<<"Xinchao\n";//lờichàohỏiThờngtasửdụngchúthíchcuốidòngkhimuốngiảithíchýnghĩacủamộtcâulệnhgìđó.Đốivớimộtđoạnchơngtrìnhkiểuchúthíchgiớihạnbởi/*và*/chophépmôtảđợcnhiềuthôngtinhơn.CácmởrộngcủaC++-23-square(3)sẽgâylỗibiêndịchvìtakhôngthểthựchiệncácphéptoántănggiảmtrêncáctoánhạnglàhằngsố.Việcsửdụnghàminlineinlineinlineinlinenhmộtgiảiphápthaythếsẽtránhđợccáctìnhhuốngnhthế.Ngoàira,cáchàminlineinlineinlineinlinecóthểđợctốiubởichơngtrìnhbiêndịch.Điềuquantrọnglàđặctảinlineinlineinlineinlinechỉlàmộtyêucầu,chứkhôngphảilàmộtchỉthịđốivớitrìnhbiêndịch.Nếuvìmộtlýdonàođótrìnhbiêndịchkhôngthểđápứngđợcyêucầu(chẳnghạnkhibêntrongđịnhnghĩahàminlineinlineinlineinlinecócáccấutrúclặp)thìhàmsẽđợcbiêndịchnhmộthàmbìnhthờngvàyêucầuinlineinlineinlineinlinesẽbịbỏqua.Hàminlineinlineinlineinlinephảiđợckhaibáobêntrongtệptinnguồnchứacáchàmsửdụngnó.Khôngthểdịchtáchbiệtcáchàminlineinlineinlineinline.15.5.5.5.ThamThamThamThamchichichichiếếếếuuuuNgônngữC++giớithiệumộtkháiniệmmớireferencetạmdịchlàthamchiếu.Vềbảnchất,thamchiếulàbídanhcủamộtvùngnhớđợccấpphátchomộtbiếnnàođó.Mộtthamchiếucóthểlàmộtbiến,thamsốhìnhthứccủahàmhaydùnglàmgiátrịtrảvềcủamộthàm.CácphầntiếpsaulầnlợtgiớithiệucáckhảnăngcủathamchiếuđợcsửdụngtrongchơngtrìnhviếtbằngngônngữC++.5.15.15.15.1ThamThamThamThamchichichichiếếếếuuuuttttớớớớiiiimmmmộộộộttttbibibibiếếếếnnnnXéthaichỉthị:intn;int&p=n;Trongchỉthịthứhai,dấu&đểxácđịnhplàmộtbiếnthamchiếucòndấu=vàtênbiếnnđểxácđịnhvùngnhớmàpthamchiếutới.Lúcnàycảhaiđịnhdanhpvàncùngxácđịnhvùngnhớđợccấpphátchobiếnn.Nhvậycácchỉthịsau:n=3;cout<<p;1Biêndịchtáchbiệtchophépkhaibáohàmtrongmộttệptiêuđề,cònđịnhnghĩahàmđólạiởtrongtậptinchơngtrìnhsửdụnghàm.CácmởrộngcủaC++-21-Trongnhữngtrờnghợpcầnthiết,khimuốntruyxuấttớibiếntoàncụcphảisửdụngtoántử::::::::trớctênbiến:#include<iostream.h>intx;main(){intx=10;//xcụcbộ::x=10;//xtoàncụccout<<x<<\n;//xcụcbộcout<<::x<<\n;//xtoàncục} 4. 4. 4. 4. HHHHààààmmmminlineinlineinlineinlineTrongC++cóthểđịnhnghĩacáchàmđợcthaythếtrựctiếpthànhmÃlệnhmáytạichỗgọi(inline)mỗilầnđợcthamchiếu.ĐiểmnàyrấtgiốngvớicáchhoạtđộngcủacácmacrocóthamsốtrongC.Ưuđiểmcủacáchàminlineinlineinlineinlinelàchúngkhôngđòihỏicácthủtụcbổsungkhigọihàmvàtrảgiátrịvề.Dovậyhàminlineinlineinlineinlineđợcthựchiệnnhanhhơnsovớicáchàmthôngthờng.Mộthàminlineinlineinlineinlineđợcđịnhnghĩavàđợcsửdụnggiốngnhbìnhthờng.Điểmkhácnhauduynhấtlàphảiđặtmôtảinlineinlineinlineinlinetrớckhaibáohàm.Xétvídụsauđây:VVVVííííddddụụụụ2.72.72.72.7#include<iostream.h>#include<math.h>#include<conio.h>inlinedoublenorme(doublevec[3]);//khaibáohàminlinevoidmain(){clrscr();doublev1[3],v2[3];inti;for(i=0;i<3;i++){v1[i]=i;v2[i]=2*i-1;}cout<<"normecuav1:"<<norme(v1)<<"-normecuav2:"<<norme(v2); ... )sẽkếtthúcviệcđọctừcincincincin;kýtựkhônghợplệnàysẽđợcxemxéttronglầnđọcsau.(ii)Đốivớigiátrịxâukýtự,dấuphâncáchcũnglàSPACE,TAB,CR,cònđốivớigiátrịkýtự,dấuphâncáchlàkýtựCR.Tronghaitrờnghợpnàykhôngcókháiniệmkýtựkhônghợplệ.MÃsinhradobấmphímEntercủalầnnhậptrớcvẫnđợcxéttronglầnnhậpxâu/kýtựtiếptheovàdovậysẽcónguycơkhôngnhậpđợcđúnggiátrịmongmuốnkhiđaralệnhnhậpxâukýtựhoặckýtựngaysaucáclệnhnhậpcácgiátrịkhác.Giảiphápkhắcphụcvấnđềnàyđểđảmbảocôngviệcdiễnrađúngtheoýlàtrớcmỗilầngọilệnhnhậpdữliệuchoxâu/kýtựtasửdụngmộttronghaichỉthịsauđây:fflush(stdin);//khaibáotrongstdio.hcin.clear();//hàmthànhphầncủalớpđịnhnghĩađốitợngcinCácmởrộngcủaC++-38-cin>>taille;for(nbloc=1;;nbloc++){adr=newint[taille];cout<<"Capphatblocso:"<<nbloc<<"\n";}}voidoutof()//hàmđợcgọikhithiếubộnhớ{cout<<"Hetbonho-Ketthuc\n";exit(1);}9.9.9.9.TTTTóóóómmmmttttắắắắtttt9.19.19.19.1GhiGhiGhiGhinhnhnhnhớớớớC++làmộtsựmởrộngcủaC(superset),dođócóthểsửdụngmộtchơngtrìnhbiêndịchC++đểdịchvàthựchiệncácchơngtrìnhnguồnviếtbằngC.Cyêucầucácchúthíchnằmgiữa/*và*/.C++cònchophéptạomộtchúthíchbắtđầubằng//chođếnhếtdòng.C++chophépkhaibáokhátuỳý.Thậmchícóthểkhaibáobiếntrongphầnkhởitạocủacâulệnhlặpfor.C++chophéptruyềnthamsốchohàmbằngthamchiếu.ĐiềunàytơngtựnhtruyềnthambiếnchochơngtrìnhcontrongngônngữPASCAL.Tronglờigọihàmtadùngtênbiếnvàbiếnđósẽđợctruyềnchohàmquathamchiếu.Điềuđóchophépthaotáctrựctiếptrênbiếnđợctruyềnchứkhôngphảigiántiếpquabiếntrỏ.ToántửnewnewnewnewvàdeletedeletedeletedeletetrongC++đợcdùngđểquảnlýbộnhớđộngthayvìcáchàmcấpphátđộngcủaC.C++chophépngờiviếtchơngtrìnhmôtảcácgiátrịngầmđịnhchocácthamsốcủahàm,nhờđóhàmcóthểđợcgọivớimộtdanhsáchcácthamsốkhôngđầyđủ.Toántử::::::::chophéptruynhậpbiếntoàncụckhiđồngthờisửdụngbiếncụcbộvàtoàncụctrùngtên.CácmởrộngcủaC++-16-VVVVííííddddụụụụ2.32.32.32.3Sửdụngcoutcoutcoutcoutvà<<đaracácgiátrịkhácnhau:#include<iostream.h>/*phảikhaibáokhimuốnsửdụngcout*/voidmain(){intn=25;cout<<"Value:";cout<<n;}Value:25TrongvídụnàychúngtađÃsửdụngtoántử<<đểinramànhìnhđầutiênlàmộtxâukýtự,sauđólàmộtsốnguyên.Chứcnăngcủatoántử<<rõrànglàkhácnhautronghailầnkếtxuấtdữliệu:vớicâulệnhthứnhất,chỉđaramànhìnhmộtdÃycáckýtự,ởcâulệnhsau,đÃsửdụngmộtkhuônmẫuđểchuyểnđổimộtgiátrịnhịphânthànhmộtchuỗicáckýtựchữsố.ViệcmộttoántửcónhiềuvaitròkhácnhauliênquanđếnmộtkháiniệmmớitrongC++,đólàĐịnhnghĩachồngtoántử.Điềunàysẽđợcđềcậpđếntrongchơng4.VVVVííííddddụụụụ2 .4 2 .4 2 .4 2 .4 Trongvídụnàytagộpcảhaicâulệnhkếtxuấttrongvídụ2.3thànhmộtcâulệnhphứctạphơn,tuykếtquảkhôngkháctrớc:#include<iostream.h>/*phảikhaibáokhimuốnsửdụngcout*/voidmain(){intn=25;cout<<"Value:"<<n;}Value:252.22.22.22.2CCCCáááácccckhkhkhkhảảảảnnnnăăăăngngngngviviviviếếếếttttrarararatrtrtrtrêêêênnnncoutcoutcoutcout....Chúngtavừaxemxétmộtvàivídụviếtmộtxâukýtự,mộtsốnguyên.Mộtcáchtổngquát,chúngtacóthểsửdụngtoántử<<cùngvớicoutcoutcoutcoutđểđaramànhìnhgiátrịcủamộtbiểuthứccócáckiểusau:8.kiểudữliệucơsở(charcharcharchar,intintintint,floatfloatfloatfloat,doubledoubledoubledouble),9.xâukýtự:(charcharcharchar*),10.contrỏ(trừcontrỏcharcharcharchar*)CácmởrộngcủaC++-28-Cómộtvấnđềmàchắcrằngbạnđọcsẽphânvân:làmthếnàođểkhởitạocácthamsốhìnhthứclàthamchiếu.Xintharằngđiềuđóđợcthựchiệntựđộngtrongmỗilờigọihàmchứkhôngphảitrongđịnhnghĩa.Từđónảysinhthêmmộtnhậnxétquantrọng:thamsốứngvớithamsốhìnhthứclàthamchiếuphảilàbiếntrừtrờnghợpcótừkhoáconstđứngtrớckhaibáothamsốhìnhthức.Chẳnghạnkhôngthểthựchiệnlờigọihàmsau:swap3(2,3);BạnđọccóthểxemthêmphầnHàmthiếtlậpsaochéplạiđểthấyđợcíchlợitolớncủaviệctruyềnthamsốchohàmbằngthamchiếu.ChChChChúúúúýýýý:khimuốntruyềnbằngthambiếnmộtbiếntrỏthìviếtnhsau:int*&adr;//adrlàmộtthamchiếutớimộtbiếntrỏchỉđếnmộtbiếnnguyên.5.35.35.35.3GiGiGiGiáááátrtrtrtrịịịịtrtrtrtrảảảảvvvvềềềềccccủủủủaaaahhhhààààmmmmllllààààthamthamthamthamchichichichiếếếếuuuuĐịnhnghĩacủahàmcódạngnhsau:<type>&fct(...