-- ·|­û / µù¥U -- ¡@
¡@±b¸¹¡G
¡@±K½X¡G
¡@ | µù¥U | §Ñ°O±K½X
3/26 ·s®Ñ¨ì¡I 3/19 ·s®Ñ¨ì¡I 3/14 ·s®Ñ¨ì¡I 12/12 ·s®Ñ¨ì¡I
ÁʮѬyµ{¡EQ & A¡E¯¸°È¯d¨¥ª©¡E«ÈªA«H½c
¢x 3ds Max¢x Maya¢x Rhino¢x After Effects¢x SketchUp¢x ZBrush¢x Painter¢x Unity¢x
¢x PhotoShop¢x AutoCad¢x MasterCam¢x SolidWorks¢x Creo¢x UG¢x Revit¢x Nuke¢x
¢x C#¢x C¢x C++¢x Java¢x ¹CÀ¸µ{¦¡¢x Linux¢x ´O¤J¦¡¢x PLC¢x FPGA¢x Matlab¢x
¢x Àb«È¢x ¸ê®Æ®w¢x ·j¯Á¤ÞÀº¢x ¼v¹³³B²z¢x Fluent¢x VR+AR¢x ANSYS¢x ²`«×¾Ç²ß¢x
¢x ³æ´¹¤ù¢x AVR¢x OpenGL¢x Arduino¢x Raspberry Pi¢x ¹q¸ô³]­p¢x Cadence¢x Protel¢x
¢x Hadoop¢x Python¢x Stm32¢x Cortex¢x Labview¢x ¤â¾÷µ{¦¡¢x Android¢x iPhone¢x
¥i¬d®Ñ¦W,§@ªÌ,ISBN,3dwoo®Ñ¸¹
¸Ô²Ó®ÑÄy¤ÀÃþ

²`«×±´¯ÁC++¹ï¶H¼Ò«¬

( ²Åé ¦r)
§@ªÌ¡G«J±¶Ãþ§O¡G1. -> µ{¦¡³]­p -> C++ -> C++
ĶªÌ¡G
¥Xª©ªÀ¡G¹q¤l¤u·~¥Xª©ªÀ²`«×±´¯ÁC++¹ï¶H¼Ò«¬ 3dWoo®Ñ¸¹¡G 31827
¸ß°Ý®ÑÄy½Ð»¡¥X¦¹®Ñ¸¹¡I

¡i¯Ê®Ñ¡j
NT°â»ù¡G 495 ¤¸

¥Xª©¤é¡G11/1/2020
­¶¼Æ¡G356
¥úºÐ¼Æ¡G0
¯¸ªø±ÀÂË¡G
¦L¨ê¡G¶Â¥Õ¦L¨ê»y¨t¡G ( ²Åé ª© )
¥[¤JÁʪ«¨® ¢x¥[¨ì§Úªº³Ì·R
(½Ð¥ýµn¤J·|­û)
ISBN¡G9787121149528
§@ªÌ§Ç¡@|¡@ĶªÌ§Ç¡@|¡@«e¨¥¡@|¡@¤º®e²¤¶¡@|¡@¥Ø¿ý¡@|¡@§Ç
(²Åé®Ñ¤W©Ò­z¤§¤U¸ü³sµ²¯Ó®É¶O¥\, ®¤¤£¾A¥Î¦b¥xÆW, ­YŪªÌ»Ý­n½Ð¦Û¦æ¹Á¸Õ, ®¤¤£«OÃÒ)
§@ªÌ§Ç¡G

ĶªÌ§Ç¡G

«e¨¥¡G

¥»¥ß¹D¥Í ¡]«J±¶ Ķ§Ç¡^
¹ï¤_¶Ç²Îªºµ²ºc¤Æ¡]sequential¡^»y¨¥¡A§Ú­Ì¦V¨Ó¨S¦³¤Ó¦hªººÃ´b¡AÁöµM¦b¨ç¼Æ½Õ¥Îªº­I¦Z¡A¤]¦³µÛ°ï´Ì«Ø¨î¡B°Ñ¼Æ±Æ¦C¡Bªð¦^¦a§}¡B°ï´Ì²M°£µ¥µ¥¹õ¦Z¾÷¨î¡A¦ý¨ç¼Æ½Õ¥Î¬O¨º¤\ªº¦ÛµM¦Ó©úÅã¡A¦n¹³¥u¬O§¨±aµÛ¤@­Ó¥]»q¡A±qµ{§Çªº¬Y¤@­Ó¦aÂI¸õ¨ì¥t¤@­Ó¦aÂI¥h°õ¦æ¡C
¦ý¬O¹ï¤_­±¦V¹ï¶H¡]Object Oriented¡^»y¨¥¡A§Ú­ÌªººÃ´b´N¦h¤F¡C¨s¨ä¦]¡A³oºØ»y¨¥ªº½sĶ¾¹¬°§Ú­Ì¡]µ{§Ç­û¡^°µ¤F¤Ó¦hªºªA°È¡Gºc³y¨ç¼Æ¡BªRºc¨ç¼Æ¡BµêÀÀ¨ç¼Æ¡BÄ~©Ó¡B¦hºA¡K¡K¦³®É­Ô¥¦¬°§Ú­Ì¦X¦¨¥X¤@¨ÇÃB¥~ªº¨ç¼Æ¡]©Î¹Bºâ²Å¡^¡A¦³®É­Ô¥¦¤SÂX±i§Ú­Ì©Ò¼gªº¨ç¼Æ¤º®e¡A©ñ¶i§ó¦hªº¾Þ§@¡C¦³®É­Ô¥¦ÁÙ·|¬°§Ú­Ìªºobjects¥[ªo²K¾L¡A©ñ¶i¤@¨Ç©_§®ªºªF¦è¡A¨Ï§A­±¹ïsizeofªºµ²ªG¤jÅ奢¦â¡C
§Ú¤ß¨½ÀY¤@ª½¦³­ÓºÃ´b¡G­pºâ¾÷µ{§Ç³Ì°ò¦ªº§Î¦¡¡AÁ`¬O²æÂ÷¤£¤F¤@¦æ¤@¦æªº´`§Ç°õ¦æ¼Ò¦¡¡A¬°¤°¤\OO¡]­±¦V¹ï¶H¡^»y¨¥«o¯à°÷¡§¦Û°Ê§¹¦¨¡¨³o¤\¦h¨Æ±¡©O¡H¥t¤@­ÓºÃ´b¬O¡A«Â¤O±j¤jªºpolymorphism¡]¦hºA¡^¡A¨ä©³¼h¾÷¨î¨s³º¦p¦ó¡H




¦pªG¤£¤F¸Ñ½sĶ¾¹¹ï§Ú­Ì©Ò¼gªºC++¥N½X°µ¤F¤°¤\¤â¸}¡A³o¨Ç§x´b¥Ã»·¸Ñ¤£¶}¡C
³o¥»®Ñ¸Ñ¨M¤F¹L¥h¥O§Ú¦Ê«ä¤£¸Ñªº½Ñ¦hºÃ´b¡C§Ú­n¦V©Ò¦³¤w¨ã³ÆC++¦h¦~µ{§Ç³]­p¸gÅ窺¦P¦n­Ì¤j¤O±ÀÂ˳o¥»®Ñ¡C
³o¥»®Ñ¦P®É¤]¬OÅD¦V²Õ¥ó³n¥ó¡]component-ware¡^°ò¥»ºë¯«ªº¡§¸õªO¡¨¡C¤£ºÞ§A·Q¾Ç²ßCOM¡]Component Object Model¡^¡BCORBA¡]Common Object Request Broker Architecture¡^©Î¬OSOM¡]System Object Model¡^¡A¤F¸ÑC++ Object Model¡A±N¨Ï§A§ó²M·¡³n¥ó²Õ¥ó¡]components¡^³]­p¤WªºÃøÂI»P¹B¥Î¤§¹D¡C¤£¦ý§Ú¦Û¤v¦b¾Ç²ßCOMªº¹D¸ô¤W¦³¦¹±j¯Pªº·P¨ü¡AEssential COM¡]¡mCOM¥»½è½×¡n¡A«J±¶Ä¶¡AùÖ®p1998¡^ªº§@ªÌDon Box¤]¦b¥Lªº®Ñ¤¤±À±RLippmanªº³o¤@¥»¨ô¶Vªº®ÑÄy¡C
¬Oªº¡A³o·íµM¤£·|¬O¤@¥»»´ªQªº®ÑÄy¡C¬Y¨Ç³¹¸`¡]¨Ò¦p3¡B4¨â³¹¡^¥i¯àµ¹§A¥ß§Yªº¨É¨ü¡X¡X¨É¨ü¤_­±¹ï©³¼h¾÷¨î¦³©ÒÅé·|»P´x±±ªº§Ö¼Ö¡F¬Y¨Ç³¹¸`¡]¨Ò¦p5¡B6¡B7¤T³¹¡^¥i¯à±aµ¹§Aµu¼Èªºµh­W¡X¡Xµh­W¤_Á}Ãø²`Àß¡BÃø¥H§]«|ªº¤º®e¡C³o¨Ç§Ö¼Ö»Pµh­W¡A¨ä¹ê´N¬O§Ú½Ķ¦¹®Ñ®Éªº¤ß±¡¼g·Ó¡CµL½×¦p¦ó¡A§Ú§Æ±æ³q¹L§ÚªºÄ¶µ§¡A§â³o¥»Ãø±oªº¦n®Ñ±a¨ì§ó¦h¤H­±«e¡A¤Þ»â¤j®a¨£ÃÑC++©³¼h«Ø³]ªº§Þ³N¤§¬ü¡C
«J±¶ 2011.10.20 ¤_·s¦Ë
jjhou@ccca.nctu.edu.tw





½Ðª`·N¡G¥»®Ñ¯SÂI¡A§@ªÌLippman¦b¨ä«e¨¥¤¤¦³«Ü¸Ô²Óªº´y­z¡A§Ú¤£¦A¦h¨¥¡C½Ķ¥Îµü»P¤ß±o¡A°O¿ý¦b²Ä¢¯³¹¡]ĶªÌªº¸Ü¡^¤§¤¤¡A¹ï±z©Î¦³¾ÉŪ¤§¥\¡C
½Ðª`·N¡G­ì¤å¥»¦³¤j¤j¤p¤p¬ù80¡ã90­Óµ§»~¡C¦³ªºµL¶Ë¤j¶®¡A¦³ªº¼vÅT¾\Ū¶¶ºZ¬Æ¥¨¡]¦p«e¦Z¤å©Ò¥Î²Å¸¹¤£¤@­P¡B¤º¤å»P¹Ï§Î©Ò¥Î²Å¸¹¤£¤@­P¡X¡X¬Æ¦Ü¦]¦Ó¾É­P¹Ï¤ùªº¤å¦r¸ÑÄÀ¤£¥¿½T¡^¡C§Ú¤w¦b²Ä0³¹¡]ĶªÌªº¸Ü¡^¦C¥X©Ò¦³§Ú§ä¨ìªº¿ù»~¡C¦¹¥~¡A¬Y¨Ç³õ¦X§ÚÁÙ·|¦b¿ù»~¥X²{¤§³B¦A¥[ª`¡Aªí¥Ü­ì¤å¤º®e¬°¦ó¡C³o¤\°µ¤£¬Oµe³D²K¨¬¡A¤]¤£¬°¹üÅ㤰¤\¡C§Úª¾¹D¦³¨ÇŪªÌ®³µÛ­ì¤å®Ñ©M¤¤Ä¶®Ñ¹ï·ÓµÛ¬Ý¡A§Ú§â­ì®Ñ¿ù»~¥[ª`¥X¨Ó¡A¥i§KŪªÌÃhºÃ¬O§_§Ú¥´¿ù¦r©Î¬OĶ¿ù¤F¡C¥t¤@¤è­±¤]¬O¬°¤F¤å³d¦Û­t¡K¡K­ø¡K¡K¸U¤@Lippman¬O¹ïªº¦ÓJ.J.Hou¿ù¤F©O¡H¡I§ÚÁö¦³¬Û·í§â´¤¡A¦ýÁÙ¬O§Æ±æ©ú¥ÕÅu¶}¨ÓÅýŪªÌÀËÅç¡C


«e ¨¥ ¡]Stanley B. Lippman¡^



®t¤£¦h¦³10¦~¤§¤[¡A§Ú¦b¨©º¸¹êÅç«Ç¡]Bell Laboratories¡^®I­º¤_C++ªº¹ê²{¥ô°È¡C³Ìªìªº¤u§@¬O¦bcfront¤W­±¡]Bjarne Stroustrupªº²Ä¤@­ÓC++½sĶ¾¹¡^¡A±q1986¦~ªº1.1ª©¨ì1991¦~9¤ëªº3.0ª©¡CµM¦Z²¾Âà¨ìSimplifier¡]³o¬O§Ú­Ì¤º³¡ªº©R¦W¡^¡A¤]´N¬OFoundation¶µ¥Ø¤¤ªºC++¹ï¶H¼Ò«¬³¡¤À¡C¦bSimplifier³]­p´Á¶¡¡A§Ú¶}©lÁßÆC¥»®Ñ¡C
Foundation¶µ¥Ø¬O¤°¤\¡H¦b Bjarne ªº»â¾É¤U¡A¨©º¸¹êÅç«Ç¤¤ªº¤@­Ó¤p²Õ±´¯ÁµÛ¥HC++§¹¦¨¤j³W¼Òµ{§Ç³]­p®ÉªººØºØ°ÝÃDªº¸Ñ¨M¤§¹D¡CFoundation¶µ¥Ø¬O§Ú­Ì¬°¤Fºc«Ø¤j¨t²Î¦Ó§V¤O©w¸qªº¤@­Ó·sªº¶}µo¼Ò«¬¡]§Ú­Ì¥u¨Ï¥ÎC++¡A¦}¤£´£¨Ñ¦h­«»y¨¥ªº¸Ñ¨M¤è®×¡^¡C³o¬O­Ó¥O¤H¿³¾Äªº¤u§@¡A¤@¤è­±¬O¦]¬°¤u§@¥»¨­¡A¤@¤è­±¬O¦]¬°¤u§@¥ë¦ñ¡GBjarne¡BAndy Koenig¡BRob Murray¡BMartin Carroll¡BJudy Ward¡BSteve Buroff¡BPeter Juhl¡A¥H¤Î§Ú¦Û¤v¡CBarbara MooºÞ²z§Ú­Ì³o¤@¸s¤H¡]Bjarne©MAndy°£¥~¡^¡CBarbara Moo±`»¡ºÞ²z¤@­Ó³n¥ó¹Î¶¤¡A´N¹³©ñªª¤@¸sź¶Æªº¿ß¡C
§Ú­Ì§âFoundation·Q¶H¦¨¤@­Ó®Ö¤ß¡A¦b¨º¤W­±¡A¨ä¥L¤H¥i¥H¬°¨Ï¥ÎªÌ¾Q³]¤@¼h¯u¥¿ªº¶}µoÀô¹Ò¡A§â¥¦¾ã­×¬°¥L­Ì©Ò´Á±æªºUNIX©ÎSmalltalk¼Ò«¬¡C¨p©³¤U§Ú­Ì§â¥¦ºÙ¬°Grail¡]¶Ç»¡¤¤­C¿q³Ì¦Z±ßÀ\©Ò¥ÎªºÉoªM¡^¡A¤H¤H³£·Q­n¡A¦ý¬O±q¨Ó¨S¤H§ä¨ì¹L¡I
Grail¨Ï¥Î¤@­Ó¥ÑRob Murrayµo®i¥X¨Ó¦}©R¦W¬°ALFªº­±¦V¹ï¶H¼h¦¸µ²ºc¡A´£¨Ñ¤@­Ó¥Ã¤[ªº¡B¥H»y·N¬°°ò¦ªºªí²{ªk¡C¦bGrail¤¤¡A¶Ç²Î½sĶ¾¹³Q¤À¸Ñ¬°¼Æ­Ó¦U¦Û¤ÀÂ÷ªº¥i°õ¦æ¤å¥ó¡Cparser­t³d«Ø¥ßµ{§ÇªºALFªí²{ªk¡C¨ä¥L¨C¤@­Ó²Õ¥ó¡]¦ptype checking¡Bsimplification¡Bcode generation¡^¥H¤Î¤u¨ã¡]¦pbrowser¡^³£¦bµ{§Çªº¤@­ÓALFªí²{Åé¤W¾Þ§@¡]¦}¥i¯à¥[¥HÂX®i¡^¡CSimplifier¬O½sĶ¾¹ªº¤@³¡¤À¡A³B¤_type checking©Mcode generation¤§¶¡¡CSimplifier ³o­Ó¦WºÙ¬O¥ÑBjarne©Ò­Òijªº¡A¥¦­ì¥»¬Ocfrontªº¤@­Ó¶¥¬q¡]phase¡^¡C
¦btype checking©Mcode generation¤§¶¡¡ASimplifier°µ¤°¤\¨Æ©O¡H¥¦¥Î¨ÓÂà´«¤º³¡ªºµ{§Çªí²{¡C¦³¤TºØÂà´«­·¨ý¬O¥ô¦ó¹ï¶H¼Ò«¬³£»Ý­nªº¡G
1¡D»P½sĶ¾¹®§®§¬ÛÃöªºÂà´«¡]Implementation-dependent transformations¡^
³o¬O»P¯S©w½sĶ¾¹¦³ÃöªºÂà´«¡C¦bALF¤§¤U¡A³o·N¨ýµÛ§Ú­Ì©Ò¿×ªº¡§tentative¡¨nodes¡C¨Ò¦p¡A·íparser¬Ý¨ì³o­Óªí¹F¦¡¡G
fct();
¥¦¦}¤£ª¾¹D¬O§_¡]a¡^³o¬O¤@­Ó¨ç¼Æ½Õ¥Î¾Þ§@¡A©ÎªÌ¡]b¡^³o¬Ooverloaded call operator¦bclass object fct¤Wªº¤@ºØÀ³¥Î¡CÀq»{±¡ªp¤U¡A³o­Ó¦¡¤l©Ò¥Nªíªº¬O¤@­Ó¨ç¼Æ½Õ¥Î¡A¦ý¬O·í¡]b¡^ªº±¡ªp¥X²{¡ASimplifier ´N­n­«¼g¦}½Õ´« call subtree¡C
2¡D»y¨¥»y·NÂà´«¡]Language semantics transformations¡^
³o¥]¬Aconstructor/destructorªº¦X¦¨©MÂX®i¡Bmemberwiseªì©l¤Æ¡B¹ï¤_memberwise copyªº¤ä«ù¡B¦bµ{§Ç¥N½X¤¤¦w´¡conversion operators¡BÁ{®É©Ê¹ï¶H¡A¥H¤Î¹ïconstructor/destructorªº½Õ¥Î¡C
3¡Dµ{§Ç¥N½X©M¹ï¶H¼Ò«¬ªºÂà´«¡]Code and object model transformations¡^
³o¥]¬A¹ïvirtual functions¡Bvirtual base class©Minheritanceªº¤@¯ë¤ä«ù¡Bnew©Mdelete¹Bºâ²Å¡Bclass objects©Ò²Õ¦¨ªº¼Æ²Õ¡Blocal static class instances¡B±a¦³«D±`¶qªí¹F¦¡¡]nonconstant expression¡^¤§global objectªºÀRºAªì©l¤Æ¾Þ§@¡C§Ú¹ïSimplifier©Ò³W¹ºªº¤@­Ó¥Ø¼Ð¬O¡G´£¨Ñ¤@­Ó¹ï¶H¼Ò«¬Åé¨t¡A¦b¨ä¤¤¡A¹ï¶Hªº¹ê²{¬O¤@­ÓµêÀÀ±µ¤f¡A¤ä«ù¦UºØ¹ï¶H¼Ò«¬¡C
³Ì¦Z¨âºØÃþ«¬ªºÂà´«ºc¦¨¤F¥»®Ñªº°ò¦¡C³o·N¨ýµÛ¥»®Ñ¬O¬°½sĶ¾¹³]­pªÌ¦Ó¼gªº¶Ü¡H¤£¬O¡Aµ´¹ï¤£¬O¡I³o¥»®Ñ¬O¥Ñ¤@¦ì½sĶ¾¹³]­pªÌ°w¹ï¤¤°ª¯ÅC++µ{§Ç­û©Ò¼gªº¡CÁôÂæb³o¥»®Ñ­I¦Zªº°²³]¬O¡Aµ{§Ç­û¦pªG¤F¸ÑC++¹ï¶H¼Ò«¬¡A´N¥i¥H¼g¥X¤ñ¸û¨S¦³¿ù»~¶É¦V¦Ó¥B¤ñ¸û¦³®Ä²vªº¥N½X¡C
¤°¤\¬OC++¹ï¶H¼Ò«¬
¦³¨â­Ó·§©À¥i¥H¸ÑÄÀC++¹ï¶H¼Ò«¬¡G
1. »y¨¥¤¤ª½±µ¤ä«ù­±¦V¹ï¶Hµ{§Ç³]­pªº³¡¤À¡C
2. ¹ï¤_¦UºØ¤ä«ùªº©³¼h¹ê²{¾÷¨î¡C
»y¨¥¼h­±ªº¤ä«ù¡A²[»\¤_§ÚªºC++ Primer¤@®Ñ¥H¤Î¨ä¥L³\¦hC++®ÑÄy·í¤¤¡C¦Ü¤_²Ä¤G­Ó·§©À¡A«h´X¥G¤£¯à°÷¤_¥Ø«e¥ô¦óŪª«¤¤µo²{¡A¥u¦³[ELLIS90]©M[STROUP94]«j±j¦³¤@¨Çµïµ·°¨¸ñ¡C¥»®Ñ¥D­n±Mª`¤_C++¹ï¶H¼Ò«¬ªº²Ä¤G­Ó·§©À¡C¥»®Ñ»y¨¥¿í´`C++©e­û·|¤_1995¥V©u·|ij¤¤³q¹LªºStandard C++¯ó®×¡]°£¤F¬Y¨Ç²Ó¸`¡A³o¥÷¯ó®×À³¸Ó¯à°÷¤Ï¬M¥X¦¹»y¨¥ªº³Ì²×ª©¥»¡^¡C
C++¹ï¶H¼Ò«¬ªº²Ä¤@­Ó·§©À¬O¤@ºØ¡§¤£Åܶq¡¨¡C¨Ò¦p¡AC++ classªº§¹¾ãvirtual functions¦b½sĶ®É´Á´N©T©w¤U¨Ó¤F¡Aµ{§Ç­û¨S¦³¿ìªk¦b°õ¦æ´Á°ÊºA¼W¥[©Î¨ú¥N¨ä¤¤ªº¬Y¤@­Ó¡C³o¨Ï±oµêÀÀ½Õ¥Î¾Þ§@±o¥H§Ö³t¦a¬£°e¡]dispatch¡^µ²ªG¡A¥I¥Xªº¦¨¥»«h¬O°õ¦æ´Áªº¼u©Ê¡C
¹ï¶H¼Ò«¬ªº©³¼h¹ê²{¾÷¨î¡A¦b»y¨¥¼h­±¤W¬O¬Ý¤£¥X¨Óªº¡X¡XÁöµM¹ï¶H¼Ò«¬ªº»y·N¥»¨­¥i¥H¨Ï±o¬Y¨Ç¹ê²{«~¡]½sĶ¾¹¡^¤ñ¨ä¥L¹ê²{«~§ó±µªñ¦ÛµM¡C¨Ò¦p¡Avirtual function calls¡A¤@¯ë¦Ó¨¥¬O³q¹L¤@­Óªí®æ¡]¤º§tvirtual functions¦a§}¡^ªº¯Á¤Þ¦Ó¨Mij±oª¾¡C¤@©w­n¨Ï¥Î¦p¦¹ªº virtual table ¶Ü¡H¤£¡A½sĶ¾¹¥i¥H¦Û¥Ñ¤Þ¶i¨ä¥L¥ô¦óÅܳq°µªk¡C¦pªG¨Ï¥Îvirtual table¡A¨º¤\¨ä¥¬§½¡B¦s¨ú¤èªk¡B²£¥Í®É¾÷¥H¤Î¼Æ¦Ê­Ó²Ó¸`¤]³£¥²¶·¨M©w¤U¨Ó¡A¦Ó©Ò¦³¨M©w¤]³£¥Ñ¨C¤@­Ó¹ê²{«~¡]½sĶ¾¹¡^¦Û¦æ¨úªÙ¡C¤£¹L¡A¬JµM»¡¨ì³o¨½¡A§Ú¤]¥²¶·©ú¥Õ§i¶D§A¡A¥Ø«e©Ò¦³½sĶ¾¹¹ï¤_virtual functionªº¹ê²{ªk³£¬O¨Ï¥Î¦U­Óclass±MÄݪºvirtual table¡A¤j¤p©T©w¡A¦}¥B¦bµ{§Ç°õ¦æ«e´Nºc³y¦n¤F¡C
¦pªGC++¹ï¶H¼Ò«¬ªº©³¼h¾÷¨î¦}¥¼¼Ð·Ç¤Æ¡A¨º¤\§A¥i¯à·|°Ý¡G¦ó¥²±´°Q¥¦©O¡H¥D­nªº²z¥Ñ¬O¡A§Úªº¸gÅç§i¶D§Ú¡A¦pªG¤@­Óµ{§Ç­û¤F¸Ñ©³¼h¹ê²{¼Ò«¬¡A¥L´N¯à°÷¼g¥X®Ä²v¸û°ªªº¥N½X¡A¦Û«H¤ß¤]¤ñ¸û°ª¡C¤@­Ó¤H¤£À³¸Ó¥Î²qªº¤è¦¡¡A©Î¬Oµ¥«Ý¬Y¤j®vªº«Å§P¡A¤~½T©w¡§¦ó®É´£¨Ñ¤@­Ócopy constructor¦Ó¦ó®É¤£»Ý­n¡¨¡C³oÃþ°ÝÃDªº¸ÑµªÀ³¸Ó¨Ó¦Û¤_§Ú­Ì¦Û¨­¹ï¹ï¶H¼Ò«¬ªº¤F¸Ñ¡C
¼g¥»®Ñªº²Ä¤G­Ó²z¥Ñ¬O¬°¤F®ø°£§Ú­Ì¹ï¤_C++»y¨¥¡]¤Î¨ä¹ï­±¦V¹ï¶Hªº¤ä«ù¡^ªº¦UºØ¿ù»~»{ÃÑ¡C¤U­±¤@¬q¸Ü¸`¿ý¦Û§Ú¦¬¨ìªº¤@«Ê«H¡A¨Ó«HªÌ§Æ±æ±NC++¤Þ¶i¤_¨äµ{§ÇÀô¹Ò¤¤¡G
§Ú©M¤@¸s¤H¤u§@¡A¥L­Ì¹L¥h¤£´¿¼g¹L¡]©Î§¹¥þ¤£¼ô±x¡^C++©MOO¡C¨ä¤¤¤@¦ì¤uµ{®v±q1985´N¶}©l¼gC¤F¡A¥L«D±`±j¯P¦a»{¬°C++¥u¹ï¨º¨Çuser-typeµ{§Ç¤~¦n¥Î¡A¹ïserverµ{§Ç«o¤£²z·Q¡C¥L»¡¦pªG­n¼g¤@­Ó§Ö³t¦Ó¦³®Ä²vªº¼Æ¾Ú®w¤ÞÀº¡AÀ³¸Ó¨Ï¥ÎC¦Ó«DC++¡C¥L»{¬°C++Ãe¤j¤S¿ð½w¡C
C++·íµM¦}¤£¬O¤Ñ¥Í¦aÃe¤j¤S¿ð½w¡A¦ý§Úµo²{³o¦ü¥G¦¨¬°Cµ{§Ç­ûªº¤@­Ó¦@ÃÑ¡CµM¦Ó¡A¥ú¬O³o¤\»¡¦}¤£¨¬¥H¨Ï¤H«HªA¡A¦óªp§Ú¤S³Q»{¬°¬OC++ªº¡§¥N¨¥¤H¡¨¡C¥»®Ñ´N¬O¥ø¹Ï·¥ºÉ¥i¯à¦a±N¦U¦¡¦U¼ËªºObject facilities¡]¦pinheritance¡Bvirtual functions¡B«ü¦Vclass membersªº«ü°w¡K¡K¡^©Ò±a¨ÓªºÃB¥~­t²ü»¡­Ó²M·¡¡C
°£¤F§Ú­Ó¤H¦^µª³o«Ê«H¥~¡A§Ú¤]§â¦¹«HÂà±Hµ¹HPªºSteve Vinoski¡F¥ý«e§Ú´¿»P¥L°Q½×¹LC++ªº®Ä²v°ÝÃD¡C¥H¤U¸`¿ý¦Û¥Lªº¦^À³¡G
¹L¥h¼Æ¦~§ÚÅ¥¹L¤Ó¦h»P§Aªº¦P¨ÆÃþ¦üªº¬Ýªk¡C³\¦h±¡ªp¤U¡A³o¨Ç¬Ýªk¬O·½¤_¹ïC++¨Æ¹ê¯u¬Ûªº¯Ê¥F¤F¸Ñ¡C¦b¤W©P¡A§Ú©M¤@¦ìªB¤Í¶~²á¡A¥L¦b¤@®aIC¨î³y¼tªA°È¡A¥L»¡¥L­Ì¤£¨Ï¥ÎC++¡A¦]¬°¡§¥¦¦b§Aªº­I¦Z°µ¨Æ±¡¡¨¡C§Ú³s³s°l°Ý¡A¤_¬O¥L»¡®Ú¾Ú¥Lªº¤F¸Ñ¡AC++½Õ¥Îmalloc()©Mfree()¦Ó¤£Åýµ{§Ç­ûª¾¹D¡C³o·íµM¤£¬O¯uªº¡C³o¬O¤@ºØ©Ò¿×ªº°g«ä»P¶Ç»¡¡A¤Þ¾É¥XÃþ¦ü¤_§Aªº¦P¨Æªº¬Ýªk¡K¡K
¦b©â¶H©Ê©M¹ê»Ú©Ê¤§¶¡§ä¥X¥­¿ÅÂI¡A»Ý­nª¾ÃÑ¡B¸gÅç¥H¤Î³\¦h«ä¦Ò¡CC++ªº¨Ï¥Î»Ý­n¥I¥X³\¦h¤ß¤O¡A¦ý¬O§Úªº¸gÅç§i¶D§Ú¡A³o¶µ§ë¸êªº¦^³ø²v¬Û·í°ª¡C
§Ú³ßÅw§â¥»®Ñ·Q¶H¦¨¬O§Ú¹ï¨º¤@«ÊŪªÌ¨Ó«Hªº¦^µª¡C¬Oªº¡A¥»®Ñ¬O¤@­Óª¾Ãѳ¯¦C®w¡AÀ°§U¤j®a¥h°£³ò¶¦bC++¥|©Pªº°g«ä»P¶Ç»¡¡C
¦pªGC++¹ï¶H¼Ò«¬ªº©³¼h¾÷¨î·|¦]¬°¹ê²{«~¡]½sĶ¾¹¡^©M®É¶¡ªºÅܰʦӤ£¦P¡A§Ú¦p¦ó¯à°÷¹ï¤_¥ô¦ó¯S©w¥DÃD´£¨Ñ¤@¯ë¤Æªº°Q½×©O¡HÀRºAªì©l¤Æ¡]Static initialization¡^¥i¬°¦¹´£¨Ñ¤@­Ó¦³½ìªº¨Ò¤l¡C
¤wª¾¤@­Óclass X¦³µÛconstructor¡A¦p¤U­±©Ò¥Ü¡G

class X
{
friend istream¡®
operator¡Ö¡Ö( istream¡®, X¡® );
public:
X( int sz = 1024 ) { ptr = new char[ sz ]; }
...
private:
char *ptr;
};

¦Ó¤@­Óclass Xªºglobal objectªºÁn©ú¡A¦p¤U­±©Ò¥Ü¡G

X buf;

int main()
{
// buf ¥²¶·¦b³o­Ó®É­Ôºc³y°_¨Ó
cin ¡Ö¡Ö setw( 1024 ) ¡Ö¡Ö buf;
...
}

C++¹ï¶H¼Ò«¬«OÃÒ¡AX constructor±N¦bmain()¤§«e«K§âbufªì©l¤Æ¡CµM¦Ó¥¦¦}¨S¦³»¡©ú³o¬O¦p¦ó¿ì¨ìªº¡Cµª®×¬O©Ò¿×ªºÀRºAªì©l¤Æ¡]static initialization¡^¡A¹ê»Ú°µªk«h¦³¿à¶}µoÀô¹Ò¹ï¦¹ªº¤ä«ùÄݤ_­þ¤@¼h¯Å¡C
­ì©lªºcfront¹ê²{«~¤£³æ¥u¬O°²·Q¨S¦³Àô¹Ò¤ä«ù¡A¥¦¤]°²·Q¨S¦³©ú½Tªº¥Ø¼Ð¥­»O¡C°ß¤@¯à°÷°²·Qªº¥­»O´N¬OUNIX¤Î¨ä­l¤Æªº¤@¨ÇÅÜÅé¡C§Ú­Ìªº¸Ñ¨M¤§¹D¤]¦]¦¹¥u±Mª`¦bUNIX¨­¤W¡G§Ú­Ì¨Ï¥Înm©R¥O¡CCC©R¥O¡]¤@­ÓUNIX shell script¡^²£¥Í¥X¤@­Ó¥i°õ¦æ¤å¥ó¡AµM¦Z§Ú­Ì§ânm¬I¦æ¤_¨ä¤W¡A²£¥Í¥X¤@­Ó·sªº.c¤å¥ó¡CµM¦Z½sĶ³o­Ó·sªº.c¤å¥ó¡A¦A­«·sÃì±µ¥X¤@­Ó¥i°õ¦æ¤å¥ó¡]³o´N¬O©Ò¿×ªºmunch solution¡^¡C³oºØ°µªk¬O¥H½sĶ¾¹®É¶¡¨Ó¥æ´«²¾´Ó©Ê¡C
±µ¤U¨Ó¬O´£¨Ñ¤@­Ó¡§¥­»O¯S©w¡¨¸Ñ¨M¤§¹D¡Gª½±µÅçÃÒ¦}¬ï¶VCOFF-basedµ{§Çªº¥i°õ¦æ¤å¥ó¡]¦¹§Y©Ò¿×ªº patch solution¡^¡A¤£¦A»Ý­nnm¡Bcompile¡Brelink¡CCOFF ¬OCommon Object File FormatªºÁY¼g¡A¬OSystem V pre-Release 4 UNIX¨t²Î©Òµo®i¥X¨Óªº®æ¦¡¡C³o¨âºØ¸Ñ¨M¤è®×³£Äݤ_µ{§Ç¼h­±¡A¤]´N¬O»¡¡A°w¹ï¨C¤@­Ó»Ý­nÀRºAªì©l¤Æªº.c¤å¥ó¡Acfront ·|²£¥Í¥X¤@­Ósti¨ç¼Æ¡A°õ¦æ¥²­nªºªì©l¤Æ¾Þ§@¡C¤£½×¬Opatch solutionÁÙ¬Omunch solution¡A³£·|¥h´M§ä¥Hsti¶}ÀYªº¨ç¼Æ¡A¦}¥B¦w±Æ¥¦­Ì¥H¤@ºØ¥¼³Q©w¸qªº¶¶§Ç°õ¦æ¡]¥Ñ¦w´¡¦bmain()¤§¦Z²Ä¤@¦æªº¤@­Ólibrary function _main()°õ¦æ¤§¡^¡]Ķª`¡G¥»®Ñ²Ä6³¹¹ï¦¹¦³¸Ô²Ó»¡©ú¡^¡C
System V COFF-specific C++½sĶ¾¹»Pcfrontªº¦U­Óª©¥»¥­¦æµo®i¡C¥Ñ¤_ºË·Ç¤F¤@­Ó¯S©w¥­»O©M¯S©w¾Þ§@¨t²Î¡A¦¹½sĶ¾¹¦]¦Ó¯à°÷¼vÅTÃì±µ¾¹¯S¦a¬°¥¦­×§ï¡G²£¥Í¥X¤@­Ó·sªº.ini section¡A¥Î¥H¦¬¶°»Ý­nÀRºAªì©l¤Æªºobjects¡CÃì±µ¾¹ªº³oºØÂX¥R¤è¦¡¡A´£¨Ñ¤F©Ò¿×ªºenvironment-based solution¡A¨º·íµM§ó¦bprogram-based solution¼h¦¸¤§¤W¡C
¦Ü¦¹¡A¥ô¦ó¥Hcfront program-based solution¬°°ò¦ªº¤@¯ë¤Æ¡]ªx«¬¡^¾Þ§@±N¥O¤H°g´b¡C¬°¤°¤\¡H¦]¬°C++¤w¸g¦¨¬°¥D¬y»y¨¥¡A¥¦¤w¸g±µ¦¬¤F¶V¨Ó¶V¦hªºenvironment-based solutions¡C¥»®Ñ¦p¦óºûÅ@¨ä¶¡ªº¥­¿Å©O¡H§Úªºµ¦²¤¦p¤U¡G¦pªG¦b¤£¦PªºC++½sĶ¾¹¤W¦³­«¤jªº¹ê²{§Þ³N®t²§¡A§Ú´N¦Ü¤Ö°Q½×¨âºØ°µªk¡C¦ý¦pªG cfront¤§¦Zªº½sĶ¾¹¹ê²{¼Ò«¬¥u¬O¸Ñ¨Mcfront­ì¥»´N¤w²z¸Ñªº°ÝÃD¡A¨Ò¦p¹ïµêÀÀÄ~©Óªº¤ä«ù¡A¨º¤\§Ú´NÄÄ­z¾ú¥vªººt¤Æ¡C·í§Ú»¡¨ì¡§¶Ç²Î¼Ò«¬¡¨®É¡A§Úªº·N«ä¬OStroustrupªº­ì©lºc·Q¡]¤Ï¬M¦bcfront¨­¤W¡^¡A¥¦´£¨Ñ¤@ºØ¹ê²{¼Ò­S¡A¦b¤µ¤Ñ©Ò¦³ªº°Ó·~¤Æ¹ê²{«~¤W¤´µM¥i¨£¡C
¥»®Ñ²Õ´
²Ä1³¹¡AÃö¤_¹ï¶H¡]Object Lessons¡^¡A´£¨Ñ¥H¹ï¶H¬°°ò¦ªºÆ[©À­I´º¡A¥H¤Î¥ÑC++´£¨Ñªº­±¦V¹ï¶Hµ{§Ç³]­p­S¦¡¡]paradigm¡CĶª`¡GÃö¤_paradigm³o­Ó¦r¡A½Ð°Ñ¾\¥»®Ñ²Ä1³¹²Ä22­¶ªºÄ¶ª`¡^¡C¥»³¹¥]¬A¹ï¹ï¶H¼Ò«¬ªº¤@­Ó·§­z¡A»¡©ú¥Ø«e´¶¤Îªº¤u·~²£«~¡A¦ý¨S¦³¹ï¤_¦h­«Ä~©Ó©MµêÀÀÄ~©Ó¦³¤Ó¾aªñªºÆ[¹î¡]¨º¬O²Ä¢²³¹©M²Ä¢³³¹ªº­«ÀYÀ¸¡^¡C
²Ä2³¹¡Aºc³y¨ç¼Æ»y·N¾Ç¡]The Semantics of Constructors¡^¡A¸Ô²Ó°Q½×constructor ¦p¦ó¤u§@¡C¥»³¹½Í¨ìconstructors¦ó®É³Q½sĶ¾¹¦X¦¨¡A¥H¤Îµ¹§Aªºµ{§Ç®Ä²v±a¨Ó¤°¤\¼Ëªº·N¸q¡C
²Ä3³¹¦Ü²Ä5³¹¬O¥»®Ñªº­«­n¤º®e¡C¦b³o¨½¡A§Ú¸Ô²Ó¦a°Q½×¤FC++¹ï¶H¼Ò«¬ªº²Ó¸`¡C²Ä3³¹¡AData»y·N¾Ç¡]The Semantics of Data¡^¡A°Q½×data membersªº³B²z¡C²Ä4³¹¡AFunction»y·N¾Ç¡]The Semantics of Function¡^¡A±Mª`¤_¦U¦¡¦U¼Ëªºmember functions¡A¦}¯S§O¸Ô²Ó¦a°Q½×¦p¦ó¤ä«ùvirtual functions¡C²Ä5³¹¡Aºc³y¡BªRºc¡B«þ¨©»y·N¾Ç¡]Semantics of Construction, Destruction, and Copy¡^¡A°Q½×¦p¦ó¤ä«ùclass¼Ò«¬¡A¤]°Q½×¨ìobjectªº¥Í©R´Á¡C¨C¤@³¹³£¦³´ú¸Õµ{§Ç¥H¤Î´ú¸Õ¼Æ¾Ú¡C§Ú­Ì¹ï®Ä²vªº¹w´ú¡A±N®³¨Ó©M¹ê»Úµ²ªG°µ¤ñ¸û¡C
²Ä6³¹¡A°õ¦æ´Á»y·N¾Ç¡]Runtime Semantics¡^¡A¬d¬Ý°õ¦æ´Áªº¬Y¨Ç¹ï¶H¼Ò«¬¦æ¬°¡C¥]¬AÁ{®É©Ê¹ï¶Hªº¥Í©R¤Î¨ä¦º¤`¡A¥H¤Î¹ïnew¹Bºâ²Å©Mdelete¹Bºâ²Åªº¤ä«ù¡C
²Ä7³¹¡A¦b¹ï¶H¼Ò«¬ªº¦yºÝ¡]On the Cusp of the Object Model¡^¡A±Mª`¤_exception handling¡Btemplate support¡Bruntime type identification¡C
¹w©wªºÅªªÌ
¥»®Ñ¥i¥H§êºt®a®x±Ð®vªº¨¤¦â¡A¤£¹L¥¦©w¦ì¦b¤¤¯Å¥H¤WªºC++µ{§Ç­û¡A¦Ó«DC++·s¤â¡C§Ú¹Á¸Õ´£¨Ñ¨¬°÷ªº¤º®e¡A¨Ï¥¦¯à°÷³Q¥ô¦ó¦³ÂIC++°ò¦¡]¨Ò¦pŪ¹L§ÚªºC++ Primer¦}¦³¤@¨Ç¹ê»Ú½sµ{¸gÅç¡^ªº¤H±µ¨ü¡C²z·QªºÅªªÌ¬O¡A´¿¸g¦³¹L¼Æ¦~ªºC++½sµ{¸gÅç¡A§Æ±æ¶i¤@¨B¤F¸Ñ¡§©³¼h°µ¨Ç¤°¤\¨Æ¡¨ªº¤H¡C®Ñ¤¤¬Y¨Ç³¡¤À¬Æ¦Ü¹ï¤_C++°ª¤â¤]¨ã¦³§l¤Þ¤O¡A¦pÁ{®É©Ê¹ï¶Hªº²£¥Í¡A¥H¤Înamed return value¡]NRV¡^³Ì¨Î¤Æªº²Ó¸`µ¥µ¥¡C¦b»P¥»®Ñ¯À§÷¬Û¦Pªº¦U­Ó¤½¶}ºtÁ¿³õ¦X¤¤¡A§Ú¤w¸gÃÒ¹ê¤F³o¨Ç§÷®Æªº§l¤Þ¤O¡C
µ{§Ç­S¨Ò¤Î¨ä°õ¦æ
¥»®Ñªºµ{§Ç­S¨Ò¥D­n¦³¨â­Ó¥Øªº¡G
1. ¬°¤F´£¨Ñ®Ñ¤¤©Ò­zC++¹ï¶H¼Ò«¬¦UºØ·§©Àªº¨ãÅ黡©ú¡C
2. ´£¨Ñ´ú¸Õ¡A¥H´ú¶q¦UºØ»y¨¥©Ê½èªº¬Û¹ï¦¨¥»¡C
µL½×­þ¤@ºØ·N¹Ï¡A³£¥u¬O¬°¤F®i²{¹ï¶H¼Ò«¬¡CÁ|¨Ò¦Ó¨¥¡AÁöµM§Ú¦b®Ñ¤¤¦³¤j¶qªºÁ|¨Ò¡A¦ý§Ú¦}«D«Øij¤@­Ó¯u¹êªº3D graphic library¥²¶·¥HµêÀÀÄ~©Óªº¤è¦¡¨Óªí²{¤@­Ó3DÂI¡]¤£¹L¡A§A¥i¥H¦b[POKOR94]¤¤µo²{§@ªÌPokornyªº½T¬O³o¤\°µªº¡^¡C

®Ñ¤¤©Ò¦³´ú¸Õµ{§Ç³£¦b¤@³¡SGI Indigo2xL¤W½sĶ°õ¦æ¡A¨Ï¥ÎSGI 5.2 UNIX¾Þ§@¨t²Î¤¤ªºCC©MNCC½sĶ¾¹¡CCC¬Ocfront 3.0.1ª©¡]¥¦·|²£¥Í¥XC¥N½X¡A¦A¥Ñ¤@­ÓC½sĶ¾¹­«·s½sĶ¬°¥i°õ¦æ¤å¥ó¡^¡CNCC¬OEdison Design GroupªºC++ front-end 2.19ª©¡A¤º§t¤@­Ó¥ÑSGI¨ÑÀ³ªºµ{§Ç¥N½X²£¥Í¾¹¡C¦Ü¤_®É¶¡´ú¶q¡A¬Oªö¥ÎUNIXªºtimex©R¥O°w¹ï1 000¸U¦¸­¡¥N´ú¸Õ©Ò±oªº¥­§¡­È¡C
ÁöµM¦bxL¾÷¾¹¤W¨Ï¥Î³o¨â­Ó½sĶ¾¹¡A¹ïŪªÌ¦Ó¨¥¥i¯àı±o¦³¨Ç¯«¯µ¡A§Ú«oı±o¹ï¦¹®Ñªº¥Øªº¦Ó¨¥¡A«Ü¦n¡C¤£½×¬Ocfront©Î²{¦bªºEdison Design Group¡¦s C++ front-end¡]BjarneºÙ¨ä¬°¡§cfrontªº¨à¤l¡¨¡^¡A³£»P¥­»OµLÃö¡C¥¦­Ì¬O¤@ºØ¤@¯ë¤Æªº½sĶ¾¹¡A³Q±ÂÅvµ¹34®a¥H¤Wªº­pºâ¾÷¨î³y°Ó¡]¨ä¤¤¥]¬AGray¡BSGI¡BIntel¡^©M³n¥ó¶}µoÀô¹Ò¼t°Ó¡]¥]¬ACenterline©MNovell¡A¦ZªÌ¬O­ì¥ýªºUNIX³n¥ó¹êÅç«Ç¡^¡C®Ä²vªº´ú¶q¦}«D¬°¤F¹ï¥Ø«e¥«­±¤Wªº¦U®a½sĶ¨t²Î°µµû¤ñ¡A¦Ó¥u¬O¬°¤F´£¨ÑC++¹ï¶H¼Ò«¬¤§¦UºØ¯S©Êªº¤@­Ó¬Û¹ï¦¨¥»´ú¶q¡C¦Ü¤_°Ó·~µû¤ñªº®Ä²v¼Æ¾Ú¡A§A¥i¥H¦b´X¥G¥ô¦ó¤@¥»­pºâ¾÷Âø§Óªº­pºâ¾÷²£«~ÀËÅç³ø§i¤¤Àò±o¡C
­PÁÂ
²¤
°Ñ¦Ò®Ñ¥Ø
ª`·N¡G³\¦hC++ Report¤å³¹¤w³QC++ Gems¦¬¿ý¡A¦}¥ÑStanley Lippman½s¿è§¹¦¨¡A°Ñ¨£SIGS Books¡ANew York¡ANY¡]1996¡^¡C
[BALL92] Ball, Michael, "Inside Templates", C++ Report (September 1992)
[BALL93a] Ball, Michael, "What Are These Things Called Templates", C++ Report (February 1993)
[BALL93b] Ball, Michael, "Implementing Class Templates", C++ Report (September 1993)
[BOOCH93] Booch, Grady and Michael Vilot, "Simplifying the Booch Components", C++ Report (June 1993)
[BORL91] Borland Language Open Architecture Handbook, Borland International Inc., Scotts Valley, CA
[BOX95] Box, Don, "Building C++ Components Using OLE2", C++ Report (March/April 1995)
[BUDD91] Budd, Timothy, An Introduction to Object-Oriented Programming, Addison-Wesley Publishing Company, Reading, MA(1991)
[BUDGE92] Budge, Kent G., James S. Peery, and Allen C. Robinson, "High Performance Scientific Computing Using C++", Usenix C++ Conference Proceedings, Portland, OR(1992)
[BUDGE94] Budge, Kent G., James S. Peery, Allen C. Robinson, and Michael K. Wong, "Management of Class Temporaries in C++ Translation Systems", The Journal of C Language Translation (December 1994)
[CARGILL95] Cargill, Tom, "STL Caveats, " C++Report (July/August 1993)
[CARROLL93] Carroll, Martin, "Design of the USL Standard Components", C++ Report (June 1993)
[CARROLL95] Carroll, Martin, and Margaret A. Ellis, "Designing and Coding Reusable C++, Addison-Wesley Publishing Company, Reading, MA(1995)
[CHASE94] Chase, David, "Implementation of Exception Handling, Part 1", The Journal of C Language Translation (June 1994)
[CLAM93a] Clamage, Stephen D., "Implementing New ¡® Delete", C++ Report (May 1993)
[CLAM93b] Clamage, Stephen D., "Beginnings ¡® Endings", C++ Report (September 1993)
[ELLIS90] Ellis, Margaret A. and Bjarne Stroustrup, The Annotated C++ Reference Manual, Addison-Wesley Publishing Company, Reading, MA(1990)
[GOLD94] Goldstein, Theodore C. and Alan D. Sloane, "The Object Binary Interface - C++ Objects for Evolvable Shared Class Libraries", Usenix C++ Conference Proceedings, Cambridge, MA(1994)
[HAM95] Hamilton, Jennifer, Robert Klarer, Mark Mendell, and Brian Thomson, "Using SOM with C++", C++ Report (July/August 1995)
[HORST95] Horstmann, Cay S., "C++ Compiler Shootout", C++ Report (July/August 1995)
[KOENIG90a] Koenig, Andrew and Stanley Lippman, "Optimizing Virtual Tables in C++ Release 2.0", C++ Report (March 1990)
[KOENIG90b] Koenig, Andrew and Bjarne Stroustrup, "Exception Handling for C++ (Revised)", Usenix C++ Conference Proceedings (April 1990)
[KOENIG93] Koenig, Andrew, "Combining C and C++", C++ Report (July/August 1993)
[ISO-C++95] C++ International Standard, Draft (April 28, 1995)
[LAJOIE94a] Lajoie, Josee, "Exception Handling: Supporting the Runtime Mechanism", C++ Report (March/April 1994)
[LAJOIE94b] Lajoie, Josee, "Exception Handling: Behind the Scenes", C++ Report (June 1994)
[LENKOV92] Lenkov, Dmitry, Don Cameron, Paul Faust, and Michey Mehta, "A Portable Implementation of C++ Exception Handling", Usenix C++ Conference Proceeding, Portland, OR(1992)
[LEA93] Lea, Doug, "The GNU C++ Library", C++ Report (June 1993)
[LIPP88] Lippman, Stanley and Bjarne Stroustrup, "Pointers to Class Members in C++", Implementor¡¦s Workshop, Usenix C++ Conference Proceedings (October 1988)
[LIPP91a] Lippman, Stanley, "Touring Cfront", C++ Journal, Vol.1, No.3 (1991)
[LIPP91b] Lippman, Stanley, "Touring Cfront: From Minutiae to Migraine", C++ Journal, Vol.1, No.4 (1991)
[LIPP91c] Lippman, Stanley, C++ Primer, Addison-Wesley Publishing Company, Reading, MA(1991)
[LIPP94a] Lippman, Stanley, "Default Constructor Synthesis", C++ Report (January 1994)
[LIPP94b] Lippman, Stanley, "Applying The Copy Constructor, Part1: Synthesis", C++ Report (February 1994)
[LIPP94c] Lippman, Stanley, "Applying The Copy Constructor, Part2", C++ Report (March/April 1994)
[LIPP94d] Lippman, Stanley, "Objects and Datum", C++ Report (June 1994)
[METAW94] MetaWare High C/C++ Language Reference Manual, Metaware Inc., Santa Crus, CA(1994)
[MACRO92] Jones, David and Martin J. O¡¦Riordan, The Microsoft Object Mapping, Microsoft Corporation, 1992
[MOWBRAY95] Mowbray, Thomas J. and Ron Zahavi, The Essential Corba, John Wiley ¡® Sons, Inc. (1995)
[NACK94] Nackman, Lee R., and John J. Barton Scientific and Engineering C++, An Introduction with Advanced Techniques and Examples, Addison-Wesley Publishing Company, Reading, MA(1994)
[PALAY92] Palay, Andrew J., "C++ in a Changing Environment", Usenix C++ Conference Proceedings, Portland, OR(1992)
[POKOR94] Pokorny, Cornel, Computer Graphics, Franklin, Beedle ¡® Associates, Inc. (1994)
[PUGH90] Pugh, William and Grant Weddell, "Two-directional Record Layout for Multiple Inheritance", ACM SIGPLAN ¡¦90 Conference, White Plains, New York(1990)
[SCHMIDT94a] Schmidt, Douglas C., "A Domain Analysis of Network Daemon Design Dimensions", C++ Report (March/April 1994)
[SCHMIDT94b] Schmidt, Douglas C., "A Case Study of C++ Design Evolution", C++ Report (July/August 1994)
[SCHWARZ89] Schwarz, Jerry, "Initializing Static Variables in C++ Libraries", C++ Report (February 1989)
[STROUP82] Stroustrup, Bjarne, "Adding Classes to C: An Exercise in Language Evolution", Software: Practices ¡® Experience, Vol.13 (1983)
[STROUP94] Stroustrup, Bjarne, "The Design and Evolution of C++", Addison-Wesley Publishing Company, Reading, MA(1994)
[SUN94a] The C++ Application Binary Interface, SunPro, Sun Microsystems, Inc.
[SUN94b] The C++ Application Binary Interface Rationale, SunPro, Sun Microsystems, Inc.
[VELD95] Veldhuizen, Todd, "Using C++ Template Metaprograms", C++ Report (May 1995)
[VINOS93] Vinoski, Steve, "Distributed Object Computing with CORBA", C++ Report (July/August 1993)
[VINOS94] Vinoski, Steve, "Mapping CORBA IDL into C++", C++ Report (September 1994)
[YOUNG95] Young, Douglas, Object-Oriented Programming with C++ and OSF/Motif, 2d ed., Prentice-Hall(1995)
¤º®e²¤¶¡G

§@ªÌLippman°Ñ»P³]­p¤F¥þ¥@¬É²Ä¤@®MC++½sĶµ{§Çcfront¡A³o¥»®Ñ´N¬O¤@¦ì°¶¤jªºC++½sĶµ{§Ç³]­pªÌ¦V§AÄÄ­z¥L¦p¦ó³B²z¦UºØexplicit¡]©ú½T¥X²{¤_C++µ{§Ç¥N½X¤¤¡^©Mimplicit¡]ÁôÂä_µ{§Ç¥N½X­I¦Z¡^ªºC++»y·N¡C
¥»®Ñ±Mª`¤_C++­±¦V¹ï¶Hµ{§Ç³]­pªº©³¼h¾÷¨î¡A¥]¬Aµ²ºc¦¡»y·N¡BÁ{®É©Ê¹ï¶Hªº¥Í¦¨¡B«Ê¸Ë¡BÄ~©Ó¡A¥H¤ÎµêÀÀ¡X¡XµêÀÀ¨ç¼Æ©MµêÀÀÄ~©Ó¡C³o¥»®ÑÅý§Aª¾¹D¡G¤@¥¹§A¯à°÷¤F¸Ñ©³¼h¹ê²{¼Ò«¬¡A§Aªºµ{§Ç¥N½X±NÀò±o¦h¤\¤jªº®Ä²v¡CLippman¼á²M¤F¨º¨ÇÃö¤_C++ÃB¥~­t²ü»P´_Âø«×ªº¦UºØ¿ù»~«H®§©M°g«ä¡A¦ý¤]«ü¥X¨ä¤¤¬Y¨Ç¦¨¥»©M§Q¯q¥æ´«½T¹ê¦s¦b¡C¥LÄÄ­z¤F¦U¦¡¦U¼Ëªº¹ê²{¼Ò«¬¡A«ü¥X¥¦­Ìªº¶i¤Æ¤§¹D¤Î¨ä¥»½è¦]¯À¡C®Ñ¤¤²[»\¤FC++¹ï¶H¼Ò«¬ªº»y·N·t¥Ü¡A¦}«ü¥X³o­Ó¼Ò«¬¬O¦p¦ó¼vÅT§Aªºµ{§Çªº¡C
¡C


¥Ø¿ý¡G

¥»¥ß¹D¥Í¡]«J±¶ Ķ§Ç¡^ III
¥Ø¿ý VII
«e¨¥¡]Stanley B. Lippman¡^ XIII
²Ä0³¹ ¾ÉŪ¡]ĶªÌªº¸Ü¡^ XXV
²Ä1³¹ Ãö¤_¹ï¶H¡]Object Lessons¡^ 1
¥[¤W«Ê¸Ë¦Zªº¥¬§½¦¨¥»¡]Layout Costs for Adding Encapsulation¡^ 5
1.1¡@C++¹ï¶H¼Ò¦¡¡]The C++ Object Model¡^ 6
²³æ¹ï¶H¼Ò«¬¡]A Simple Object Model¡^ 7
ªí®æÅX°Ê¹ï¶H¼Ò«¬¡]A Table-driven Object Model¡^ 8
C++¹ï¶H¼Ò«¬¡]The C++ Object Model¡^ 9
¹ï¶H¼Ò«¬¦p¦ó¼vÅTµ{§Ç¡]How the Object Model Effects Programs¡^ 13
1.2 ÃöÁäµü©Ò±a¨Óªº®t²§¡]A Keyword Distinction¡^ 15
ÃöÁäµüªº§xÂZ 16
µ¦²¤©Ê¥¿½Tªºstruct¡]The Politically Correct Struct¡^ 19
1.3 ¹ï¶Hªº®t²§¡]An Object Distinction¡^ 22
«ü°wªºÃþ«¬¡]The Type of a Pointer¡^ 28
¥[¤W¦hºA¤§¦Z¡]Adding Polymorphism¡^ 29
²Ä2³¹ ºc³y¨ç¼Æ»y·N¾Ç¡]The Semantics of Constructors¡^ 37
2.1 Default Constructorªººc³y¾Þ§@ 39
¡§±a¦³Default Constructor¡¨ªºMember Class Object 41
¡§±a¦³Default Constructor¡¨ªºBase Class 44
¡§±a¦³¤@­ÓVirtual Function¡¨ªºClass 44
¡§±a¦³¤@­ÓVirtual Base Class¡¨ªºClass 46
Á`µ² 47
2.2 Copy Constructorªººc³y¾Þ§@ 48
Default Memberwise Initialization 49
Bitwise Copy Semantics¡]¦ì³v¦¸«þ¨©¡^ 51
¤£­nBitwise Copy Semantics¡I 53
­«·s³]©wVirtual Tableªº«ü°w 54
³B²zVirtual Base Class Subobject 57
2.3 µ{§ÇÂà¤Æ»y·N¾Ç¡]Program Transformation Semantics¡^ 60
Å㦡ªºªì©l¤Æ¾Þ§@¡]Explicit Initialization¡^ 61
°Ñ¼Æªºªì©l¤Æ¡]Argument Initialization¡^ 62
ªð¦^­Èªºªì©l¤Æ¡]Return Value Initialization¡^ 63
¦b¨Ï¥ÎªÌ¼h­±°µÀu¤Æ¡]Optimization at the User Level¡^ 65
¦b½sĶ¾¹¼h­±°µÀu¤Æ¡]Optimization at the Compiler Level¡^ 66
Copy Constructor¡G­nÁÙ¬O¤£­n¡H 72
ºK­n 74
2.4 ¦¨­û­Ìªºªì©l¤Æ¶¤¥î¡]Member Initialization List¡^ 74
²Ä3³¹ Data»y·N¾Ç¡]The Semantics of Data¡^ 83
3.1 Data Memberªº¸j©w¡]The Binding of a Data Member¡^ 88
3.2 Data Memberªº¥¬§½¡]Data Member Layout¡^ 92
3.3 Data Memberªº¦s¨ú 94
Static Data Members 95
Nonstatic Data Members 97
3.4 ¡§Ä~©Ó¡¨»PData Member 99
¥u­nÄ~©Ó¤£­n¦hºA¡]Inheritance without Polymorphism¡^ 100
¥[¤W¦hºA¡]Adding Polymorphism¡^ 107
¦h­«Ä~©Ó¡]Multiple Inheritance¡^ 112
µêÀÀÄ~©Ó¡]Virtual Inheritance¡^ 116
3.5 ¹ï¶H¦¨­ûªº®Ä²v¡]Object Member Efficiency¡^ 124
3.6 «ü¦VData Membersªº«ü°w¡]Pointer to Data Members¡^ 129
¡§«ü¦VMembersªº«ü°w¡¨ªº®Ä²v°ÝÃD 134
²Ä4³¹ Function»y·N¾Ç¡]The Semantics of Function¡^ 139
4.1 Memberªº¦UºØ½Õ¥Î¤è¦¡ 140
Nonstatic Member Functions¡]«DÀRºA¦¨­û¨ç¼Æ¡^ 141
Virtual Member Functions¡]µêÀÀ¦¨­û¨ç¼Æ¡^ 147
Static Member Functions¡]ÀRºA¦¨­û¨ç¼Æ¡^ 148
4.2 Virtual Member Functions¡]µêÀÀ¦¨­û¨ç¼Æ¡^ 152
¦h­«Ä~©Ó¤UªºVirtual Functions 159
µêÀÀÄ~©Ó¤UªºVirtual Functions 168
4.3 ¨ç¼Æªº®Ä¯à 170
4.4 «ü¦VMember Functionªº«ü°w¡]Pointer-to-Member Functions¡^ 174
¤ä«ù¡§«ü¦VVirtual Member Functions¡¨ªº«ü°w 176
¦b¦h­«Ä~©Ó¤§¤U¡A«ü¦VMember Functionsªº«ü°w 178
¡§«ü¦VMember Functions¤§«ü°w¡¨ªº®Ä²v 180
4.5 Inline Functions 182
§Î¦¡°Ñ¼Æ¡]Formal Arguments¡^ 185
§½³¡Åܶq¡]Local Variables¡^ 186
²Ä5³¹ ºc³y¡BªRºc¡B«þ¨©»y·N¾Ç¡]Semantics of Construction,
Destruction, and Copy¡^ 191
¯Âµê¨ç¼Æªº¦s¦b¡]Presence of a Pure Virtual Function¡^ 193
µêÀÀ³W®æªº¦s¦b¡]Presence of a Virtual Specification¡^ 194
µêÀÀ³W®æ¤¤constªº¦s¦b 195
­«·s¦Ò¼{classªºÁn©ú 195
5.1 ¡§µLÄ~©Ó¡¨±¡ªp¤Uªº¹ï¶Hºc³y 196
©â¶H¼Æ¾ÚÃþ«¬¡]Abstract Data Type¡^ 198
¬°Ä~©Ó°µ·Ç³Æ 202
5.2 Ä~©ÓÅé¨t¤Uªº¹ï¶Hºc³y 206
µêÀÀÄ~©Ó¡]Virtual Inheritance¡^ 210
vptrªì©l¤Æ»y·N¾Ç¡]The Semantics of the vptr Initialization¡^ 213
5.3 ¹ï¶H´_¨î»y·N¾Ç¡]Object Copy Semantics¡^ 219
5.4 ¹ï¶Hªº®Ä¯à¡]Object Efficiency¡^ 225
5.5 ªRºc»y·N¾Ç¡]Semantics of Destruction¡^ 231
²Ä6³¹ °õ¦æ´Á»y·N¾Ç¡]Runtime Semantics¡^ 237
6.1 ¹ï¶Hªººc³y©MªRºc¡]Object Construction and Destruction¡^ 240
¥þ§½¹ï¶H¡]Global Objects¡^ 242
§½³¡ÀRºA¹ï¶H¡]Local Static Objects¡^ 247
¹ï¶H¼Æ²Õ¡]Array of Objects¡^ 250
Default Constructors©M¼Æ²Õ 252
6.2 new©Mdelete¹Bºâ²Å 254
°w¹ï¼Æ²Õªºnew»y·N 257
Placement Operator newªº»y·N 263
6.3 Á{®É©Ê¹ï¶H¡]Temporary Objects¡^ 267
Á{®É©Ê¹ï¶Hªº°g«ä¡]¯«¸Ü¡B¶Ç»¡¡^ 275
²Ä7³¹ ¯¸¦b¹ï¶H¼Ò«¬ªº¦yºÝ¡]On the Cusp of the Object Model¡^ 279
7.1 Template 280
Templateªº¡§¹ê¨Ò¤Æ¡¨¦æ¬°¡]Template Instantiation¡^ 281
Templateªº¿ù»~³ø§i¡]Error Reporting within a Template¡^ 285
Template¤¤ªº¦WºÙ¨Mijªk¡]Name Resolution within a Template¡^ 289
Member Functionªº¹ê¨Ò¤Æ¦æ¬°¡]Member Function Instantiation¡^ 292
7.2 ²§±`³B²z¡]Exception Handling¡^ 297
Exception Handling§Ö³tÀ˾\ 298
¹ïException Handlingªº¤ä«ù 303
7.3 °õ¦æ´ÁÃþ«¬ÃѧO¡]Runtime Type Identification¡ARTTI¡^ 308
Type-Safe Downcast¡]«OÃÒ¦w¥þªº¦V¤UÂà´«¾Þ§@¡^ 310
Type-Safe Dynamic Cast¡]«OÃÒ¦w¥þªº°ÊºAÂà´«¡^ 311
References¦}¤£¬OPointers 313
Typeid¹Bºâ²Å 314
7.4 ®Ä²v¦³¤F¡A¼u©Ê©O¡H 318
°ÊºA¦@¨É¨ç¼Æ®w¡]Dynamic Shared Libraries¡^ 318
¦@¨É¤º¦s¡]Shared Memory¡^ 318
§Ç¡G