°Q½×°Ï§Ö³t¿ï³æ
ª¾ÃÑ®w§Ö³t¿ï³æ
³nÅé¶}µo¹Lµ{¤¤¦³­þ¨Ç¸ê¦wº|¬}? ³Ç¦ÌªºÄá¼v®È¹Cµ§°O ºô¸ô§ë«O®È¦æ¥­¦wÀI
[ ¦^¤W­¶ ] [ °Q½×°Ïµo¨¥³W«h ]
±j¨î¹ê§@
§ó§ï§Úªº¾\ۤ峹¦r«¬¤j¤p¤j ¤p
§@ªÌ : cxxlman(CxxlMan) C++Àu¨q¦n¤â¶K¤å¶W¹L1000«h
[ ¶K¤å 1036 | ¤H®ð 3227 | µû»ù 1260 | µû»ù/¶K¤å 1.22 | °e¥Xµû»ù 27 ¦¸ ] 
[ µ¹­ÓÆg ]  [ µ¹­ÓÆg ]  [ ¦^À³¥»¤å ]  [ µoªí·s¤å ]  [ ¦^¤W­¶ ] [ ¦^°Q½×°Ï¦Cªí ] [ ¦^ª¾ÃѤJ¤f ]
2017/7/21 ¤U¤È 01:45:52
¦³¤°»ò¤èªk¥i¥HÅý¤@­ÓµêÀÀ¨ç¼Æ¡A¦b¨C¤@¼hÄ~©ÓÃþ§O³£»Ý¹ê§@
§@ªÌ : ice_emissary(¿U¿Nªº¤j¦a) ¶K¤å¶W¹L200«h
[ ¶K¤å 406 | ¤H®ð 0 | µû»ù 1860 | µû»ù/¶K¤å 4.58 | °e¥Xµû»ù 17 ¦¸ ] 
[ µ¹­ÓÆg ]  [ µ¹­ÓÆg ]  [ ¦^À³¥»¤å ]  [ µoªí·s¤å ]  [ ¦^¤W­¶ ] [ ¦^°Q½×°Ï¦Cªí ] [ ¦^ª¾ÃѤJ¤f ]
2017/7/21 ¤U¤È 02:42:33
¨S¦³¡AµêÀÀ¨ç¦¡¥u­n¦b¬Y¤@¼h¦³³Q¹ê°µ§Y¥i¡C
°£«D©Ò¦³ªº¤l¥N³£¬O§A¦Û¤v°µªº¡A§_«h¦ü¥GµLªkºÊ±±²Ä¤TªÌ»s°µªº¨C¤@¼h¤l¥N¡C
§@ªÌ : cxxlman(CxxlMan) C++Àu¨q¦n¤â¶K¤å¶W¹L1000«h
[ ¶K¤å 1036 | ¤H®ð 3227 | µû»ù 1260 | µû»ù/¶K¤å 1.22 | °e¥Xµû»ù 27 ¦¸ ] 
[ µ¹­ÓÆg ]  [ µ¹­ÓÆg ]  [ ¦^À³¥»¤å ]  [ µoªí·s¤å ]  [ ¦^¤W­¶ ] [ ¦^°Q½×°Ï¦Cªí ] [ ¦^ª¾ÃѤJ¤f ]
2017/7/21 ¤U¤È 05:05:02
¬°¤°»ò¨S³o¥\¯à©O¡Hc++ À³¸Ó´£¨Ñ¤~¹ï§a¡A¦³¤°»òÃø¨¥¤§Áô¶Ü
§@ªÌ : ice_emissary(¿U¿Nªº¤j¦a) ¶K¤å¶W¹L200«h
[ ¶K¤å 406 | ¤H®ð 0 | µû»ù 1860 | µû»ù/¶K¤å 4.58 | °e¥Xµû»ù 17 ¦¸ ] 
[ µ¹­ÓÆg ]  [ µ¹­ÓÆg ]  [ ¦^À³¥»¤å ]  [ µoªí·s¤å ]  [ ¦^¤W­¶ ] [ ¦^°Q½×°Ï¦Cªí ] [ ¦^ª¾ÃѤJ¤f ]
2017/7/22 ¤W¤È 10:41:45
§Ú·Q¬O¦]¬°¨S¦³¥²­n§a¡I
·íµM³o¬O¦Û¤vªº¸gÅç¡B¥[¤W¹ïC++ªº¤F¸Ñ¡B¦A¥[¤W¤@¨ÇÁr´úªº§PÂ_¡A¦Ü©ó¹ê»Ú¤Wªº¯u¹ê­ì¦]¡H©Î¬O¬O§_¯u¦³¤°»òÃø¨¥¤§Áô¡H
»¡¹ê¦b¡A§Ú¤]¤£¬OC++¼Ð·Ç©e­û¡A§Ú¤]¤£½T©w¡C

»P¨äªÈµ²¦b³o¡A¤£¦p§A§i¶D§Ú­Ì§A¬O¦b¤°»ò±¡¹Ò¤U¡B¤°»òÀ³¥Î³õ´º¤U·Q­n¦³³o¼Ëªº¥\¯à¡H
¤]³\§Ú­Ì¤ñ¸û¯à°÷µ¹¥X¹ê½èªº·N¨£¡A©Î¤]³\¯uªº¯à°÷©ú¥Õ³o¼Ëªº¥\¯àÀ³¦³¦s¦bªº¥²­n¡C
§@ªÌ : cxxlman(CxxlMan) C++Àu¨q¦n¤â¶K¤å¶W¹L1000«h
[ ¶K¤å 1036 | ¤H®ð 3227 | µû»ù 1260 | µû»ù/¶K¤å 1.22 | °e¥Xµû»ù 27 ¦¸ ] 
[ µ¹­ÓÆg ]  [ µ¹­ÓÆg ]  [ ¦^À³¥»¤å ]  [ µoªí·s¤å ]  [ ¦^¤W­¶ ] [ ¦^°Q½×°Ï¦Cªí ] [ ¦^ª¾ÃѤJ¤f ]
2017/7/22 ¤U¤È 12:58:12
1. §Ú¼g¤F¤@­Ó¥ÃºüÀx¦s¾÷¨î¡A§Æ±æ¦U¼hªº¤l®]Ãþ§O¯à¹ê§@¤@­ÓµêÀÀ¨ç¼Æ¦s¨ú¦Û¤vªº¸ê®Æ

2. °²³]§Ú¼g¤F¤@­Ó class Base¡A§Æ±æ¥¦ªº²£¥Í¦Û¤vªº¤À¨­¡A©Ò¥H¼g¤F¤@­ÓµêÀÀ¨ç¼Æ virtual Base *Clone(); ­n¦U¼h¤l®]Ãþ§O³£­n¹ê§@ new ¥X¦Û¤v

¥H¤W¨âÂI¬O§Ú¸I¹Lªº±¡ªp¡A¥u¯à¹D¼wÄU»¡¨Sªk±j¨î­n¹ê§@
§@ªÌ : ice_emissary(¿U¿Nªº¤j¦a) ¶K¤å¶W¹L200«h
[ ¶K¤å 406 | ¤H®ð 0 | µû»ù 1860 | µû»ù/¶K¤å 4.58 | °e¥Xµû»ù 17 ¦¸ ] 
[ µ¹­ÓÆg ]  [ µ¹­ÓÆg ]  [ ¦^À³¥»¤å ]  [ µoªí·s¤å ]  [ ¦^¤W­¶ ] [ ¦^°Q½×°Ï¦Cªí ] [ ¦^ª¾ÃѤJ¤f ]
2017/7/22 ¤U¤È 11:05:19
³o¼Ëªº¸Ü¡A¤£¬O¦³½Æ»s«Øºc¤l¥i¥H¥Î¶Ü¡H
Á|¨Ò¨Ó»¡¡G

class Child : protected Base
{
public:
    Child(const Child &src) {...}
};

³o¼Ë¡A·í§Ú»Ý­n clone ªº®É­Ô¡G

Child obj1;
...
Child obj2(obj1);
©ÎªÌ¡G
Child *obj3 = new Child(obj1);
§@ªÌ : cxxlman(CxxlMan) C++Àu¨q¦n¤â¶K¤å¶W¹L1000«h
[ ¶K¤å 1036 | ¤H®ð 3227 | µû»ù 1260 | µû»ù/¶K¤å 1.22 | °e¥Xµû»ù 27 ¦¸ ] 
[ µ¹­ÓÆg ]  [ µ¹­ÓÆg ]  [ ¦^À³¥»¤å ]  [ µoªí·s¤å ]  [ ¦^¤W­¶ ] [ ¦^°Q½×°Ï¦Cªí ] [ ¦^ª¾ÃѤJ¤f ]
2017/7/23 ¤W¤È 01:07:38
§Úªº·N«ä¬O³o¼Ë:
class Prototype
{
public :
Prototype(){}
virtual ~Prototype(){}

virtual Prototype * Clone() = 0;
};
§@ªÌ : ice_emissary(¿U¿Nªº¤j¦a) ¶K¤å¶W¹L200«h
[ ¶K¤å 406 | ¤H®ð 0 | µû»ù 1860 | µû»ù/¶K¤å 4.58 | °e¥Xµû»ù 17 ¦¸ ] 
[ µ¹­ÓÆg ]  [ µ¹­ÓÆg ]  [ ¦^À³¥»¤å ]  [ µoªí·s¤å ]  [ ¦^¤W­¶ ] [ ¦^°Q½×°Ï¦Cªí ] [ ¦^ª¾ÃѤJ¤f ]
2017/7/23 ¤U¤È 03:20:27
³o¼Ë§Ú©ú¥Õ§Aªº·N«ä¤F¡C
ªº½T¡A¦b¦³¨Ç®É­Ô·|»Ý­n¨Ï¥Î°òÃþ½Æ»s¤lÃþ¹êÅé¡A¤ñ¦p»¡¦b¤£¨Ï¥Î¼Òª©ªº±¡ªp®L»s°µ®e¾¹ºÞ²z³q¥Îª«¥ó®É¡C
¤]½T¹ê°£¤F«Øºc¤l¥~¡A¡A¨S¦³¿ìªk±q»yªk¤W­n¨D¨C¤@¥N³£­n­«·s¹ê°µ¬Y­Ó¨ç¦¡¡C

¦ý¥t¤@¤è­±¡A¤]¤£¤@©w©Ò¦³ªº¤l¥N³£­n¹ê°µ clone ¨ç¦¡¡A¦]¬°¤£¨£±o¬Y¥NªºÃþ§O¤@©w¥i¥H²£¥Í¥X¦³·N¸qªº¹êÅé¡A¤ñ¦p»¡·í¥L¤]¬O­ÓµêÃþ®É¡C
§@ªÌ : cxxlman(CxxlMan) C++Àu¨q¦n¤â¶K¤å¶W¹L1000«h
[ ¶K¤å 1036 | ¤H®ð 3227 | µû»ù 1260 | µû»ù/¶K¤å 1.22 | °e¥Xµû»ù 27 ¦¸ ] 
[ µ¹­ÓÆg ]  [ µ¹­ÓÆg ]  [ ¦^À³¥»¤å ]  [ µoªí·s¤å ]  [ ¦^¤W­¶ ] [ ¦^°Q½×°Ï¦Cªí ] [ ¦^ª¾ÃѤJ¤f ]
2017/7/23 ¤U¤È 08:22:21

>¦ý¥t¤@¤è­±¡A¤]¤£¤@©w©Ò¦³ªº¤l¥N³£­n¹ê°µ clone ¨ç¦¡¡A¦]¬°¤£¨£±o¬Y¥NªºÃþ§O¤@©w¥i¥H²£¥Í¥X¦³·N¸qªº¹êÅé¡A¤ñ¦p»¡·í¥L¤]¬O­ÓµêÃþ®É¡C

³]­pªº¥Øªº´N¬O­n¥Ñ¹êÅ骫¥ó§¹¥þ½Æ»s¡A©Ò¥H¤@©w­n¹ê§@
§@ªÌ : ice_emissary(¿U¿Nªº¤j¦a) ¶K¤å¶W¹L200«h
[ ¶K¤å 406 | ¤H®ð 0 | µû»ù 1860 | µû»ù/¶K¤å 4.58 | °e¥Xµû»ù 17 ¦¸ ] 
[ µ¹­ÓÆg ]  [ µ¹­ÓÆg ]  [ ¦^À³¥»¤å ]  [ µoªí·s¤å ]  [ ¦^¤W­¶ ] [ ¦^°Q½×°Ï¦Cªí ] [ ¦^ª¾ÃѤJ¤f ]
2017/7/23 ¤U¤È 09:29:04
>³]­pªº¥Øªº´N¬O­n¥Ñ¹êÅ骫¥ó§¹¥þ½Æ»s¡A©Ò¥H¤@©w­n¹ê§@

¤ñ¦p»¡§Ú³]­p¤F¤@­Ó class Tiger¡A­n¯à°÷¶Ç¤J§Aªºµ{¦¡¨Ó¨ó°µ¡A¨º»ò¡G
1. Tiger ¥²¶·Ä~©Ó Base¡C
2. Tiger ¥²¶·¹ê°µ Clone ¨ç¦¡¡C

³o¬O¤wª¾ªº»Ý¨D¶µ¥Ø¡A³æ­Y¦]³]­p½t¬G§Úªº Tiger ¤£¬Oª½±µÄ~©Ó Base¡A¤¤¶¡ÁÙ¥d¤F¤ñ¤è»¡ Animal Ãþ§O¡C
¨º»ò¡A­Y Animal ¨ä¹ê¬O­ÓµêÃþ§O¡A¥¦¤´µM»Ý­n¹ê°µ Clone ¶Ü¡H
1. Animal ¤£·|¦bµ{¦¡¤¤¥X²{¥ô¦óªºª½±µ¹êÅé¡A¦]¬°¥L¬OµêÃþ¡A©Ò¥H¦bµ{¦¡¤¤¤@©w¥u·|¥X²{ Animal ªº¤lÃþ¡C
    ¨º»ò¤lÃþ¥i¥H³B²z¦n¦Û¤vªº Clone ¤£´N¦n¤F¡H
2. §A¯u­n­n¨D°µ¥X Animal ªº Clone¡A¥Ñ©ó Animal ¥»¨­°÷©â¶H¡A¹ê¦b«ÜÃøª½±µ©w¸q¦Û¨­ªº¹êÅé Clone ¤èªk¤º®e¡C
    ³Ì¦nªº°µªk´N¬O°µ¤@­ÓªÅ¨ç¦¡¥áµ¹¤lÃþ¦U¦Û·d©w¡A¨º©M¯dªÅ Clone ¦Ó¤£²z·|¦³®t¶Ü¡H
§@ªÌ : cxxlman(CxxlMan) C++Àu¨q¦n¤â¶K¤å¶W¹L1000«h
[ ¶K¤å 1036 | ¤H®ð 3227 | µû»ù 1260 | µû»ù/¶K¤å 1.22 | °e¥Xµû»ù 27 ¦¸ ] 
[ µ¹­ÓÆg ]  [ µ¹­ÓÆg ]  [ ¦^À³¥»¤å ]  [ µoªí·s¤å ]  [ ¦^¤W­¶ ] [ ¦^°Q½×°Ï¦Cªí ] [ ¦^ª¾ÃѤJ¤f ]
2017/7/24 ¤W¤È 05:44:06
Tiger ÁÙ¦³©µ¦ùÃþ§O­n«ç»ò¿ì
§@ªÌ : cxxlman(CxxlMan) C++Àu¨q¦n¤â¶K¤å¶W¹L1000«h
[ ¶K¤å 1036 | ¤H®ð 3227 | µû»ù 1260 | µû»ù/¶K¤å 1.22 | °e¥Xµû»ù 27 ¦¸ ] 
[ µ¹­ÓÆg ]  [ µ¹­ÓÆg ]  [ ¦^À³¥»¤å ]  [ µoªí·s¤å ]  [ ¦^¤W­¶ ] [ ¦^°Q½×°Ï¦Cªí ] [ ¦^ª¾ÃѤJ¤f ]
2017/7/28 ¤W¤È 04:49:47
°²³]¦³­ÓÃöÁä¦r must ¥Î©óµêÀÀ¨ç¼Æ¡Aªí¥Ü¹ê§@Ãþ§O»Ý­n¹ê§@¥X¨Ó¡A¦p¤UÃþ¦ü¡A¥u¬O¥H¤U¥u¯à¤@¼h¡A¦Ó must ¤£­­¼h¼Æ¡A¥u­n¬Y­ÓÃþ§O­n§@¬°¹ê¨Òª«¥ó®É¡Aµo²{¶·­n¹ê§@ªºµêÀÀ¨ç¼Æ¨S¹ê§@´N¥á¥X¿ù»~°T®§¡A¨âªÌ°µªk³£¤@¼Ë¡A§Þ³N¤W¨Ã¤£Ãø¡A¥u¬O¤£´£¨Ñ must ªº²z¥Ñ¬O¤°»ò

class Prototype
{
public :
Prototype(){}
virtual ~Prototype(){}

virtual Prototype * Clone() = 0;
};
§@ªÌ : ice_emissary(¿U¿Nªº¤j¦a) ¶K¤å¶W¹L200«h
[ ¶K¤å 406 | ¤H®ð 0 | µû»ù 1860 | µû»ù/¶K¤å 4.58 | °e¥Xµû»ù 17 ¦¸ ] 
[ µ¹­ÓÆg ]  [ µ¹­ÓÆg ]  [ ¦^À³¥»¤å ]  [ µoªí·s¤å ]  [ ¦^¤W­¶ ] [ ¦^°Q½×°Ï¦Cªí ] [ ¦^ª¾ÃѤJ¤f ]
2017/7/28 ¤W¤È 09:03:12
¥ý»¡²{¹ê¡AC++ ¨Ã¤£´£¨Ñ§A­nªº must¡B©ÎÃþ¦üÃöÁä¦rªº¤ä´©¡A³o¬OªÖ©wªº¡F
¦Ü©ó­ì¦]¡H§Ú¤]¤£½T¹ê¤F¸Ñ¡A¤]³\¨ä¥Lª¾¹Dªº¤H¥i¥H¦^µª¡C

ºI¦Ü C++11 ¬°¤î(C++14 ÁÙ¨SªÅ¬ã¨s¡A¤£¹LÀ³¸Ó¤]®t¤£¦h)¡A¹ï©óÃþ§O»Ý¨ç¦¡ªº­­¨î±±¨î¥ÎÃöÁä¦r¥u¦³¨â­Ó¡Goverride ©M final¡C
¤£¹L final ­è¦n©M§A­nªºªF¦è¬Û¤Ï¡A¤@­Ó³Q final ­×¹¢ªºµê¨ç¦¡¬OµLªk¦b¤l¥N¦A³QÂмgªº¡I
§@ªÌ : ccl0504(¤â°Êµ{¦¡²£¥Í¾¹) ¶K¤å¶W¹L200«h
[ ¶K¤å 450 | ¤H®ð 211 | µû»ù 930 | µû»ù/¶K¤å 2.07 | °e¥Xµû»ù 2 ¦¸ ] 
[ µ¹­ÓÆg ]  [ µ¹­ÓÆg ]  [ ¦^À³¥»¤å ]  [ µoªí·s¤å ]  [ ¦^¤W­¶ ] [ ¦^°Q½×°Ï¦Cªí ] [ ¦^ª¾ÃѤJ¤f ]
2017/7/28 ¤W¤È 09:05:23

must ¥i¯à¸òÄ~©Óªº·§©À¦³ÂI½Ä¬ð§a ?

°²¦p Animal Ä~©Ó¤F Prototype ¦Ó¥B¹ê§@¤F Clone()
¨º Tiger Ä~©Ó¤F Animal «á, ¨ä¹ê´N¥u»Ý­n°w¹ï»P Animal ¤£¦Pªº¦a¤è¥h§ï¼g, Ä~©Óªº·N¸q¤£´N¬O§Æ±æ code ¥i¥H leverage ¤÷Ãþ§O ?


¥t¥~°²¦p Tiger ªº Clone ¼g¦¨
Prototype * Tiger::Clone()
{
    return Animal::Clone();
}
§Y¨Ï¦³©w¸q must, ÁÙ¬OµLªk±j¨î¤lÃþ§O¥²¶·¹ê§@Äݩ󥦦ۤvªº Clone()


©Ò¥HÀ³¸Ó°Ý»¡, ·Q±j­¢¤lÃþ§O¹ê§@¥X­þ¨Ç¤£¦P³B ?


§@ªÌ : cheg(cheg)
[ ¶K¤å 99 | ¤H®ð 125 | µû»ù 410 | µû»ù/¶K¤å 4.14 | °e¥Xµû»ù 24 ¦¸ ] 
[ µ¹­ÓÆg ]  [ µ¹­ÓÆg ]  [ ¦^À³¥»¤å ]  [ µoªí·s¤å ]  [ ¦^¤W­¶ ] [ ¦^°Q½×°Ï¦Cªí ] [ ¦^ª¾ÃѤJ¤f ]
2017/7/28 ¤U¤È 08:28:15
¦]¬° must Ãö©À¤W¸òÄ~©Ó·|¦³½Ä¬ð

Ä~©Ó¦³¤¶­±»P¹ê§@ªºÄ~©Ó
Prototype ¬OÅý¤HÄ~©Ó¤¶­± =0 ´N¬O­n«OÃÒ§O¤H´£¨Ñ¹ê§@¡A
´£¨Ñ¹ê§@ªº¤H¡A­«¥Î¤F¨Ì¾Ú Prototypye ©Ò¼¶¼gªºµ{¦¡½X ¡C
¦Ó Prototype ªº®]¤lÄ~©Ó¹ê§@¡A­«¥Î¤F Prototype ªº«Ä¤l¡C

§Aªº must ­­¨î§O¤H­«½Æ§Q¥Îµ{¦¡½Xªº½d³ò¡A­°§C¥L­«¥Îªº¦Û¥Ñ«×¡C


  
§@ªÌ : cxxlman(CxxlMan) C++Àu¨q¦n¤â¶K¤å¶W¹L1000«h
[ ¶K¤å 1036 | ¤H®ð 3227 | µû»ù 1260 | µû»ù/¶K¤å 1.22 | °e¥Xµû»ù 27 ¦¸ ] 
[ µ¹­ÓÆg ]  [ µ¹­ÓÆg ]  [ ¦^À³¥»¤å ]  [ µoªí·s¤å ]  [ ¦^¤W­¶ ] [ ¦^°Q½×°Ï¦Cªí ] [ ¦^ª¾ÃѤJ¤f ]
2017/7/28 ¤U¤È 08:34:16
>¤£¹L final ­è¦n©M§A­nªºªF¦è¬Û¤Ï¡A¤@­Ó³Q final ­×¹¢ªºµê¨ç¦¡¬OµLªk¦b¤l¥N¦A³QÂмgªº¡I

©Ò¥H§Ú¤~ı±o©_©Ç¡Aªñ¦Ê¦~ªºµ{¦¡¾ú¥vÃø¥H¼Æ­pªºµ{¦¡½X¡A§Ú·Q­nªºªF¦èÀ³¦­´N¦³¤H·Q­n¤F¡AC++ ¤£´£¨ÑÀ³¦³­Ó¦n²z¥Ñ§a

>must ¥i¯à¸òÄ~©Óªº·§©À¦³ÂI½Ä¬ð§a ?

¬Ý¤£¥X¦³¤°»ò½Ä¬ð

>°²¦p Animal Ä~©Ó¤F Prototype ¦Ó¥B¹ê§@¤F Clone()
>¨º Tiger Ä~©Ó¤F Animal «á, ¨ä¹ê´N¥u»Ý­n°w¹ï»P Animal ¤£¦Pªº¦a¤è¥h§ï¼g, Ä~©Óªº·N¸q¤£´N¬O§Æ±æ code ¥i¥H leverage ¤÷Ãþ§O ?

©Ò¥H¤£·|¦³½Ä¬ð°Ú¡A­Y¦h­Ó must µ{¦¡¤£´N·|§ó°·§§

>
>¥t¥~°²¦p Tiger ªº Clone ¼g¦¨
>Prototype * Tiger::Clone()
>{
> return Animal::Clone();
>}
>§Y¨Ï¦³©w¸q must, ÁÙ¬OµLªk±j¨î¤lÃþ§O¥²¶·¹ê§@Äݩ󥦦ۤvªº Clone()

§Y¨Ï¨S¦³ must¡A¤]¦³§A¤@¼Ëªº°ÝÃD¡A³o¬Oµ{¦¡­ûªº°ÝÃD§a

>©Ò¥HÀ³¸Ó°Ý»¡, ·Q±j­¢¤lÃþ§O¹ê§@¥X­þ¨Ç¤£¦P³B ?

¦]¬°¦³¥²­n¡A­n½T©w¬Y­ÓµêÀÀ¨ç¼Æ¤@©w·|³Q³Ì²×Ãþ§O¹ê§@ªº¶·­n¡Aµ{¦¡­û­n«ç»ò°µµLªk±±¨î¡A¤£¯à°µ¬°¤Ï¹ïªº²z¥Ñ
§@ªÌ : cxxlman(CxxlMan) C++Àu¨q¦n¤â¶K¤å¶W¹L1000«h
[ ¶K¤å 1036 | ¤H®ð 3227 | µû»ù 1260 | µû»ù/¶K¤å 1.22 | °e¥Xµû»ù 27 ¦¸ ] 
[ µ¹­ÓÆg ]  [ µ¹­ÓÆg ]  [ ¦^À³¥»¤å ]  [ µoªí·s¤å ]  [ ¦^¤W­¶ ] [ ¦^°Q½×°Ï¦Cªí ] [ ¦^ª¾ÃѤJ¤f ]
2017/7/28 ¤U¤È 08:41:18

>¦]¬° must Ãö©À¤W¸òÄ~©Ó·|¦³½Ä¬ð
>
>Ä~©Ó¦³¤¶­±»P¹ê§@ªºÄ~©Ó
>Prototype ¬OÅý¤HÄ~©Ó¤¶­± =0 ´N¬O­n«OÃÒ§O¤H´£¨Ñ¹ê§@¡A
>´£¨Ñ¹ê§@ªº¤H¡A­«¥Î¤F¨Ì¾Ú Prototypye ©Ò¼¶¼gªºµ{¦¡½X ¡C
>¦Ó Prototype ªº®]¤lÄ~©Ó¹ê§@¡A­«¥Î¤F Prototype ªº«Ä¤l¡C
>
>§Aªº must ­­¨î§O¤H­«½Æ§Q¥Îµ{¦¡½Xªº½d³ò¡A­°§C¥L­«¥Îªº¦Û¥Ñ«×¡C

§Ú must ªº·N«ä¬O­n³Ì²×Ãþ§O¶·¹ê§@©Î§ï¼g¥Îªº¡A¤£¶·³o»ò°µªº·íµM´N¤£À³¸Ó¨Ï¥Î

§@ªÌ : cheg(cheg)
[ ¶K¤å 99 | ¤H®ð 125 | µû»ù 410 | µû»ù/¶K¤å 4.14 | °e¥Xµû»ù 24 ¦¸ ] 
[ µ¹­ÓÆg ]  [ µ¹­ÓÆg ]  [ ¦^À³¥»¤å ]  [ µoªí·s¤å ]  [ ¦^¤W­¶ ] [ ¦^°Q½×°Ï¦Cªí ] [ ¦^ª¾ÃѤJ¤f ]
2017/7/28 ¤U¤È 10:27:40
>§Ú must ªº·N«ä¬O­n³Ì²×Ãþ§O¶·¹ê§@©Î§ï¼g¥Îªº¡A¤£¶·³o»ò°µªº·íµM´N¤£À³¸Ó¨Ï¥Î

§A©w¤¶­±ªº·N«ä¬OÅý¤¶­±«È¤áºÝªºÅÞ¿è¥i¥H³Q­«¥Î
¦ý¬O¤í¯Ê¬Y¨Ç¥\¯à¡A¦Ó =0 ¬O½T«O¦³¨º¨Ç¥\¯à¦s¦b
¦Ó¨Ï¥Î¨º¬qÅ޿誺¤H¡A­n«ç»ò¹ê§@¬OµLªk³Q¬ù§ôªº
¦pªG¥L¦³¥²­nÄ~¼h¨ì²Ä¤G¼h¡Aªí¥Ü¥L­n­«¥Î²Ä¤@¼hªº¤º®e
¦pªG§A¥[¤F must ¦Ó¥L­nÄ~©Ó²Ä¤G¼h¡A´N­n©I¥s¤@¦¸ super µM«á¤°»ò³£¤£§@¡A³o¬O¦h¦¹¤@Á|
°ÝÃD¦b©ó§AµLªk¬ù§ô¥L«ç»ò¹ê§@¡A§A¥u¬O­n¤@­Ó¥\¯à¦Ó¤w¡A¥LÁÙ¬O¥i¥H¥Î¦UºØ¤èªk¸õ¹L must
¥L¯uªº¤@©w­n­«§@¡A¬°¤°»ò¤£¦¨¬°²Ä¤G­Ó child ´N¦n¡A«D­n¦¨¬° grandson ?

A() ®Ú¾Ú Prototype ¼g½X¡AB ´£¨Ñ Prototype ¥\¯à¡AC Ä~©Ó Prototype ªº«Ä¤l B
A() ­«¥Î B/C ªºµ{¦¡½X¡AC ­«¥Î B ªºµ{¦¡½X¡A©I¥s A() ªº«È¤á­«¥Î¥¦ªºÅÞ¿è´N¬Oª«¥ó¾É¦V´£¨Ñªº¼g½X¤è¦¡
  
  
§@ªÌ : ccl0504(¤â°Êµ{¦¡²£¥Í¾¹) ¶K¤å¶W¹L200«h
[ ¶K¤å 450 | ¤H®ð 211 | µû»ù 930 | µû»ù/¶K¤å 2.07 | °e¥Xµû»ù 2 ¦¸ ] 
[ µ¹­ÓÆg ]  [ µ¹­ÓÆg ]  [ ¦^À³¥»¤å ]  [ µoªí·s¤å ]  [ ¦^¤W­¶ ] [ ¦^°Q½×°Ï¦Cªí ] [ ¦^ª¾ÃѤJ¤f ]
2017/7/29 ¤W¤È 02:53:32
>>°²¦p Animal Ä~©Ó¤F Prototype ¦Ó¥B¹ê§@¤F Clone()
>>¨º Tiger Ä~©Ó¤F Animal «á, ¨ä¹ê´N¥u»Ý­n°w¹ï»P Animal ¤£¦Pªº¦a¤è¥h§ï¼g, Ä~©Óªº·N¸q¤£´N¬O§Æ±æ code ¥i¥H leverage ¤÷Ãþ§O ?
>
>©Ò¥H¤£·|¦³½Ä¬ð°Ú¡A­Y¦h­Ó must µ{¦¡¤£´N·|§ó°·§§

 ½Ä¬ðªºÂI¦b§A§Y¨Ï¦³ must, ¦Ó Tiger implement Clone() ¦ýª½±µ©I¥s¤÷Ãþ§Oªº Clone() ¤°»ò¨Æ¤]¨S°µ
 ©Ò¥H must ¬O¦b must ¤°»ò¨Æ±¡ ? Clone() ¨C­Ó¤lÃþ§O³£¦³­«¼g, µ²ªG¥\¯à¥þ³¡¬Û¦P (³£©I¥s¤÷Ãþ§O)

>>must ¥i¯à¸òÄ~©Óªº·§©À¦³ÂI½Ä¬ð§a ?
>
>¬Ý¤£¥X¦³¤°»ò½Ä¬ð
   Ä~©Ó´N¬O§Æ±æµ{¦¡¥i¥H­«½Æ§Q¥Î
   µ²ªG¤÷Ãþ§O©w¸q must, µ²ªG¤lÃþ§O¹³¤W­±ªº¤è¦¡¦P¼Ëªºµ{¦¡¤@ª½¦b­«½Æ¼g
   
>§Y¨Ï¨S¦³ must¡A¤]¦³§A¤@¼Ëªº°ÝÃD¡A³o¬Oµ{¦¡­ûªº°ÝÃD§a
>
>>©Ò¥HÀ³¸Ó°Ý»¡, ·Q±j­¢¤lÃþ§O¹ê§@¥X­þ¨Ç¤£¦P³B ?
>
>¦]¬°¦³¥²­n¡A­n½T©w¬Y­ÓµêÀÀ¨ç¼Æ¤@©w·|³Q³Ì²×Ãþ§O¹ê§@ªº¶·­n¡Aµ{¦¡­û­n«ç»ò°µµLªk±±¨î¡A¤£¯à°µ¬°¤Ï¹ïªº²z¥Ñ

  ¥²­n¦b­þ ? ¤lÃþ§O®]Ãþ§O Clone() ¥þ³¡³£¼gªº¤@¼Ë => code ¼g¤F¤@°ï, ¥\¯à§¹¥þ¬Û¦P
  ©Ò¥H§AÁÙ¬O¨S¦^µª­«ÂI, §A·Q±j­¢¤lÃþ§O ¹ê§@­þ¨Ç¤£¦P³B


  ¥t¥~¥H¶i¤Æ½×ªºÆ[ÂI¨Ó¬Ý, ­ì©l¤Hı±o®³¼Ðºj¥´Ây«Ü­«­n, ±j­¢¤l/®]Ãþ§O¨C­Ó³£­n·|®³¼Ðºj¥´Ây..
  ºt¤Æ¨ì²{¦b, ®³¼Ðºj¥´Ây­«­n¶Ü ?
  ©Ò¥H­n¥H²{¦bªº­«­n©Ê¥h¹w´ú¥¼¨Óªº­«­n©Ê, ¬O§_¯uªº¬O must ?


§@ªÌ : cxxlman(CxxlMan) C++Àu¨q¦n¤â¶K¤å¶W¹L1000«h
[ ¶K¤å 1036 | ¤H®ð 3227 | µû»ù 1260 | µû»ù/¶K¤å 1.22 | °e¥Xµû»ù 27 ¦¸ ] 
[ µ¹­ÓÆg ]  [ µ¹­ÓÆg ]  [ ¦^À³¥»¤å ]  [ µoªí·s¤å ]  [ ¦^¤W­¶ ] [ ¦^°Q½×°Ï¦Cªí ] [ ¦^ª¾ÃѤJ¤f ]
2017/7/29 ¤W¤È 07:46:33
> ½Ä¬ðªºÂI¦b§A§Y¨Ï¦³ must, ¦Ó Tiger implement Clone() ¦ýª½±µ©I¥s¤÷Ãþ§Oªº Clone() ¤°»ò¨Æ¤]¨S°µ
> ©Ò¥H must ¬O¦b must ¤°»ò¨Æ±¡ ? Clone() ¨C­Ó¤lÃþ§O³£¦³­«¼g, µ²ªG¥\¯à¥þ³¡¬Û¦P (³£©I¥s¤÷Ãþ§O)

´Nºâ¨S¦³ must¡A¨C­Ó¹ê§@Ãþ§OÁÙ¬O±o¹ê§@ Clone()¡Amust ¥u¬O½Ð½s;¹À°¦£Àˬd¹ê§@Ãþ§O¬O¤£¬O¦³¹ê§@ Clone() ¦Ó¤w¡A§A¥h©I¥s¤÷Ãþ§O°µ¤°»ò¡AClone() ´N¬O­n§ï¼g¤÷Ãþ§Oªº Clone()¡A©È¤lÃþ¨S¥h§ï¼g§Ú¤~´£¥X must¡A§AÁÙ¥h©I¥s¤÷Ãþ¡A³o©M¤lÃþ¨S¹ê§@ Clone() ¦³¤°»ò¨â¼Ë¡C

> Ä~©Ó´N¬O§Æ±æµ{¦¡¥i¥H­«½Æ§Q¥Î
> µ²ªG¤÷Ãþ§O©w¸q must, µ²ªG¤lÃþ§O¹³¤W­±ªº¤è¦¡¦P¼Ëªºµ{¦¡¤@ª½¦b­«½Æ¼g

½Ö³W©w¤lÃþ¤@©w­n¥h©I¥s¤÷Ãþ¤~¥sÄ~©Ó
   
>
> ¥²­n¦b­þ ? ¤lÃþ§O®]Ãþ§O Clone() ¥þ³¡³£¼gªº¤@¼Ë => code ¼g¤F¤@°ï, ¥\¯à§¹¥þ¬Û¦P
> ©Ò¥H§AÁÙ¬O¨S¦^µª­«ÂI, §A·Q±j­¢¤lÃþ§O ¹ê§@­þ¨Ç¤£¦P³B

§A¾K¤F¶Ü

> ¥t¥~¥H¶i¤Æ½×ªºÆ[ÂI¨Ó¬Ý, ­ì©l¤Hı±o®³¼Ðºj¥´Ây«Ü­«­n, ±j­¢¤l/®]Ãþ§O¨C­Ó³£­n·|®³¼Ðºj¥´Ây..
> ºt¤Æ¨ì²{¦b, ®³¼Ðºj¥´Ây­«­n¶Ü ?
> ©Ò¥H­n¥H²{¦bªº­«­n©Ê¥h¹w´ú¥¼¨Óªº­«­n©Ê, ¬O§_¯uªº¬O must ?

³o¤£´N¬ðÅã¤F must ªº¥²­n©Ê¡A¦pªG¤£¥h§ï¼g¡A¥Ã»·³£®³¼Ðºj¥´Ây
§@ªÌ : ccl0504(¤â°Êµ{¦¡²£¥Í¾¹) ¶K¤å¶W¹L200«h
[ ¶K¤å 450 | ¤H®ð 211 | µû»ù 930 | µû»ù/¶K¤å 2.07 | °e¥Xµû»ù 2 ¦¸ ] 
[ µ¹­ÓÆg ]  [ µ¹­ÓÆg ]  [ ¦^À³¥»¤å ]  [ µoªí·s¤å ]  [ ¦^¤W­¶ ] [ ¦^°Q½×°Ï¦Cªí ] [ ¦^ª¾ÃѤJ¤f ]
2017/7/29 ¤W¤È 08:45:06

>> ½Ä¬ðªºÂI¦b§A§Y¨Ï¦³ must, ¦Ó Tiger implement Clone() ¦ýª½±µ©I¥s¤÷Ãþ§Oªº Clone() ¤°»ò¨Æ¤]¨S°µ
>> ©Ò¥H must ¬O¦b must ¤°»ò¨Æ±¡ ? Clone() ¨C­Ó¤lÃþ§O³£¦³­«¼g, µ²ªG¥\¯à¥þ³¡¬Û¦P (³£©I¥s¤÷Ãþ§O)
>
>´Nºâ¨S¦³ must¡A¨C­Ó¹ê§@Ãþ§OÁÙ¬O±o¹ê§@ Clone()¡Amust ¥u¬O½Ð½s;¹À°¦£Àˬd¹ê§@Ãþ§O¬O¤£¬O¦³¹ê§@ Clone() ¦Ó¤w¡A§A¥h©I¥s¤÷Ãþ§O°µ¤°»ò¡AClone() ´N¬O­n§ï¼g¤÷Ãþ§Oªº Clone()¡A©È¤lÃþ¨S¥h§ï¼g§Ú¤~´£¥X must¡A§AÁÙ¥h©I¥s¤÷Ãþ¡A³o©M¤lÃþ¨S¹ê§@ Clone() ¦³¤°»ò¨â¼Ë¡C
>
>> Ä~©Ó´N¬O§Æ±æµ{¦¡¥i¥H­«½Æ§Q¥Î
>> µ²ªG¤÷Ãþ§O©w¸q must, µ²ªG¤lÃþ§O¹³¤W­±ªº¤è¦¡¦P¼Ëªºµ{¦¡¤@ª½¦b­«½Æ¼g
>
>½Ö³W©w¤lÃþ¤@©w­n¥h©I¥s¤÷Ãþ¤~¥sÄ~©Ó
§Ú¨S³o»ò»¡§a ? §A¦³¬ÝÀ´ !??


>
>>
>> ¥²­n¦b­þ ? ¤lÃþ§O®]Ãþ§O Clone() ¥þ³¡³£¼gªº¤@¼Ë => code ¼g¤F¤@°ï, ¥\¯à§¹¥þ¬Û¦P
>> ©Ò¥H§AÁÙ¬O¨S¦^µª­«ÂI, §A·Q±j­¢¤lÃþ§O ¹ê§@­þ¨Ç¤£¦P³B
>
>§A¾K¤F¶Ü
¬O§A§a !?


>
>> ¥t¥~¥H¶i¤Æ½×ªºÆ[ÂI¨Ó¬Ý, ­ì©l¤Hı±o®³¼Ðºj¥´Ây«Ü­«­n, ±j­¢¤l/®]Ãþ§O¨C­Ó³£­n·|®³¼Ðºj¥´Ây..
>> ºt¤Æ¨ì²{¦b, ®³¼Ðºj¥´Ây­«­n¶Ü ?
>> ©Ò¥H­n¥H²{¦bªº­«­n©Ê¥h¹w´ú¥¼¨Óªº­«­n©Ê, ¬O§_¯uªº¬O must ?
>
>³o¤£´N¬ðÅã¤F must ªº¥²­n©Ê¡A¦pªG¤£¥h§ï¼g¡A¥Ã»·³£®³¼Ðºj¥´Ây
¤´¬Ý¤£¥X¨Ï¥Î must ¨ä¥²­n©Ê
°²¦p¤@­ÓÃþ§OÄ~©Ó¨ì¤F 100 ©Î¬O 1000 ­Ó must, ¨º¨º­ÓÄ~©ÓªºÃþ§O¤£´N 100 ­Ó must ³£­n·dÀ´ function ¨ì©³¦b°µ¤°»ò ?

> µ{¦¡­û­n«ç»ò°µµLªk±±¨î¡A¤£¯à°µ¬°¤Ï¹ïªº²z¥Ñ

¬JµMµLªk±±¨îµ{¦¡­û­n«ç»ò°µ,
ªí¥Ü§A¥u­n¨D 1. ¥¦­n¦³ 2.¥¦¤@©w­n³Q§ï¼g
1 => ¥i¥H¥Î virtual + Ä~©Ó
2 => ¦p«e©Ò­z, Ä~©Ó¤@°ï must ¥H«á, ÁÙ­nªá®É¶¡¥h½Æ»s¶K¤W¤@°ï­«½Æªº code (¥i¯à³s§ï³£¨S§ï), ¯uªº¹ï coding ¦³¤ñ¸û®e©ö ?



§@ªÌ : ccl0504(¤â°Êµ{¦¡²£¥Í¾¹) ¶K¤å¶W¹L200«h
[ ¶K¤å 450 | ¤H®ð 211 | µû»ù 930 | µû»ù/¶K¤å 2.07 | °e¥Xµû»ù 2 ¦¸ ] 
[ µ¹­ÓÆg ]  [ µ¹­ÓÆg ]  [ ¦^À³¥»¤å ]  [ µoªí·s¤å ]  [ ¦^¤W­¶ ] [ ¦^°Q½×°Ï¦Cªí ] [ ¦^ª¾ÃѤJ¤f ]
2017/7/29 ¤W¤È 08:55:50
>> ¥t¥~¥H¶i¤Æ½×ªºÆ[ÂI¨Ó¬Ý, ­ì©l¤Hı±o®³¼Ðºj¥´Ây«Ü­«­n, ±j­¢¤l/®]Ãþ§O¨C­Ó³£­n·|®³¼Ðºj¥´Ây..
>> ºt¤Æ¨ì²{¦b, ®³¼Ðºj¥´Ây­«­n¶Ü ?
>> ©Ò¥H­n¥H²{¦bªº­«­n©Ê¥h¹w´ú¥¼¨Óªº­«­n©Ê, ¬O§_¯uªº¬O must ?
>
>³o¤£´N¬ðÅã¤F must ªº¥²­n©Ê¡A¦pªG¤£¥h§ï¼g¡A¥Ã»·³£®³¼Ðºj¥´Ây

no,

¨Ï¥Î must ªº±¡ªp :
°²¦p root class «Å§i¤F ®³¼Ðºj¥´Ây(), ¨ì¤F²Ä 10 ¥Nµo²{¤£¾A¥Î§ï¼g, ¦ý²Ä 11, 12,... ¨ì 100 ¨C¤@¥N³£ÁÙ­n§â ®³¼Ðºj¥´Ây() ®³¥X¨Ó¼g¤@¤Uªº·N¸q¦b­þ ? (®³¨Ó«ô¤@¤U ?)

¨Ï¥Î virtual ªº±¡ªp :
°²¦p root class «Å§i¤F ®³¼Ðºj¥´Ây(), ²Ä 10 ¥N¨Ï¥Îµo²{¤w¸g¤£­««á§ï¼g, ²Ä 11, 12 ¨ì 100 ³£¥i¥H¤£¥Î¥hºÞ ®³¼Ðºj¥´Ây(), ¥u­n±Mª`·s¥\¯àªº³¡¤À



§@ªÌ : cxxlman(CxxlMan) C++Àu¨q¦n¤â¶K¤å¶W¹L1000«h
[ ¶K¤å 1036 | ¤H®ð 3227 | µû»ù 1260 | µû»ù/¶K¤å 1.22 | °e¥Xµû»ù 27 ¦¸ ] 
[ µ¹­ÓÆg ]  [ µ¹­ÓÆg ]  [ ¦^À³¥»¤å ]  [ µoªí·s¤å ]  [ ¦^¤W­¶ ] [ ¦^°Q½×°Ï¦Cªí ] [ ¦^ª¾ÃѤJ¤f ]
2017/7/29 ¤W¤È 10:16:32
§Ú»¡ªº must ¬O¬°¤F¥²¶·­n¹ê§@¡B§ï¼gªºµêÀÀ¨ç¼Æ¦Ó¥[ªº¡A¹ï©ó¤£¶·¤@©w­n¹ê§@¡B§ï¼gªºµêÀÀ¨ç¼Æµw­n¥[¤W must ¤~»¡¤£­n¹ê§@¡A³o¬Oµ{¦¡­ûªº¿ù¡A¤£­n¥h©Ç must
§@ªÌ : ice_emissary(¿U¿Nªº¤j¦a) ¶K¤å¶W¹L200«h
[ ¶K¤å 406 | ¤H®ð 0 | µû»ù 1860 | µû»ù/¶K¤å 4.58 | °e¥Xµû»ù 17 ¦¸ ] 
[ µ¹­ÓÆg ]  [ µ¹­ÓÆg ]  [ ¦^À³¥»¤å ]  [ µoªí·s¤å ]  [ ¦^¤W­¶ ] [ ¦^°Q½×°Ï¦Cªí ] [ ¦^ª¾ÃѤJ¤f ]
2017/7/29 ¤U¤È 03:16:50
C++ ¦b¨î©w³\¦h¯S©Ê®Éªº­º­n¦Ò¼{­«ÂI¨Ã¤£¬O­n¸T¤îµ{¦¡®v·h¥ÛÀY¯{¦Û¤vªº¸}¡A³o¦n¹³¬O¬Y©e­û»¡¹Lªº¸Ü¡C
©Ò¥H¦b¨î©w¼Ð·Çªº®É­Ô¡A·í§_¨Ç­p¹º¤¤ªº¯S©Ê¥i¥Hµ¹¨Ï¥ÎªÌ±a¨Ó¦h¤è«K¡B©Î§ó¦h²Õ¦X¼u©Ê¡A¦ý«o¤]¦³¯à¤O¦b¤£·íªº¨Ï¥Î¤§¤U³y¦¨¦M®`®É¡A³q±`«áªÌ¼vÅT·|³Q©¿²¤¡C
©Ò¥H C++ ©ÎªÌ¬O C ¥»¨­´N­n¨D°ª¯À½èªºµ{¦¡³]­p¤H­û¡A³o¬O»y¨¥­õ¾Ç¥»¨­ªº¨ì¿ý¨ú±Ë°ÝÃD¡F¥t¤@­Ó·¥ºÝªº³¡¥÷¥i¥H°Ñ¦Ò Java ©Î¨ä¥Lªñ¥Nªº°ª¶¥»y¨¥¡C
ÁöµM¦UºØ»y¨¥ªº³]­p®v±Ú¸s¸Ì³£·|¦³¨Ç®`¸s¤§°¨¡A¦ý§C¯À½è³]­p®v¦b¥H C++ ¼g¦¨ªº±M®×¸Ì³y¦¨ªº¯}Ãa¤j·§¬O©Ò¦³¨ä¥Lµ{¦¡»y¨¥©ÒµLªk¤ñ¸ûªº¡I

¤W­±»¡³o»ò¦h¡A´N¬O­nªí¹F¤@ÂI¡GC++ ³q±`¨S¦³¯à¤Oªý¤î¨Ï¥ÎªÌ°µÄø¨Æ¡AÁöµMµ{¦¡®w³]­pªÌ³q±`·Q¾¨¶qÁ×§K¨Ï¥ÎªÌ°µÄø¨Æ¡C

»yªk¤W¡A¥u¦³¯Âµê¨ç¦¡­n¨D¤l¥N¥²¶·­n¹ï¨ä¶i¦æ¹ê°µ¡A¦Ü©ó­þ¤@¥N¤~°µ¡A¥¦´N¤£ºÞ¤F¡A¤Ï¥¿¨Ï¥Î«e¦³°µ¥X¨Ó´N¦n¡I
«á¨Ó¥[¤Jªº override ©M final ÃöÁä¦r¡A¤]­Ë¤£¬O­n¸T¤î¨Ï¥ÎªÌ°µÄø¨Æ¡A¥D­nªº¥ØªºÀ³¸Ó¬O­nÁ×§K¦]¬°¥´¿ù¦r¡A©Îª©¥»§ó·sªº½t¬G©Ò³y¦¨ªº¿ù»~¡I

¬°¤°»ò¨S¦³´£¨Ñ must ÃöÁä¦r¡A§Ú·Q­ì¦]¦b«e­±ªº°Q½×¤¤«Ü©úÅã¤F¡C
must ­­ÁY¤F¨Ï¥ÎªÌªº³]­p¼u©Ê¡A¤]¨S¦³©úÅã±a¨Ó³]­p¤Wªº¤°»ò¤è«K©Ê¡C
·íµM¡A§Ú¤£´±ªÖ©w¡A¤]³\¥H«áªº C++ ·|¤£·|¥[¤J³o­ÓªF¦è¡I²¦³º§Ú¤£¬O¤°»ò¤j¯«¡A«ç»ò¯à¯u¥¿²z¸Ñ¤j¯«­Ìªº·Qªk¡H

¥¼¨Ó¥ý¤£»¡¡A¥H²{ª¬¦Ó¨¥¡A´N¥Î¼Ó¥DÃDªº Clone ¨ç¦¡°Q½×¡G
¨ä¹ê C++ ¦b³o¤è­±¤]¦³¼Ó¥DÃD¨ìªºª«¥ó½Æ»s¦æ¬°¦b¹ê°µ¤W®e©ö³Q©¿²¤ªº¯Ê³´¡A¦Ó¥B¦ü¥G¨Ã¨S¦³±q»yªk¤W°µ¥X¤°»ò­­¨î±¹¬I¡C
¤ñ¦p»¡ T::T(const T&) ©M T& operator=(const T&) ³o¨â­Ó¨ç¦¡¡A§Ú·Qµy·L¤F¸Ñ C++ ªº¤H´Nª¾¹D§Ú­n»¡¤°»ò¡A´N¤£¦h¸ÑÄÀ¡C
´£³o¨â­Ó¨ç¦¡¬O¦]¬°¥L­Ì©M Clone ¨ç¦¡¦³¬Û¦ü¯S©Ê¡B¹ê°µ¤W³£¥i¯à³Q©¿²¤¡B¥B³£¥¼¦³¤°»ò­ì¥Íªº­­¨î©Î´£¿ô±¹¬I¡C
§@ªÌ : cxxlman(CxxlMan) C++Àu¨q¦n¤â¶K¤å¶W¹L1000«h
[ ¶K¤å 1036 | ¤H®ð 3227 | µû»ù 1260 | µû»ù/¶K¤å 1.22 | °e¥Xµû»ù 27 ¦¸ ] 
[ µ¹­ÓÆg ]  [ µ¹­ÓÆg ]  [ ¦^À³¥»¤å ]  [ µoªí·s¤å ]  [ ¦^¤W­¶ ] [ ¦^°Q½×°Ï¦Cªí ] [ ¦^ª¾ÃѤJ¤f ]
2017/7/29 ¤U¤È 06:53:18
class Prototype
{
public:
  Prototype() {}
  virtual ~Prototype() {}

  // ¨ú±o©M¹êÅ骫¥ó¬Û¦Pªºª«¥ó
  virtual Prototype *Clone() = 0;
};

class A:public Prototype
{
public:
  A() {}
  virtual ~A() {}

  virtual Prototype *Clone()
  {
    return new A;
  }
};


class B:public A
{
public:
  B() {}
  virtual ~B () {}
};

class B2 :public A
{
public:
  B2() {}
  virtual ~B2() {}

  virtual Prototype *Clone()
  {
    return new A; // Äø¨Æ
  }
};

int main()
{
  Prototype *B_Obj = new B;
  Prototype *B2_Obj = new B2;

  Prototype *B_ObjErr = B_Obj->Clone();
  Prototype *B2_ObjErr = B2_Obj->Clone();
  
  return 0;
}

¥H¤W¦b¨S¦³ must ·|¥X²{ªº°ÝÃD¡A­Y¦³ must «h¥iÁ×§K class B ªº±¡ªpµo¥Í¡A¦Ü©ó class B2 ¤£ºÞ¦³¨S¦³ must ¤@¼Ë³£·|µo¥Í¡A³oÃö must ¤°»ò¨Æ
§@ªÌ : cheg(cheg)
[ ¶K¤å 99 | ¤H®ð 125 | µû»ù 410 | µû»ù/¶K¤å 4.14 | °e¥Xµû»ù 24 ¦¸ ] 
[ µ¹­ÓÆg ]  [ µ¹­ÓÆg ]  [ ¦^À³¥»¤å ]  [ µoªí·s¤å ]  [ ¦^¤W­¶ ] [ ¦^°Q½×°Ï¦Cªí ] [ ¦^ª¾ÃѤJ¤f ]
2017/7/29 ¤U¤È 06:59:46
³o­Ó¨Ò¤l¥¿¦n¥Ü½d must ¤£¯à¸Ñ¨M°ÝÃD¡A¦Ó B À³¸ÓÄ~©Ó Prototype ¦Ó¤£¬O A

B2 ¥i¥H¥Î co-variant return type ¤£¹L°ÝÃD¤£¦b³o¡A°ÝÃD¦b©ó¼gªº¤H­nª¾¹D
  
  
§@ªÌ : cxxlman(CxxlMan) C++Àu¨q¦n¤â¶K¤å¶W¹L1000«h
[ ¶K¤å 1036 | ¤H®ð 3227 | µû»ù 1260 | µû»ù/¶K¤å 1.22 | °e¥Xµû»ù 27 ¦¸ ] 
[ µ¹­ÓÆg ]  [ µ¹­ÓÆg ]  [ ¦^À³¥»¤å ]  [ µoªí·s¤å ]  [ ¦^¤W­¶ ] [ ¦^°Q½×°Ï¦Cªí ] [ ¦^ª¾ÃѤJ¤f ]
2017/7/29 ¤U¤È 07:10:12

>¤ñ¦p»¡ T::T(const T&) ©M T& operator=(const T&) ³o¨â­Ó¨ç¦¡¡A§Ú·Qµy·L¤F¸Ñ C++ ªº¤H´Nª¾¹D§Ú­n»¡¤°»ò¡A´N¤£¦h¸ÑÄÀ¡C
>´£³o¨â­Ó¨ç¦¡¬O¦]¬°¥L­Ì©M Clone ¨ç¦¡¦³¬Û¦ü¯S©Ê¡B¹ê°µ¤W³£¥i¯à³Q©¿²¤¡B¥B³£¥¼¦³¤°»ò­ì¥Íªº­­¨î©Î´£¿ô±¹¬I¡C

T::T(const T&) ©M T& operator=(const T&) ¥u¬O¬Y¤@¼h­±(¥]¬A¤÷Ãþ¥H¤W)¸ê®Æªº½Æ»s¡Aclone() ¬Oª«¥óªº§¹¥þ½Æ»s
§@ªÌ : cxxlman(CxxlMan) C++Àu¨q¦n¤â¶K¤å¶W¹L1000«h
[ ¶K¤å 1036 | ¤H®ð 3227 | µû»ù 1260 | µû»ù/¶K¤å 1.22 | °e¥Xµû»ù 27 ¦¸ ] 
[ µ¹­ÓÆg ]  [ µ¹­ÓÆg ]  [ ¦^À³¥»¤å ]  [ µoªí·s¤å ]  [ ¦^¤W­¶ ] [ ¦^°Q½×°Ï¦Cªí ] [ ¦^ª¾ÃѤJ¤f ]
2017/7/29 ¤U¤È 07:15:29

>³o­Ó¨Ò¤l¥¿¦n¥Ü½d must ¤£¯à¸Ñ¨M°ÝÃD¡A¦Ó B À³¸ÓÄ~©Ó Prototype ¦Ó¤£¬O A

§A¨S¦³·d²M·¡¦b°Q½×¤°»ò¡A´N¬O¦b°Q½× B Ä~©Ó¦Û A


>B2 ¥i¥H¥Î co-variant return type ¤£¹L°ÝÃD¤£¦b³o¡A°ÝÃD¦b©ó¼gªº¤H­nª¾¹D

©Ò¥HÃö must ¤°»ò¨Æ
§@ªÌ : cheg(cheg)
[ ¶K¤å 99 | ¤H®ð 125 | µû»ù 410 | µû»ù/¶K¤å 4.14 | °e¥Xµû»ù 24 ¦¸ ] 
[ µ¹­ÓÆg ]  [ µ¹­ÓÆg ]  [ ¦^À³¥»¤å ]  [ µoªí·s¤å ]  [ ¦^¤W­¶ ] [ ¦^°Q½×°Ï¦Cªí ] [ ¦^ª¾ÃѤJ¤f ]
2017/7/29 ¤U¤È 07:25:28
§A¦Û¤v·Q·Q¬Ý Prototype ªº¥Øªº§a
¥L­nªº¬O¤@­Ó Prototype *¶Ç¦^­È¡A¦Ó¤£¬O¥h­­¨î§O¤H¶Ç¦^¤°»ò¡A¤Î¦p¦ó¹ê§@
¨Æ¹ê¤W must ¤]¹F¤£¨ì³oºØ­n¨D¡AB2 ªº¨Ò¤l¥¿¦n»¡©ú¦pªG¦³ must ªº¸Ü¥LÁÙ¬O¥i¥H¼g¿ù
³o­Ó¨Ò¤l¥Ü½dªº¬O¿ù»~¨Ï¥ÎÄ~©Ó¡A¨Æ¹ê¤W B ¸ò B2 ³£À³¸ÓÄ~©Ó Prototype ¦Ó¤£¬O A
  
§@ªÌ : cxxlman(CxxlMan) C++Àu¨q¦n¤â¶K¤å¶W¹L1000«h
[ ¶K¤å 1036 | ¤H®ð 3227 | µû»ù 1260 | µû»ù/¶K¤å 1.22 | °e¥Xµû»ù 27 ¦¸ ] 
[ µ¹­ÓÆg ]  [ µ¹­ÓÆg ]  [ ¦^À³¥»¤å ]  [ µoªí·s¤å ]  [ ¦^¤W­¶ ] [ ¦^°Q½×°Ï¦Cªí ] [ ¦^ª¾ÃѤJ¤f ]
2017/7/29 ¤U¤È 07:36:27

>§A¦Û¤v·Q·Q¬Ý Prototype ªº¥Øªº§a
>¥L­nªº¬O¤@­Ó Prototype *¶Ç¦^­È¡A¦Ó¤£¬O¥h­­¨î§O¤H¶Ç¦^¤°»ò¡A¤Î¦p¦ó¹ê§@
>¨Æ¹ê¤W must ¤]¹F¤£¨ì³oºØ­n¨D¡AB2 ªº¨Ò¤l¥¿¦n»¡©ú¦pªG¦³ must ªº¸Ü¥LÁÙ¬O¥i¥H¼g¿ù
>³o­Ó¨Ò¤l¥Ü½dªº¬O¿ù»~¨Ï¥ÎÄ~©Ó¡A¨Æ¹ê¤W B ¸ò B2 ³£À³¸ÓÄ~©Ó Prototype ¦Ó¤£¬O A

§A³Q ¤¶­±-¹ê§@ ªº·Qªk¸j¦º¤F¡A¤£¬O¦b°Q½×³o­Ó¡A¦Ó¬O¦b°Q½×¥Íª«¤ÀÃþ¡B¸ê®Æ®w...µ¥µ¥ªºÄ~©Ó°ÝÃD
§@ªÌ : cheg(cheg)
[ ¶K¤å 99 | ¤H®ð 125 | µû»ù 410 | µû»ù/¶K¤å 4.14 | °e¥Xµû»ù 24 ¦¸ ] 
[ µ¹­ÓÆg ]  [ µ¹­ÓÆg ]  [ ¦^À³¥»¤å ]  [ µoªí·s¤å ]  [ ¦^¤W­¶ ] [ ¦^°Q½×°Ï¦Cªí ] [ ¦^ª¾ÃѤJ¤f ]
2017/7/29 ¤U¤È 08:26:06
>§A³Q ¤¶­±-¹ê§@ ªº·Qªk¸j¦º¤F¡A¤£¬O¦b°Q½×³o­Ó¡A¦Ó¬O¦b°Q½×¥Íª«¤ÀÃþ¡B¸ê®Æ®w...µ¥µ¥ªºÄ~©Ó°ÝÃD
>

§A­nªº¥Øªº¡AµL«D´N¬O©È¨Ï¥ÎªÌ§Ñ°O¹ê§@¡A¦Óªu¥Î¤F¤÷Ãþ§Oªº¹ê§@¡C
¦³¤F must ¥i¥H°_¤@­Ó´£¿ôªº§@¥Î¡A¦Ü¤Ö¥i¥H¨ÓÀ˵ø¤@¤U§ï¼g¨ç¼Æ¡C
¥u¬O must µLªk½T«O¹ê§@ªÌ¥¿½T¹ê§@¡A¤£¹L§Ú«á¨Ó·Q·Q =0 ¤]¬O¤@¼Ë
§Ú¬Oı±o¦³ must ¤]¥i¥H¡A¦Ü¤Ö¦³´£¿ô§@¥Î¡A¥H Clone ¨Ó»¡º¡¦³¥Îªº
¨ä¥L³õ¦X¥i¯à¥Î³B¤£¤j´N¬O¤F¡C

·d¤£¦n¨ä¥L»y¨¥¥i¥H¥Î¨ä¥L¤è¦¡¹F¦¨¡A³o¼Ë´N¤£¥Î¦h¤@­Ó»y¨¥ÃöÁä¦r
  
   

  
  
  
§@ªÌ : ccl0504(¤â°Êµ{¦¡²£¥Í¾¹) ¶K¤å¶W¹L200«h
[ ¶K¤å 450 | ¤H®ð 211 | µû»ù 930 | µû»ù/¶K¤å 2.07 | °e¥Xµû»ù 2 ¦¸ ] 
[ µ¹­ÓÆg ]  [ µ¹­ÓÆg ]  [ ¦^À³¥»¤å ]  [ µoªí·s¤å ]  [ ¦^¤W­¶ ] [ ¦^°Q½×°Ï¦Cªí ] [ ¦^ª¾ÃѤJ¤f ]
2017/7/29 ¤U¤È 10:26:03
>int main()
>{
> Prototype *B_Obj = new B;
> Prototype *B2_Obj = new B2;
>
> Prototype *B_ObjErr = B_Obj->Clone();
> Prototype *B2_ObjErr = B2_Obj->Clone();
>
> return 0;
>}
>
>¥H¤W¦b¨S¦³ must ·|¥X²{ªº°ÝÃD¡A­Y¦³ must «h¥iÁ×§K class B ªº±¡ªpµo¥Í¡A¦Ü©ó class B2 ¤£ºÞ¦³¨S¦³ must ¤@¼Ë³£·|µo¥Í¡A³oÃö must ¤°»ò¨Æ

¨ä¹ê³o­Ó°ÝÃDªº®Ú¥»­ì¦]¬O¦]¬° new «á­±¥u¯à±µ class name ªºÃö«Y, ©Ò¥H§A¤~·Q¥Î must ­n¨D¤lÃþ§O¤@©w­n¼gÄÝ©ó¦Û¤vªº new
©Ò¥H°²¦p¯à¨Ï¥Î¦r¦ê¨Ó new object, ¤]¤£»Ý­n¦³ must ¤F, ¬O§a ?


³oÃþªº°ÝÃD¦³«Ü¦h implement, §ä c++ object factory ´N¥i¥H§ä¨ì«Ü¦h
https://www.codeproject.com/Articles/567242/AplusC-b-bplusObjectplusFactory
https://stackoverflow.com/questions/4357500/c-abstract-factory-using-templates

¥Ø«e¬Ý¨ìªº³£»Ý­n¤â°Êµù¥U (©I¥s macro )


¦³¨Ç»y¨¥ª½±µ¨Ï¥Î¦r¦ê´N¥i¥H new object ¤F

§@ªÌ : cxxlman(CxxlMan) C++Àu¨q¦n¤â¶K¤å¶W¹L1000«h
[ ¶K¤å 1036 | ¤H®ð 3227 | µû»ù 1260 | µû»ù/¶K¤å 1.22 | °e¥Xµû»ù 27 ¦¸ ] 
[ µ¹­ÓÆg ]  [ µ¹­ÓÆg ]  [ ¦^À³¥»¤å ]  [ µoªí·s¤å ]  [ ¦^¤W­¶ ] [ ¦^°Q½×°Ï¦Cªí ] [ ¦^ª¾ÃѤJ¤f ]
2017/8/1 ¤U¤È 08:02:15

>§Ú¬Oı±o¦³ must ¤]¥i¥H¡A¦Ü¤Ö¦³´£¿ô§@¥Î¡A¥H Clone ¨Ó»¡º¡¦³¥Îªº
>¨ä¥L³õ¦X¥i¯à¥Î³B¤£¤j´N¬O¤F¡C

¥H¤W­±§Ú¶Kªº¨Ò¤l¨Ó»¡¡APrototype ¥u¬O¤@­Óª«¥óªº¥Nªí¡A¤£¯à°µ¤°»ò
¨Æ¡A¶·­n°t¦X³X°ÝªÌ¼Ò¦¡(Visitor ½Ð¤Wºô¬d¬Ý)¨Ó¥Î¡A©Ò¥H Prototype
­×§ï¥H¤U

class Prototype
{
public:
  Prototype() {}
  virtual ~Prototype() {}

  // ¤]¶·­n¨C¼h¹ê§@Ãþ§O¹ê§@
  void Accept(Visitor *v) = 0;

  // ¨ú±o©M¹êÅ骫¥ó¬Û¦Pªºª«¥ó
  virtual Prototype *Clone() = 0;
};

¨º­Ó Accept() ¤]¶·­n must ªº¤ä´©

ÁÙ¦³¶}ÀY´£¨ìªº¥ÃºüÀx¦s¡A¸ê®Æ¬O«Ê¸Ëªº¡A¥u¦³Ãþ§O¦Û¤v¤~¯à¦s
¨ú¡A¨C¼hÃþ§Oªº³£±o¹ê§@¤@­ÓµêÀÀ¨ç¼Æ¡A³o­Ó¤]¶·­n must ªº¤ä´©
§@ªÌ : cxxlman(CxxlMan) C++Àu¨q¦n¤â¶K¤å¶W¹L1000«h
[ ¶K¤å 1036 | ¤H®ð 3227 | µû»ù 1260 | µû»ù/¶K¤å 1.22 | °e¥Xµû»ù 27 ¦¸ ] 
[ µ¹­ÓÆg ]  [ µ¹­ÓÆg ]  [ ¦^À³¥»¤å ]  [ µoªí·s¤å ]  [ ¦^¤W­¶ ] [ ¦^°Q½×°Ï¦Cªí ] [ ¦^ª¾ÃѤJ¤f ]
2017/8/1 ¤U¤È 08:05:25

>©Ò¥H°²¦p¯à¨Ï¥Î¦r¦ê¨Ó new object, ¤]¤£»Ý­n¦³ must ¤F, ¬O§a ?

¬O¥H¤U³o¼Ë¶Ü¡AÁÙ¤£¬O¤@¼Ë

class Prototype
{
public:
  Prototype() {}
  virtual ~Prototype() {}

  // ¤]¶·­n¨C¼h¹ê§@Ãþ§O¹ê§@
  std::string GetName() = 0;

};

§@ªÌ : cheg(cheg)
[ ¶K¤å 99 | ¤H®ð 125 | µû»ù 410 | µû»ù/¶K¤å 4.14 | °e¥Xµû»ù 24 ¦¸ ] 
[ µ¹­ÓÆg ]  [ µ¹­ÓÆg ]  [ ¦^À³¥»¤å ]  [ µoªí·s¤å ]  [ ¦^¤W­¶ ] [ ¦^°Q½×°Ï¦Cªí ] [ ¦^ª¾ÃѤJ¤f ]
2017/8/1 ¤U¤È 08:51:08
>¥H¤W­±§Ú¶Kªº¨Ò¤l¨Ó»¡¡APrototype ¥u¬O¤@­Óª«¥óªº¥Nªí¡A¤£¯à°µ¤°»ò
>¨Æ¡A¶·­n°t¦X³X°ÝªÌ¼Ò¦¡(Visitor ½Ð¤Wºô¬d¬Ý)¨Ó¥Î¡A©Ò¥H Prototype
>­×§ï¥H¤U
>
>class Prototype
>{
>public:
> Prototype() {}
> virtual ~Prototype() {}
>
> // ¤]¶·­n¨C¼h¹ê§@Ãþ§O¹ê§@
> void Accept(Visitor *v) = 0;
>
> // ¨ú±o©M¹êÅ骫¥ó¬Û¦Pªºª«¥ó
> virtual Prototype *Clone() = 0;
>};
>
>¨º­Ó Accept() ¤]¶·­n must ªº¤ä´©
>
>ÁÙ¦³¶}ÀY´£¨ìªº¥ÃºüÀx¦s¡A¸ê®Æ¬O«Ê¸Ëªº¡A¥u¦³Ãþ§O¦Û¤v¤~¯à¦s
>¨ú¡A¨C¼hÃþ§Oªº³£±o¹ê§@¤@­ÓµêÀÀ¨ç¼Æ¡A³o­Ó¤]¶·­n must ªº¤ä´©
>

Visitor Pattern: https://en.wikipedia.org/wiki/Visitor_pattern

·s¼W visitor ¨Ó´À element °ÊºA·s¼W¨ç¼Æ
¦ý¬O¹ï©ó accept() ªº¹ê§@¨Ó»¡¬O©T©wªº¡A¬O
±Ä¥Î double-dispatch §âª«¥ó«¬ºA¸ÑªR¥X¨Ó
Åý visitor¥i¥H¹ê²{·sªººtºâªk

¦p¦¹¬Ý¨Ó¡A¬O§_¯uªº¨º»ò»Ý­n must ©O¡H
§Y¨ÏÄ~©Ó¨ì²Ä¤G¼h¡A¥¦¤@¼Ë¥u­n visitor.accept(this)
¤£¹L¤£ºÞ«ç»ò»¡ must ÁÙ¬O¥i¥H°_¨ì¤@­Ó´£¿ôªº§@¥Î
Åý¹ê§@ªÌ¦h¬Ý¤@²´

§Ú·|ı±o Clone «Ü¦³¥Î¡A¬O¦]¬°§Y¨Ï¥¦¤£·s¼W¸ê®Æ
§A·|Ä~©Ó¤]¤@©w·|§ï¼g¨ç¼Æ¤º®e¡A¦pªG new ¿ùª«¥ó
§Y¨Ï data ¤£·|¦³¿ù¡A¹w´Áªº behavior ¤]¨«¼Ë¤F¡A
©Ò¥H¤£¯à²£¥Í¿ù»~¡A¤~¦P·N¹ï Prototype º¡¦³¥Îªº
  
  

§@ªÌ : cxxlman(CxxlMan) C++Àu¨q¦n¤â¶K¤å¶W¹L1000«h
[ ¶K¤å 1036 | ¤H®ð 3227 | µû»ù 1260 | µû»ù/¶K¤å 1.22 | °e¥Xµû»ù 27 ¦¸ ] 
[ µ¹­ÓÆg ]  [ µ¹­ÓÆg ]  [ ¦^À³¥»¤å ]  [ µoªí·s¤å ]  [ ¦^¤W­¶ ] [ ¦^°Q½×°Ï¦Cªí ] [ ¦^ª¾ÃѤJ¤f ]
2017/8/1 ¤U¤È 09:22:07

>§Y¨ÏÄ~©Ó¨ì²Ä¤G¼h¡A¥¦¤@¼Ë¥u­n visitor.accept(this)


§A¥²¶·­n°²³]¨C¤@¼hÃþ§Oªº this ³£¤£¤@¼Ë¡A©Ò¥H¨C¤@¼h³£»Ý­n¹ê§@
§@ªÌ : cheg(cheg)
[ ¶K¤å 99 | ¤H®ð 125 | µû»ù 410 | µû»ù/¶K¤å 4.14 | °e¥Xµû»ù 24 ¦¸ ] 
[ µ¹­ÓÆg ]  [ µ¹­ÓÆg ]  [ ¦^À³¥»¤å ]  [ µoªí·s¤å ]  [ ¦^¤W­¶ ] [ ¦^°Q½×°Ï¦Cªí ] [ ¦^ª¾ÃѤJ¤f ]
2017/8/1 ¤U¤È 09:54:41
>§A¥²¶·­n°²³]¨C¤@¼hÃþ§Oªº this ³£¤£¤@¼Ë¡A©Ò¥H¨C¤@¼h³£»Ý­n¹ê§@

¨C¤@¼h¬O¤£¤@¼Ë§r¡A¦ý¬O Visitor.visit(this) ¤§«á´N·|¸ÑªR¥X¨Ó¤F

Visitor ­n¹ê§@¦UºØªº visit(XxxPrototype) ³o¼Ë¤~¯àÂX¥Rºtºâªk¡A¤@­Ó Visitor ¹ïÀ³¤@­Óºtºâªk

¨C¤@¼h³£­n¹ê§@ visitor.visit(this)

¦pªG must ªº¸Ü¡A§Y¨Ï¹ê§@¤º®e¤@¼Ë¡AÁÙ±o super.accept(visitor) ¤@¤U¡A³o¬O¦h¾lªº

·íµM¡A¦pªG¦³ composite Prototype ªº¸Ü¡A¥¦ªº accept ªÖ©w¤£¤@¼Ë¡A¹³ wiki ¤¤Á|¨Òªº

¦³ must ªº¸Ü¥i¥H´£¿ô¤@¤U¥¦¡A­n§â¥¦¼g¹ï¡A¦ý§Úı±o composite element ¥i¯àª½±µÄ~©Ó element ¤ñ¸ûª½±µ¤@ÂI
 
  
§@ªÌ : ccl0504(¤â°Êµ{¦¡²£¥Í¾¹) ¶K¤å¶W¹L200«h
[ ¶K¤å 450 | ¤H®ð 211 | µû»ù 930 | µû»ù/¶K¤å 2.07 | °e¥Xµû»ù 2 ¦¸ ] 
[ µ¹­ÓÆg ]  [ µ¹­ÓÆg ]  [ ¦^À³¥»¤å ]  [ µoªí·s¤å ]  [ ¦^¤W­¶ ] [ ¦^°Q½×°Ï¦Cªí ] [ ¦^ª¾ÃѤJ¤f ]
2017/8/1 ¤U¤È 11:17:24

>
>>©Ò¥H°²¦p¯à¨Ï¥Î¦r¦ê¨Ó new object, ¤]¤£»Ý­n¦³ must ¤F, ¬O§a ?
>
>¬O¥H¤U³o¼Ë¶Ü¡AÁÙ¤£¬O¤@¼Ë
>
>class Prototype
>{
>public:
> Prototype() {}
> virtual ~Prototype() {}
>
> // ¤]¶·­n¨C¼h¹ê§@Ãþ§O¹ê§@
> std::string GetName() = 0;
>
>};

§Ú»¡ªº¬O¹³³o¼Ë¤lªº : obj = new("Prototype");
C++ ¨S¦³ª½±µ support, ¤£¹L¦³¥]¸Ë¹Lªº

// ConsoleApplication1.cpp : Defines the entry point for the console application.
//

#include "stdafx.h"
#include <map>

class Base
{
public:
virtual ~Base() {}

virtual bool Get() = 0;
};

class DerivedA : public Base
{
public:
bool Get()
{
return true;
}
};

class DerivedB : public Base
{
public:
bool Get()
{
return false;
}
};

template <class T>
class Creator
{
public:
virtual ~Creator(){}
virtual T* Create() = 0;
};

template <class DerivedType, class BaseType>
class DerivedCreator : public Creator<BaseType>
{
public:
BaseType* Create()
{
return new DerivedType;
}
};

template <class T, class Key>
class Factory
{
public:
void Register(Key Id, Creator<T>* Fn)
{
FunctionMap[Id] = Fn;
}

T* Create(Key Id)
{
return functionMap[Id]->Create();
}

~Factory()
{
std::map<Key, Creator<T>*>::iterator i = functionMap.begin();
while (i != functionMap.end())
{
delete (*i).second;
++i;
}
}
private:
std::map<Key, Creator<T>*> functionMap;
};

int _tmain(int argc, _TCHAR* argv[])
{
//Register
Factory<Base, char*> temp;
temp.Register("DA", (Creator<Base>*)new DerivedCreator<DerivedA,Base>);
temp.Register("DB", (Creator<Base>*)new DerivedCreator<DerivedB,Base>);

//Pointer to base interface
Base* pBase = 0;

//Create and call
pBase = temp.Create("DA");
printf("DerivedA %u\n", pBase->Get());
delete pBase;

//Create and call
pBase = temp.Create("DB");
printf("DerivedB %u\n", pBase->Get());
delete pBase;

return 0;
}


§@ªÌ : cxxlman(CxxlMan) C++Àu¨q¦n¤â¶K¤å¶W¹L1000«h
[ ¶K¤å 1036 | ¤H®ð 3227 | µû»ù 1260 | µû»ù/¶K¤å 1.22 | °e¥Xµû»ù 27 ¦¸ ] 
[ µ¹­ÓÆg ]  [ µ¹­ÓÆg ]  [ ¦^À³¥»¤å ]  [ µoªí·s¤å ]  [ ¦^¤W­¶ ] [ ¦^°Q½×°Ï¦Cªí ] [ ¦^ª¾ÃѤJ¤f ]
2017/8/2 ¤W¤È 11:47:03
>¦pªG must ªº¸Ü¡A§Y¨Ï¹ê§@¤º®e¤@¼Ë¡AÁÙ±o super.accept(visitor) ¤@¤U¡A³o¬O¦h¾lªº

¤£²M·¡§A³o¥yªº·N«ä¡A§Úª½±µ¼g¥X¨Ò¤l¦n¤F

#include <iostream>

using namespace std;

class A;
class B;
class B2;
class C;

class Visitor
{
public:
  Visitor(){}
  ~Visitor(){}

  void Visit(A *a)
  {
    cout << "this is A" << endl;
  }

  void Visit(B *b)
  {
    cout << "this is B" << endl;
  }

  void Visit(B2 *b2)
  {
    cout << "this is B2" << endl;
  }

};

class Prototype
{
public:
  Prototype() {}
  virtual ~Prototype() {}

  // ¤]¶·­n¨C¼h¹ê§@Ãþ§O¹ê§@
  virtual void Accept(Visitor *v) = 0;

  // ¨ú±o©M¹êÅ骫¥ó¬Û¦Pªºª«¥ó
  virtual Prototype *Clone() = 0;
};

class A :public Prototype
{
public:
  A() {}
  virtual ~A() {}

  virtual void Accept(Visitor *v)
  {
    v->Visit(this);
  }

  virtual Prototype *Clone()
  {
    return new A;
  }
};


class B :public A
{
public:
  B() {}
  virtual ~B() {}
};

class B2 :public A
{
public:
  B2() {}
  virtual ~B2() {}

  virtual void Accept(Visitor *v)
  {
    A::Accept(v); // Äø¨Æ
  }

  virtual Prototype *Clone()
  {
    return new A; // Äø¨Æ
  }
};

class C :public A
{
public:
  C() {}
  virtual ~C() {}

  virtual void Accept(Visitor *v)
  {
    v->Visit(this);
  }

  virtual Prototype *Clone()
  {
    return new C;
  }
};

int main()
{
  Visitor v;

  Prototype *B_Obj = new B;
  Prototype *C_Obj = new C;

  B_Obj->Accept(&v); // "this is A"
  C_Obj->Accept(&v); // "this is A"

  return 0;
}

¦]¨S¦³ must¡A©Ò¥H class B ¨S¦³³Q±j¨î¹ê§@ Accept()

class C ÁöµM¦³¹ê§@ Accept()¡A¦ý class Visitor ¤¤¨S¬°
¥¦·Ç³Æ Visit()


§@ªÌ : cxxlman(CxxlMan) C++Àu¨q¦n¤â¶K¤å¶W¹L1000«h
[ ¶K¤å 1036 | ¤H®ð 3227 | µû»ù 1260 | µû»ù/¶K¤å 1.22 | °e¥Xµû»ù 27 ¦¸ ] 
[ µ¹­ÓÆg ]  [ µ¹­ÓÆg ]  [ ¦^À³¥»¤å ]  [ µoªí·s¤å ]  [ ¦^¤W­¶ ] [ ¦^°Q½×°Ï¦Cªí ] [ ¦^ª¾ÃѤJ¤f ]
2017/8/2 ¤W¤È 11:53:10
>
>§Ú»¡ªº¬O¹³³o¼Ë¤lªº : obj = new('Prototype');
>C++ ¨S¦³ª½±µ support, ¤£¹L¦³¥]¸Ë¹Lªº

§A¼gªºµ{¦¡½X¥u¬O¦b«Øºcª«¥ó¡A©M Clone ¨S¦³¤°»òÃö¦è

¤£¹L­Y§â Factory ©ñ¤J Base ¤¤¡AClone ®É´N¥Î³o
­Ó Factory¡A³o­Ë¤]¬O¤@­Ó¤èªk

§@ªÌ : cheg(cheg)
[ ¶K¤å 99 | ¤H®ð 125 | µû»ù 410 | µû»ù/¶K¤å 4.14 | °e¥Xµû»ù 24 ¦¸ ] 
[ µ¹­ÓÆg ]  [ µ¹­ÓÆg ]  [ ¦^À³¥»¤å ]  [ µoªí·s¤å ]  [ ¦^¤W­¶ ] [ ¦^°Q½×°Ï¦Cªí ] [ ¦^ª¾ÃѤJ¤f ]
2017/8/2 ¤W¤È 11:55:46
¤£¦n·N«ä¡A³oÃä¬O§Ú¨S·Q²M·¡¡A·d¿ù¤F¡A½T¹ê¤£¯à¥Î¤÷Ãþ§Oªº accept
§@ªÌ : ccl0504(¤â°Êµ{¦¡²£¥Í¾¹) ¶K¤å¶W¹L200«h
[ ¶K¤å 450 | ¤H®ð 211 | µû»ù 930 | µû»ù/¶K¤å 2.07 | °e¥Xµû»ù 2 ¦¸ ] 
[ µ¹­ÓÆg ]  [ µ¹­ÓÆg ]  [ ¦^À³¥»¤å ]  [ µoªí·s¤å ]  [ ¦^¤W­¶ ] [ ¦^°Q½×°Ï¦Cªí ] [ ¦^ª¾ÃѤJ¤f ]
¥DÃDµo°_¤Hcxxlmanµù°O¦¹½g¦^À³¬°³Ì¨Î¸Ñµª 2017/8/2 ¤U¤È 08:23:56

>>§Ú»¡ªº¬O¹³³o¼Ë¤lªº : obj = new('Prototype');
>>C++ ¨S¦³ª½±µ support, ¤£¹L¦³¥]¸Ë¹Lªº
>
>§A¼gªºµ{¦¡½X¥u¬O¦b«Øºcª«¥ó¡A©M Clone ¨S¦³¤°»òÃö¦è
>
>¤£¹L­Y§â Factory ©ñ¤J Base ¤¤¡AClone ®É´N¥Î³o
>­Ó Factory¡A³o­Ë¤]¬O¤@­Ó¤èªk

§Ú·Q»¡¦³ÂI¥X¨Ó new object ªº¤è¦¡«á, clone ¤]¥i¥H¤p­×§ï´N±o¥X¨Ó¤F


#include "stdafx.h"
#include <map>

class Base
{
public:
     virtual ~Base() {}

    virtual bool Get() = 0;
    virtual Base *Clone() const = 0;
};

template <typename Dervied>
class Base_CRTP : public Base
{
public:
    virtual Base *Clone() const
    {
     return new Dervied(static_cast<Dervied const &>(*this));
    }
};

#define DERIVE_BASE_CRTP(Type) class Type: public Base_CRTP<Type>

//class DerivedA : public Base
DERIVE_BASE_CRTP(DerivedA)
{
public:
    bool Get()
    {
     return true;
    }
};

DERIVE_BASE_CRTP(DerivedB)
{
public:
    bool Get()
    {
     return false;
    }
};

template <class T>
class Creator
{
public:
    virtual ~Creator(){}
    virtual T* Create() = 0;
};

template <class DerivedType, class BaseType>
class DerivedCreator : public Creator<BaseType>
{
public:
    BaseType* Create()
    {
     return new DerivedType;
    }
};

template <class T, class Key>
class Factory
{
public:
    void Register(Key Id, Creator<T>* Fn)
    {
     functionMap[Id] = Fn;
    }

    T* Create(Key Id)
    {
     return functionMap[Id]->Create();
    }

    ~Factory()
    {
     std::map<Key, Creator<T>*>::iterator i = functionMap.begin();
     while (i != functionMap.end())
     {
     delete (*i).second;
     ++i;
     }
     }
private:
    std::map<Key, Creator<T>*> functionMap;
};

int _tmain(int argc, _TCHAR* argv[])
{
    //Register
    Factory<Base, char*> temp;
    temp.Register("DA", (Creator<Base>*)new DerivedCreator<DerivedA,Base>);
    temp.Register("DB", (Creator<Base>*)new DerivedCreator<DerivedB,Base>);

    //Pointer to base interface
    Base* pBase = 0;
    Base* pBase1 = 0;
    Base* pBase2 = 0;

    //Create and call
    pBase = temp.Create("DA");
    printf("DerivedA %u\n", pBase->Get());
    pBase1 = pBase->Clone();
    delete pBase;

    //Create and call
    pBase = temp.Create("DB");
    printf("DerivedB %u\n", pBase->Get());
    pBase2 = pBase->Clone();
    delete pBase;

    printf("Base1 = DerivedA %u\n", pBase1->Get());
    printf("Base2 = DerivedB %u\n", pBase2->Get());

    return 0;
}



§@ªÌ : cxxlman(CxxlMan) C++Àu¨q¦n¤â¶K¤å¶W¹L1000«h
[ ¶K¤å 1036 | ¤H®ð 3227 | µû»ù 1260 | µû»ù/¶K¤å 1.22 | °e¥Xµû»ù 27 ¦¸ ] 
[ µ¹­ÓÆg ]  [ µ¹­ÓÆg ]  [ ¦^À³¥»¤å ]  [ µoªí·s¤å ]  [ ¦^¤W­¶ ] [ ¦^°Q½×°Ï¦Cªí ] [ ¦^ª¾ÃѤJ¤f ]
2017/8/3 ¤U¤È 12:11:03
·PÁ ccl0504 ªº½d¨Ò¡AÅý§Ú¦³¤FÆF·P¡A¦ý´N¬O¦³¨Ç½ÆÂø¡A­n¬O¯à¦³ must ªº¤ä´©­n²³æ¦h¤F¡A
¥H¤U¬O¦³±j¨î¹ê§@¾÷¨îªº Prototype

#include <iostream>
#include <sstream>

using namespace std;

class A;
class B;
class C;
class D;

class Visitor
{
public:
  Visitor(){}
  ~Visitor(){}

  void Visit(A *a);
  void Visit(B *b);
  void Visit(C *c);
  void Visit(D *d);
};

class Prototype
{
public:
  Prototype() {}
  virtual ~Prototype() {}

  // ¥ÃÄòÀx¦s
  virtual void Save(ostream &save) = 0;
  virtual void Load(istream &load) = 0;

  // ±µ¦¬³X°ÝªÌª«¥ó¡A±N¦Û¤v¶Çµ¹³X°ÝªÌ
  virtual void Accept(Visitor *v) = 0;

  // ¨ú±o©M¹êÅ骫¥ó¬Û¦Pªºª«¥ó
  virtual Prototype *Clone() = 0;
};

// Prototype ©µ¦ùÃþ§O­nÄ~©Óªº³Ì¤W¼hÃþ§O
class Prototype_ROOT : virtual public Prototype
{
public:
  Prototype_ROOT() {}
  ~Prototype_ROOT() {}
};

// ¬°¤F¥i¥H±j¨î¹ê§@¤Î¦h­«Ä~©Ó
template <typename classification>
class Prototype_CRTP : virtual public Prototype
{
public:
  Prototype_CRTP(){}
  ~Prototype_CRTP(){}

  // ¥ÃÄòÀx¦s
  virtual void Save(ostream &save) override = 0;
  virtual void Load(istream &load) override = 0;

  // ±µ¦¬³X°ÝªÌª«¥ó¡A±N¦Û¤v¶Çµ¹³X°ÝªÌ
  virtual void Accept(Visitor *v) override = 0;

  // ¨ú±o©M¹êÅ骫¥ó¬Û¦Pªºª«¥ó
  virtual Prototype *Clone() override = 0;
};

#define PROTOTYPE_BASE_CRTP(Base) Base,public Prototype_CRTP<Base>

// ³æ¼hÄ~©Ó
class A :public PROTOTYPE_BASE_CRTP(Prototype_ROOT)
{
  // ±µ¦¬³X°ÝªÌª«¥ó¡A±N¦Û¤v¶Çµ¹³X°ÝªÌ
  virtual void Accept(Visitor *v) override
  {
    v->Visit(this);
  }

  // ¨ú±o©M¹êÅ骫¥ó¬Û¦Pªºª«¥ó
  virtual Prototype *Clone() override
  {
    return new A(*this);
  }

  // ¨­°ª
  int m_Height;

protected:
  // ¥ÃÄòÀx¦s
  virtual void Save(ostream &save) override
  {
    save << m_Height << ' ';
  }
  virtual void Load(istream &load) override
  {
    load >> m_Height;
  }

public:
  A(int Height)
  {
    m_Height = Height;
  }
  A(const A &Src)
  {
    m_Height = Src.m_Height;
  }
  virtual ~A() {}

  int GetHeight() const
  {
    return m_Height;
  }
};
§@ªÌ : cxxlman(CxxlMan) C++Àu¨q¦n¤â¶K¤å¶W¹L1000«h
[ ¶K¤å 1036 | ¤H®ð 3227 | µû»ù 1260 | µû»ù/¶K¤å 1.22 | °e¥Xµû»ù 27 ¦¸ ] 
[ µ¹­ÓÆg ]  [ µ¹­ÓÆg ]  [ ¦^À³¥»¤å ]  [ µoªí·s¤å ]  [ ¦^¤W­¶ ] [ ¦^°Q½×°Ï¦Cªí ] [ ¦^ª¾ÃѤJ¤f ]
2017/8/3 ¤U¤È 12:11:52
// ³æ¼hÄ~©Ó
class B :public PROTOTYPE_BASE_CRTP(Prototype_ROOT)
{
  // ±µ¦¬³X°ÝªÌª«¥ó¡A±N¦Û¤v¶Çµ¹³X°ÝªÌ
  virtual void Accept(Visitor *v) override
  {
    v->Visit(this);
  }

  // ¨ú±o©M¹êÅ骫¥ó¬Û¦Pªºª«¥ó
  virtual Prototype *Clone() override
  {
    return new B(*this);
  }

  // ¨­°ª
  int m_Weight;

protected:
  // ¥ÃÄòÀx¦s
  virtual void Save(ostream &save) override
  {
    save << m_Weight << ' ';
  }
  virtual void Load(istream &load) override
  {
    load >> m_Weight;
  }

public:
  B(int Weight)
  {
    m_Weight = Weight;
  }
  B(const B &Src)
  {
    m_Weight = Src.m_Weight;
  }
  virtual ~B() {}

  int GetWeight() const
  {
    return m_Weight;
  }
};

// ¦h¼h³æ¤@Ä~©Ó
class C :public PROTOTYPE_BASE_CRTP(A)
{
  // ±µ¦¬³X°ÝªÌª«¥ó¡A±N¦Û¤v¶Çµ¹³X°ÝªÌ
  virtual void Accept(Visitor *v) override
  {
    v->Visit(this);
  }

  // ¨ú±o©M¹êÅ骫¥ó¬Û¦Pªºª«¥ó
  virtual Prototype *Clone() override
  {
    return new C(*this);
  }

  // ¦~¬ö
  int m_Age;

protected:
  // ¥ÃÄòÀx¦s
  virtual void Save(ostream &save) override
  {
    A::Save(save);
    save << m_Age << ' ';
  }
  virtual void Load(istream &load) override
  {
    A::Load(load);
    load >> m_Age;
  }

public:
  C(int Age, int Height)
    :A(Height)
  {
    m_Age = Age;
  }
  C(const C &Src)
    :A(Src)
  {
    m_Age = Src.m_Age;
  }
  virtual ~C() {}

  int GetAge() const
  {
    return m_Age;
  }
};


§@ªÌ : cxxlman(CxxlMan) C++Àu¨q¦n¤â¶K¤å¶W¹L1000«h
[ ¶K¤å 1036 | ¤H®ð 3227 | µû»ù 1260 | µû»ù/¶K¤å 1.22 | °e¥Xµû»ù 27 ¦¸ ] 
[ µ¹­ÓÆg ]  [ µ¹­ÓÆg ]  [ ¦^À³¥»¤å ]  [ µoªí·s¤å ]  [ ¦^¤W­¶ ] [ ¦^°Q½×°Ï¦Cªí ] [ ¦^ª¾ÃѤJ¤f ]
2017/8/3 ¤U¤È 12:13:07
// ¦h­«Ä~©Ó
class D :public PROTOTYPE_BASE_CRTP(A), public PROTOTYPE_BASE_CRTP(B)
{
  // ±µ¦¬³X°ÝªÌª«¥ó¡A±N¦Û¤v¶Çµ¹³X°ÝªÌ
  virtual void Accept(Visitor *v) override
  {
    v->Visit(this);
  }

  // ¨ú±o©M¹êÅ骫¥ó¬Û¦Pªºª«¥ó
  virtual Prototype *Clone() override
  {
    return new D(*this);
  }

  // ¦~¬ö
  int m_Age;

protected:
  // ¥ÃÄòÀx¦s
  virtual void Save(ostream &save) override
  {
    A::Save(save);
    B::Save(save);
    save << m_Age << ' ';
  }
  virtual void Load(istream &load) override
  {
    A::Load(load);
    B::Load(load);
    load >> m_Age;
  }

public:
  D(int Age, int Height, int Weight)
    :A(Height), B(Weight)
  {
    m_Age = Age;
  }
  D(const D &Src)
    :A(Src), B(Src)
  {
    m_Age = Src.m_Age;
  }
  virtual ~D() {}

  int GetAge() const
  {
    return m_Age;
  }
};


void Visitor::Visit(A *a)
{
  cout << "§Ú¬O class A\n"
    << "¨­°ª " << a->GetHeight() << endl << endl;
}

void Visitor::Visit(B *b)
{
  cout << "§Ú¬O class B\n"
    << "Åé­« " << b->GetWeight() << endl << endl;
}

void Visitor::Visit(C *c)
{
  cout << "§Ú¬O class C\n"
    << "¦~¬ö " << c->GetAge() << '\n'
    << "¨­°ª " << c->GetHeight() << endl << endl;
}

void Visitor::Visit(D *d)
{
  cout << "§Ú¬O class D\n"
    << "¦~¬ö " << d->GetAge() << '\n'
    << "¨­°ª " << d->GetHeight() << '\n'
    << "Åé­« " << d->GetWeight() << endl << endl;
}

int main()
{
  Visitor v;

  Prototype *A_Obj = new A(180);
  Prototype *B_Obj = new B(100);
  Prototype *C_Obj = new C(50,170);
  Prototype *D_Obj = new D(40, 175, 98);

  A_Obj->Accept(&v);
  B_Obj->Accept(&v);
  C_Obj->Accept(&v);
  D_Obj->Accept(&v);

  Prototype *D_Obj2 = D_Obj;
  cout << "½Æ»s¤H... \n";
  D_Obj2->Accept(&v);

  Prototype *Big_Obj = new D(2000, 5000, 3000);
  stringstream persistent;
  Big_Obj->Save(persistent);
  D_Obj2->Load(persistent);
  cout << "°½¤Ñ´«¤é... \n";
  D_Obj2->Accept(&v);

  return 0;
}
§@ªÌ : cxxlman(CxxlMan) C++Àu¨q¦n¤â¶K¤å¶W¹L1000«h
[ ¶K¤å 1036 | ¤H®ð 3227 | µû»ù 1260 | µû»ù/¶K¤å 1.22 | °e¥Xµû»ù 27 ¦¸ ] 
[ µ¹­ÓÆg ]  [ µ¹­ÓÆg ]  [ ¦^À³¥»¤å ]  [ µoªí·s¤å ]  [ ¦^¤W­¶ ] [ ¦^°Q½×°Ï¦Cªí ] [ ¦^ª¾ÃѤJ¤f ]
2017/8/3 ¤U¤È 12:14:57
°õ¦æµ²ªG¡G

§Ú¬O class A
¨­°ª 180

§Ú¬O class B
Åé­« 100

§Ú¬O class C
¦~¬ö 50
¨­°ª 170

§Ú¬O class D
¦~¬ö 40
¨­°ª 175
Åé­« 98

½Æ»s¤H...
§Ú¬O class D
¦~¬ö 40
¨­°ª 175
Åé­« 98

°½¤Ñ´«¤é...
§Ú¬O class D
¦~¬ö 2000
¨­°ª 5000
Åé­« 3000

§@ªÌ : cxxlman(CxxlMan) C++Àu¨q¦n¤â¶K¤å¶W¹L1000«h
[ ¶K¤å 1036 | ¤H®ð 3227 | µû»ù 1260 | µû»ù/¶K¤å 1.22 | °e¥Xµû»ù 27 ¦¸ ] 
[ µ¹­ÓÆg ]  [ µ¹­ÓÆg ]  [ ¦^À³¥»¤å ]  [ µoªí·s¤å ]  [ ¦^¤W­¶ ] [ ¦^°Q½×°Ï¦Cªí ] [ ¦^ª¾ÃѤJ¤f ]
2017/8/3 ¤U¤È 12:24:18

>
>>>§Ú»¡ªº¬O¹³³o¼Ë¤lªº : obj = new('Prototype');
>>>C++ ¨S¦³ª½±µ support, ¤£¹L¦³¥]¸Ë¹Lªº
>>
>>§A¼gªºµ{¦¡½X¥u¬O¦b«Øºcª«¥ó¡A©M Clone ¨S¦³¤°»òÃö¦è
>>
>>¤£¹L­Y§â Factory ©ñ¤J Base ¤¤¡AClone ®É´N¥Î³o
>>­Ó Factory¡A³o­Ë¤]¬O¤@­Ó¤èªk
>
>§Ú·Q»¡¦³ÂI¥X¨Ó new object ªº¤è¦¡«á, clone ¤]¥i¥H¤p­×§ï´N±o¥X¨Ó¤F

§Aªº¤èªk¨Ã¤£¬O¬°¦h¼h±j¨î¹ê§@¡A¤£¹L§Aµ¹§Ú¤FÆF·P¡AÅý§Ú°µ¥X¨Ó¤F¡A·PÁÂ
§@ªÌ : cxxlman(CxxlMan) C++Àu¨q¦n¤â¶K¤å¶W¹L1000«h
[ ¶K¤å 1036 | ¤H®ð 3227 | µû»ù 1260 | µû»ù/¶K¤å 1.22 | °e¥Xµû»ù 27 ¦¸ ] 
[ µ¹­ÓÆg ]  [ µ¹­ÓÆg ]  [ ¦^À³¥»¤å ]  [ µoªí·s¤å ]  [ ¦^¤W­¶ ] [ ¦^°Q½×°Ï¦Cªí ] [ ¦^ª¾ÃѤJ¤f ]
2017/8/3 ¤U¤È 01:20:02
³o¸Ì¼g¿ù¤F¡A­n§ï¤@¤U

> Prototype *D_Obj2 = D_Obj;
> cout << '½Æ»s¤H...\n';
> D_Obj2->Accept(&v);

  Prototype *D_Obj2 = D_Obj->Clone();
  cout << "½Æ»s¤H... \n";
  D_Obj2->Accept(&v);

§@ªÌ : ccl0504(¤â°Êµ{¦¡²£¥Í¾¹) ¶K¤å¶W¹L200«h
[ ¶K¤å 450 | ¤H®ð 211 | µû»ù 930 | µû»ù/¶K¤å 2.07 | °e¥Xµû»ù 2 ¦¸ ] 
[ µ¹­ÓÆg ]  [ µ¹­ÓÆg ]  [ ¦^À³¥»¤å ]  [ µoªí·s¤å ]  [ ¦^¤W­¶ ] [ ¦^°Q½×°Ï¦Cªí ] [ ¦^ª¾ÃѤJ¤f ]
2017/8/3 ¤U¤È 03:15:25

¦³À°¨ì´N¦n.
¦³®É­Ô¥i¯à¥d¦b¬Y­Ó°ÝÃDÂI¤W, ¦ýÂà­Ó¤è¦V»¡¤£©wÁÙ¦³¨ä¥L solution.


§@ªÌ : cxxlman(CxxlMan) C++Àu¨q¦n¤â¶K¤å¶W¹L1000«h
[ ¶K¤å 1036 | ¤H®ð 3227 | µû»ù 1260 | µû»ù/¶K¤å 1.22 | °e¥Xµû»ù 27 ¦¸ ] 
[ µ¹­ÓÆg ]  [ µ¹­ÓÆg ]  [ ¦^À³¥»¤å ]  [ µoªí·s¤å ]  [ ¦^¤W­¶ ] [ ¦^°Q½×°Ï¦Cªí ] [ ¦^ª¾ÃѤJ¤f ]
2017/8/4 ¤U¤È 06:21:52

­×§ï¥D­n¬[ºc¦p¤U¡A­×§ï«á¥iÁ×§K Prototype ª½±µ³Q𦆻©Ó

template <typename classification>
class Prototype_CRTP;

class Prototype_ROOT;

class Prototype
{
  // Constructor ©ñ³o¸Ì¬°¤F¤£³Qª½±µÄ~©Ó
  Prototype() {}
public:
  virtual ~Prototype() {}

  // ¥ÃÄòÀx¦s
  virtual void Save(ostream &save) = 0;
  virtual void Load(istream &load) = 0;

  // ±µ¦¬³X°ÝªÌª«¥ó¡A±N¦Û¤v¶Çµ¹³X°ÝªÌ
  virtual void Accept(Visitor *v) = 0;

  // ¨ú±o©M¹êÅ骫¥ó¬Û¦Pªºª«¥ó
  virtual Prototype *Clone() = 0;
  
  friend class Prototype_ROOT;
};

// Prototype ©µ¦ùÃþ§O­nÄ~©Óªº³Ì¤W¼hÃþ§O
class Prototype_ROOT
{
  // µ¹ class Prototype_CRTP<> ¥Îªº
  // ¥H¨ú±oÄ~©Ó Prototype ªºÅv¤O
  class Prototype_R :public Prototype
  {
  public:
    Prototype_R() {}
    ~Prototype_R() {}
  };

public:

  Prototype_ROOT() {}
  ~Prototype_ROOT() {}

  template <typename classification>
  friend class Prototype_CRTP;
};

// ¬°¤F¥i¥H±j¨î¹ê§@¤Î¦h­«Ä~©Ó
template <typename classification>
class Prototype_CRTP : virtual public Prototype_ROOT::Prototype_R
{
public:
  Prototype_CRTP() {}
  ~Prototype_CRTP(){}
};

#define PROTOTYPE_BASE_CRTP(Base) Base,public Prototype_CRTP<Base>
§@ªÌ : cxxlman(CxxlMan) C++Àu¨q¦n¤â¶K¤å¶W¹L1000«h
[ ¶K¤å 1036 | ¤H®ð 3227 | µû»ù 1260 | µû»ù/¶K¤å 1.22 | °e¥Xµû»ù 27 ¦¸ ] 
[ µ¹­ÓÆg ]  [ µ¹­ÓÆg ]  [ ¦^À³¥»¤å ]  [ µoªí·s¤å ]  [ ¦^¤W­¶ ] [ ¦^°Q½×°Ï¦Cªí ] [ ¦^ª¾ÃѤJ¤f ]
2017/8/5 ¤W¤È 06:52:47

§Ú¥Ç¶Ì¤F¡APrototype_CRTP ­n¦A«Å§i¤@¦¸¯ÂµêÀÀ¨ç¼Æ¤£¯à¬Ù


// ¬°¤F¥i¥H±j¨î¹ê§@¤Î¦h­«Ä~©Ó
template <typename classification>
class Prototype_CRTP : virtual public Prototype_ROOT::Prototype_R
{
protected:
  // ¥ÃÄòÀx¦s
  virtual void Save(ostream &save) override = 0;
  virtual void Load(istream &load) override = 0;

  // ±µ¦¬³X°ÝªÌª«¥ó¡A±N¦Û¤v¶Çµ¹³X°ÝªÌ
  virtual void Accept(Visitor *v) override = 0;

  // ¨ú±o©M¹êÅ骫¥ó¬Û¦Pªºª«¥ó
  virtual Prototype *Clone() override = 0;

public:
  Prototype_CRTP() {}
  ~Prototype_CRTP(){}
};
§@ªÌ : sunyear(coco) VC++¨ô¶V±M®aC++³»¦y°ª¤â¶K¤å¶W¹L2000«h
[ ¶K¤å 2421 | ¤H®ð 1485 | µû»ù 6060 | µû»ù/¶K¤å 2.5 | °e¥Xµû»ù 5 ¦¸ ] 
[ µ¹­ÓÆg ]  [ µ¹­ÓÆg ]  [ ¦^À³¥»¤å ]  [ µoªí·s¤å ]  [ ¦^¤W­¶ ] [ ¦^°Q½×°Ï¦Cªí ] [ ¦^ª¾ÃѤJ¤f ]
2017/11/5 ¤U¤È 11:32:41
>§Ú»¡ªº must ¬O¬°¤F¥²¶·­n¹ê§@¡B§ï¼gªºµêÀÀ¨ç¼Æ¦Ó¥[ªº¡A¹ï©ó¤£¶·¤@©w­n¹ê§@¡B
>§ï¼gªºµêÀÀ¨ç¼Æµw­n¥[¤W must ¤~»¡¤£­n¹ê§@¡A³o¬Oµ{¦¡­ûªº¿ù¡A¤£­n¥h©Ç must
¦n¤[¨S¨Ó³o¸Ì¤F¡A¤£À³¸Ó»¡¦n¤[¨S¸Iµ{¦¡¤F¡C¬Ý¤F¤@¬Ý¡Aµo²{¦Û¤v¤w¨S¿ìªk±qÀY¬Ý¨ì§À¡C¬Ý¨ì¤@¥b¨SÅé¤O¬Ý¤U¥h¤F¡A©Ò¥H­Y¦^ÂЦ³­«ÂЩΤv¦³°Q½×¹L¡A´N¥ý»¡Án©êºp¡C
¥ý»¡²{¹ê¥@¬É±¡ªp¡A¦Ñª¨¯d¤U¤F¿ò²£µ¹¨à¤l¡A¨ä¤¤¥]¬A¤@àw¨®¡C¦ý¿òÅñ§h©J¨à¤l¡A©Ò¦³ªº¿ò²£³£¥i¥H¦Û¥Ñ¨Ï¥Î³B¤À¡A°ß¿W¨º¤@àw¨®¤l§A¤£¯à¨Ï¥Î©M³B¤À¡C§A¤@©w­n¦Û¦æÁÈ¿ú¶R
¤@½ø¦Û¤vªº¨®¡C
·Q·Q¬Ý¡A³o¦X²z¶Ü?
¨à¤l¥i¯àªº¨âºØ¤ÏÀ³:
1.§Ú¤£¯à¨Ï¥Î©M³B¤À¡A¨ºµ¹§Ú·F¹À¡A§A´N§â¦Û¤v¸Ë¶i¨®¤l¤@°_®I¨ì¤g¸Ìºâ¤F¡C
2.¤£µ¹§Ú¥Î¤]´Nºâ¤F¡A§Ú¤S¤£¶}¨®¡A·F¹À¹G§Ú¤@©w­n¶R¨®?

¦^¨ìC++¥@¬É¡A
(¹ïÀ³)1.­Y¤£µ¹¤lÃþ§O¨Ï¥Î¡A´N«Å§iprivate´N¦n¤F¡C
(¹ïÀ³)2.¬Jµ¹Ä~©Ó´N¤£­n¹w³]¤lÃþ§O¹ïÄ~©ÓªºªF¦è¨Ï¥Î¤è¦¡(®Ú¥»¤£¥Î¡A­×§ï©Î§¹¥þ§ï¼g)¡C

¹ïC¤jÁ|ªºclone¨Ò¤l¡A°òÃþ§O§Æ±æÄ~©ÓªÌ¤@©w­n§ï¼g¦Û¤vªºclone¡C
¦pªG¤lÃþ§OÄ~©Ó³o­Ó°òÃþ§O¡AµM«á¥u¬O¥[¤F¤@­Ó©Mclone§¹¥þµLÃöªº¨ç¦¡¦¨­û¡A¬°¤°»ò­n±j­¢¥¦§ï¼gclone?
§Ú¬Ý¤F¬Ý¡A¹ê¦b¤]¤£¬O­Ó±j­¢¤lÃþ§O¤@©w­n¹ê§@¦Û¤vªºcloneªº¦n²z¥Ñ¡C
§@ªÌ : cxxlman(CxxlMan) C++Àu¨q¦n¤â¶K¤å¶W¹L1000«h
[ ¶K¤å 1036 | ¤H®ð 3227 | µû»ù 1260 | µû»ù/¶K¤å 1.22 | °e¥Xµû»ù 27 ¦¸ ] 
[ µ¹­ÓÆg ]  [ µ¹­ÓÆg ]  [ ¦^À³¥»¤å ]  [ µoªí·s¤å ]  [ ¦^¤W­¶ ] [ ¦^°Q½×°Ï¦Cªí ] [ ¦^ª¾ÃѤJ¤f ]
2017/11/7 ¤U¤È 06:32:44

>¹ïC¤jÁ|ªºclone¨Ò¤l¡A°òÃþ§O§Æ±æÄ~©ÓªÌ¤@©w­n§ï¼g¦Û¤vªºclone¡C
>¦pªG¤lÃþ§OÄ~©Ó³o­Ó°òÃþ§O¡AµM«á¥u¬O¥[¤F¤@­Ó©Mclone§¹¥þµLÃöªº¨ç¦¡¦¨­û¡A¬°¤°»ò­n±j­¢¥¦§ï¼gclone?
>§Ú¬Ý¤F¬Ý¡A¹ê¦b¤]¤£¬O­Ó±j­¢¤lÃþ§O¤@©w­n¹ê§@¦Û¤vªºcloneªº¦n²z¥Ñ¡C

§Ú¥u¬O²³æªí¹F·N«ä¡A¨Ò¤l¤£¬O¼g±o«Ü§¹¥þ¡A§Ú¤w§ï¥Î ¤¶­±Ä~©Ó+²Õ¦X¥N´ÀÄ~©Ó ¸Ñ¨M¤F³o­Ó°ÝÃD¡A°Ñ¦Ò¥H¤U³o¨â½g

http://www.programmer-club.com.tw/ShowSameTitleN/c/46928.html
http://www.programmer-club.com.tw/ShowSameTitleN/c/46930.html
§@ªÌ : sunyear(coco) VC++¨ô¶V±M®aC++³»¦y°ª¤â¶K¤å¶W¹L2000«h
[ ¶K¤å 2421 | ¤H®ð 1485 | µû»ù 6060 | µû»ù/¶K¤å 2.5 | °e¥Xµû»ù 5 ¦¸ ] 
[ µ¹­ÓÆg ]  [ µ¹­ÓÆg ]  [ ¦^À³¥»¤å ]  [ µoªí·s¤å ]  [ ¦^¤W­¶ ] [ ¦^°Q½×°Ï¦Cªí ] [ ¦^ª¾ÃѤJ¤f ]
2017/11/7 ¤U¤È 09:49:30
>§Ú¥u¬O²³æªí¹F·N«ä¡A¨Ò¤l¤£¬O¼g±o«Ü§¹¥þ¡A§Ú¤w§ï¥Î ¤¶­±Ä~©Ó+²Õ¦X¥N´ÀÄ~©Ó ¸Ñ¨M¤F³o­Ó°ÝÃD¡A°Ñ¦Ò¥H¤U³o¨â½g
¥i¤£¥i¥H°µ±o¨ì¨Ã¤£¬O§ÚÃö¤ßªº¡C§Ú¤ñ¸û¬O·Qª¾¹D³o»Ý¨Dªº¦X²z©Ê( ©Î»¡»Ý­n©Ê)¡C
¨Ò¦p§Ú´£ªº¨Ò¤l¡A¤lÃþ§O¥u¥[¤F¤@­Ó¸òcloneµLÃöªº¦¨­û¨ç¦¡¡A¬°¦ó¤@©w­n±j¨î¹ê§@¥t¤@­Óclone¡C
§@ªÌ : cxxlman(CxxlMan) C++Àu¨q¦n¤â¶K¤å¶W¹L1000«h
[ ¶K¤å 1036 | ¤H®ð 3227 | µû»ù 1260 | µû»ù/¶K¤å 1.22 | °e¥Xµû»ù 27 ¦¸ ] 
[ µ¹­ÓÆg ]  [ µ¹­ÓÆg ]  [ ¦^À³¥»¤å ]  [ µoªí·s¤å ]  [ ¦^¤W­¶ ] [ ¦^°Q½×°Ï¦Cªí ] [ ¦^ª¾ÃѤJ¤f ]
2017/11/8 ¤U¤È 02:24:57
À³¸Ó¨S¨º»òÃø²z¸Ñ¡A§Ú¦A¼g­Ó§ó²³æªº¨Ò¤l

#include <iostream>
#include <string>

using namespace std;

class Base
{
public:
¡@virtual Base *Clone()
¡@{
¡@¡@return new Base(*this);
¡@}
};

class Derived1 :public Base
{
¡@string m_Name;
public:
¡@Derived1(const string &Name)
¡@¡@:m_Name(Name)
¡@{
¡@}

¡@Derived1(const Derived1 &Src)
¡@¡@:m_Name(Src.m_Name)
¡@{
¡@}

¡@virtual Base *Clone()
¡@{
¡@¡@return new Derived1(*this);
¡@}

¡@void Show()
¡@{
¡@¡@cout << "I am Derived1. My name is " << m_Name << endl;
¡@}
};

class Derived2 :public Base
{
¡@string m_Name;
public:
¡@Derived2(const string &Name)
¡@¡@:m_Name(Name)
¡@{
¡@}

¡@Derived2(const Derived2 &Src)
¡@¡@:m_Name(Src.m_Name)
¡@{
¡@}

¡@void Show()
¡@{
¡@¡@cout << "I am Derived2. My name is " << m_Name << endl;
¡@}
};

int main()
{
¡@Base *pBase1 = new Derived1("coco");
¡@Base *clone_pBase1 = pBase1->Clone();
¡@Derived1 *pDerived1 = dynamic_cast<Derived1*>(pBase1);
¡@pDerived1->Show(); // I am Derived1. My name is coco
¡@pDerived1 = dynamic_cast<Derived1*>(clone_pBase1);
¡@pDerived1->Show(); // I am Derived1. My name is coco

¡@Base *pBase2 = new Derived2("sunyear");
¡@Base *clone_pBase2 = pBase2->Clone();
¡@Derived2 *pDerived2 = dynamic_cast<Derived2*>(pBase2);
¡@pDerived2->Show(); // I am Derived2. My name is sunyear
¡@pDerived2 = dynamic_cast<Derived2*>(clone_pBase2);
¡@pDerived2->Show(); // ·í±¼

¡@return 0;
}

¤§©Ò¥H·|¥X¿ù¬O¦]¬° C++ ªºµêÀÀ¨ç¼Æ¥u¬OÅý©µ¦ùªÌ"¥i¥H"Âмg¡A©Ò¥H¶·­n¤@­ÓÃöÁä¦r must¡A¥Î¥Hªí¥Ü­Y¦³©µ¦ùªÌ¤@©w­nÂмg
§@ªÌ : cxxlman(CxxlMan) C++Àu¨q¦n¤â¶K¤å¶W¹L1000«h
[ ¶K¤å 1036 | ¤H®ð 3227 | µû»ù 1260 | µû»ù/¶K¤å 1.22 | °e¥Xµû»ù 27 ¦¸ ] 
[ µ¹­ÓÆg ]  [ µ¹­ÓÆg ]  [ ¦^À³¥»¤å ]  [ µoªí·s¤å ]  [ ¦^¤W­¶ ] [ ¦^°Q½×°Ï¦Cªí ] [ ¦^ª¾ÃѤJ¤f ]
2017/11/8 ¤U¤È 02:54:03
¥H¤U¬O§ï¼g¦¨ ¤¶­±Ä~©Ó+²Õ¦X¥N´ÀÄ~©Ó ªºª©¥»

#include <memory>
#include <iostream>
#include <string>

using namespace std;

class IBase
{
public:
¡@virtual IBase *Clone() = 0;
};

class Base:public IBase
{
public:
¡@virtual IBase *Clone() override
¡@{
¡@¡@return new Base(*this);
¡@}
};

class IDerived1 :public IBase
{
public:
¡@virtual void Show() = 0;
};

class Derived1 :public IDerived1
{
¡@shared_ptr<IBase> Base_Ptr;
¡@string m_Name;

public:
¡@Derived1(const string &Name)
¡@¡@:Base_Ptr(new Base), // ³o¸Ì¥u¬O¹Ï­Ó¤è«K¡ADerived1 ¤£À³¸Ó»{ÃÑ Base
¡@¡@m_Name(Name)
¡@{
¡@}

¡@Derived1(const Derived1 &Src)
¡@¡@:Base_Ptr(Src.Base_Ptr->Clone()),
¡@¡@m_Name(Src.m_Name)
¡@{
¡@}

¡@virtual IBase *Clone() override
¡@{
¡@¡@return new Derived1(*this);
¡@}

¡@void Show() override
¡@{
¡@¡@cout << "I am Derived1. My name is " << m_Name << endl;
¡@}
};

int main()
{
¡@shared_ptr<IBase> Base1_Ptr(new Derived1("coco"));
¡@shared_ptr<IBase> clone_Base1_Ptr( Base1_Ptr->Clone());
¡@shared_ptr<Derived1> Derived1_Ptr = dynamic_pointer_cast<Derived1>(Base1_Ptr);
¡@Derived1_Ptr->Show(); // I am Derived1. My name is coco
¡@Derived1_Ptr = dynamic_pointer_cast<Derived1>(clone_Base1_Ptr);
¡@Derived1_Ptr->Show(); // I am Derived1. My name is coco
¡@
¡@return 0;
}

§@ªÌ : cheg(cheg)
[ ¶K¤å 99 | ¤H®ð 125 | µû»ù 410 | µû»ù/¶K¤å 4.14 | °e¥Xµû»ù 24 ¦¸ ] 
[ µ¹­ÓÆg ]  [ µ¹­ÓÆg ]  [ ¦^À³¥»¤å ]  [ µoªí·s¤å ]  [ ¦^¤W­¶ ] [ ¦^°Q½×°Ï¦Cªí ] [ ¦^ª¾ÃѤJ¤f ]
2017/11/9 ¤W¤È 07:41:49

>>§Ú¥u¬O²³æªí¹F·N«ä¡A¨Ò¤l¤£¬O¼g±o«Ü§¹¥þ¡A§Ú¤w§ï¥Î ¤¶­±Ä~©Ó+²Õ¦X¥N´ÀÄ~©Ó ¸Ñ¨M¤F³o­Ó°ÝÃD¡A°Ñ¦Ò¥H¤U³o¨â½g
>¥i¤£¥i¥H°µ±o¨ì¨Ã¤£¬O§ÚÃö¤ßªº¡C§Ú¤ñ¸û¬O·Qª¾¹D³o»Ý¨Dªº¦X²z©Ê( ©Î»¡»Ý­n©Ê)¡C
>¨Ò¦p§Ú´£ªº¨Ò¤l¡A¤lÃþ§O¥u¥[¤F¤@­Ó¸òcloneµLÃöªº¦¨­û¨ç¦¡¡A¬°¦ó¤@©w­n±j¨î¹ê§@¥t¤@­Óclone¡C

³o¬O¥L­n°µ prototype ¸ò visitor pattern ªº½t¬G
³o¨â­Ó¼Ò¦¡ªº¯S©Ê clone() ¸ò accept() ³£¥²¶·µ¹¥X this object ªº static type
¦]¦¹·|µo²{«Ü¦h¤lÃþ§Oªº¹ê§@¤º®e¤@¼Ë¡A¥u¦³³o­Ó this type ·|¤£¦P
Åܦ¨¤£¯à¥h´_¥Î¤÷Ãþ§Oªº¹ê§@¤º®e

°ÝÃD´N¥X¦b¥L­ì¥»ªº°ÝÃD¬O¡A¦b prototype & visitor ³£¦b²Ä¤T¥Nªº«e´£¤U
·|¦]¬°²Ä¤G¥Nªº¹ê§@¡A¥¢¥h±j¨î­«¼g clone() ¸ò accept() ªº§@¥Î¡A¾É­P¤F
µ{¦¡¤£¹w´Áªº¿ù»~¦Ó¤£¦Ûª¾¡AµM«á²£¥Í°ÝÃD¡G¬°¤°»ò»y¨¥¤£´£¨Ñ must ¡H

µM«á¤@¶}©l´N¦b°Q½×»¡À³¸Ó§ïÅÜÄ~©Ó¬[ºc´N¤£·|¦³³o°ÝÃD
²{¦b§ï¤¶­±Ä~©Ó¥[²Õ¦X´N¬O³o¼Ë§@¤F¡A»P¥»¨Ó°í«ùªº°ÝÃD¤w¸gµLÃö

§@ªÌ : sunyear(coco) VC++¨ô¶V±M®aC++³»¦y°ª¤â¶K¤å¶W¹L2000«h
[ ¶K¤å 2421 | ¤H®ð 1485 | µû»ù 6060 | µû»ù/¶K¤å 2.5 | °e¥Xµû»ù 5 ¦¸ ] 
[ µ¹­ÓÆg ]  [ µ¹­ÓÆg ]  [ ¦^À³¥»¤å ]  [ µoªí·s¤å ]  [ ¦^¤W­¶ ] [ ¦^°Q½×°Ï¦Cªí ] [ ¦^ª¾ÃѤJ¤f ]
2017/11/22 ¤W¤È 01:20:31
>À³¸Ó¨S¨º»òÃø²z¸Ñ¡A§Ú¦A¼g­Ó§ó²³æªº¨Ò¤l
>#include <iostream>
>#include <string>
>
>using namespace std;
>
>class Base
>{
>public:
>¡@virtual Base *Clone()
>¡@{
>¡@¡@return new Base(*this);
>¡@}
>};
>::::::::::::::::::::::::::::::::::::::::::::
>class Derived2 :public Base
>{
>¡@string m_Name;
>public:
>¡@Derived2(const string &Name)
>¡@¡@:m_Name(Name)
>¡@{
>¡@}
>
>¡@Derived2(const Derived2 &Src)
>¡@¡@:m_Name(Src.m_Name)
>¡@{
>¡@}

>¡@void Show()
>¡@{
>¡@¡@cout << "I am Derived2. My name is " << m_Name << endl;
>¡@}
>};
>
>int main()
>{
>:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
>¡@Base *pBase2 = new Derived2("sunyear");
>¡@Base *clone_pBase2 = pBase2->Clone();
>¡@Derived2 *pDerived2 = dynamic_cast<Derived2*>(pBase2);
>¡@pDerived2->Show(); // I am Derived2. My name is sunyear
>¡@pDerived2 = dynamic_cast<Derived2*>(clone_pBase2);
>¡@pDerived2->Show(); // ·í±¼
>
>¡@return 0;
>}
>
>¤§©Ò¥H·|¥X¿ù¬O¦]¬° C++ ªºµêÀÀ¨ç¼Æ¥u¬OÅý©µ¦ùªÌ"¥i¥H"Âмg¡A©Ò¥H¶·­n¤@­ÓÃöÁä¦r must¡A¥Î¥Hªí¥Ü­Y¦³©µ¦ùªÌ¤@©w­nÂмg

¤§©Ò¥H¿ù¬O¦]¬°Derived2¦h¤F¤@­Ó m_Nameªº¦¨­û¡C
¼¶¼gDerived2µ{¦¡®É¡A¥»¨Ó´NÀ³¸Ó¦bclone­t³dm_Nameªº½Æ»s¡C½Ö¥Íªº«Ä¤l½Ö´N­n­t³d¾i¡C
¦Ó§Ú«e­±´£¥Xªº°ÝÃD¬O¡A­Y¤lÃþ§O¨S¼W¥[¸òclone ¦³ÃöªºªF¦è¡A¬°¤°»ò­n³Q±j­¢¹ê§@?
¤Þ¥Î§AªºBase¨Ò¤l¡A
class Derived3 :public Base
{
public:
¡@ShowString(const string &Str)
¡@{cout <<Str<< endl;}
};
³o¨Ò¤lDerived3¬°¤°»ò ­n³Q±j­¢¹ê§@¦Û¤vªºclone?

¦A¤Þ¥Î§AªºDerived1¬°¨Ò¤l
class Derived4 :public Derived1
{
public:
¡@JustSayHello(const string &Name)
¡@{cout <<"Hello "<<Name<<'!'<< endl;}
};

³o¨Ò¤lDerived4¬°¤°»ò ­n³Q±j­¢¹ê§@¦Û¤vªºclone?

¾ã²z¤@¤U§Úªº·N«ä¡A§Aªº¨Ò¤lDerived1,Derived2¸Ó¦³¦Û¤vªºclone,¦ýDerived3,Derived4«h¤£»Ý­n¡C
­n¤£­n¦³¦Û¤vªºclone¡AÀ³¥Ñµ{¦¡­û¦Û¦æ§PÂ_¡A¦Û¤vªº«Ä¤l¦Û¤v¾i¡A¿àµ¹¤÷¥À·íµM¥X°ÝÃD¡C¦ý­Y³»«È¤@±Ú¡A¨S¥Í«Ä¤l¤£¥Îµw©ê¤@­Ó°²«½«½¨Ó¾i§a?
§@ªÌ : cxxlman(CxxlMan) C++Àu¨q¦n¤â¶K¤å¶W¹L1000«h
[ ¶K¤å 1036 | ¤H®ð 3227 | µû»ù 1260 | µû»ù/¶K¤å 1.22 | °e¥Xµû»ù 27 ¦¸ ] 
[ µ¹­ÓÆg ]  [ µ¹­ÓÆg ]  [ ¦^À³¥»¤å ]  [ µoªí·s¤å ]  [ ¦^¤W­¶ ] [ ¦^°Q½×°Ï¦Cªí ] [ ¦^ª¾ÃѤJ¤f ]
2017/11/22 ¤W¤È 11:49:47
¨º¼Ë dynamic_cast ±N·|±o¨ì null
§@ªÌ : sunyear(coco) VC++¨ô¶V±M®aC++³»¦y°ª¤â¶K¤å¶W¹L2000«h
[ ¶K¤å 2421 | ¤H®ð 1485 | µû»ù 6060 | µû»ù/¶K¤å 2.5 | °e¥Xµû»ù 5 ¦¸ ] 
[ µ¹­ÓÆg ]  [ µ¹­ÓÆg ]  [ ¦^À³¥»¤å ]  [ µoªí·s¤å ]  [ ¦^¤W­¶ ] [ ¦^°Q½×°Ï¦Cªí ] [ ¦^ª¾ÃѤJ¤f ]
2017/11/23 ¤W¤È 01:03:05
>¨º¼Ë dynamic_cast ±N·|±o¨ì null
¤£À´§Aªº·N«ä¡C
§@ªÌ : cxxlman(CxxlMan) C++Àu¨q¦n¤â¶K¤å¶W¹L1000«h
[ ¶K¤å 1036 | ¤H®ð 3227 | µû»ù 1260 | µû»ù/¶K¤å 1.22 | °e¥Xµû»ù 27 ¦¸ ] 
[ µ¹­ÓÆg ]  [ µ¹­ÓÆg ]  [ ¦^À³¥»¤å ]  [ µoªí·s¤å ]  [ ¦^¤W­¶ ] [ ¦^°Q½×°Ï¦Cªí ] [ ¦^ª¾ÃѤJ¤f ]
2017/11/23 ¤W¤È 10:00:23
clone ´N¬O­n¥þ³¡½Æ»s¡A­Y¤£Âмg´N¥u·| clone ¤W¥b³¡¡A¤U¥b³¡¤£¨£¤F¡A¦ÛµM dynamic_cast<Derived3> ´N·|±o¨ì NULL
§@ªÌ : sunyear(coco) VC++¨ô¶V±M®aC++³»¦y°ª¤â¶K¤å¶W¹L2000«h
[ ¶K¤å 2421 | ¤H®ð 1485 | µû»ù 6060 | µû»ù/¶K¤å 2.5 | °e¥Xµû»ù 5 ¦¸ ] 
[ µ¹­ÓÆg ]  [ µ¹­ÓÆg ]  [ ¦^À³¥»¤å ]  [ µoªí·s¤å ]  [ ¦^¤W­¶ ] [ ¦^°Q½×°Ï¦Cªí ] [ ¦^ª¾ÃѤJ¤f ]
2017/11/27 ¤W¤È 03:18:02
>clone ´N¬O­n¥þ³¡½Æ»s¡A­Y¤£Âмg´N¥u·| clone ¤W¥b³¡¡A¤U¥b³¡¤£¨£¤F¡A
>¦ÛµM dynamic_cast<Derived3> ´N·|±o¨ì NULL
¨º¨Ã¤£¬O½Æ»s¤£§¹¥þ©Ò­P(½Æ»s¬O§¹¥þªº)¡Adynamic_cast·|±o¨ìnull¬O¦]¬°¦V¤UÂ૬®É«¬§OÀˬd¨S³q¹L¡C
³oºØ¤£¦P¶¥¼h«¬§Oª«¥ó¾Þ§@¡AÀ³¸Ó³£¨Ï¥Î¤¶­±«¬§OIBaseªº¤¶­±¥h¾Þ§@¡C¤SÂà¦^­l¥Í«¬§O¾Þ§@¥»¨Ó´N­Ñ¦MÀI©Ê¡C
¦pªG¦³¤°»ò¯S§O²z¥Ñ­nÂà¦^­l¥Í«¬§O¾Þ§@¡A¥u­n½T©w¬O¨º­Ó­l¥Í«¬§O(§Aªº¨Ò¤l¬O½T©wªº)¡A¥i¥H¥Îstatic_castÂ૬¡A´N¥i¥HÁ×§K«¬§OÀˬd¡C
¨º­Y¬O¤£½T©w¬O¨º­Ó­l¥Í«¬§O...°ÝÃD½ÆÂø¤FÂI...
°ò¥»¤W§Aªº¨Ò¤l¡Adynamic_cast¤]¬O­n½T©w«¬§O¤~¯àcastªº¡A¤£µM±o¨ìnull¡A¤U­±ªºµ{¦¡¤]¬O­n¥X°ÝÃDªº¡C
¤]´N¬O»¡¡A¤£½T©w¬O¨º­Ó­l¥Í«¬§Oªºª¬ªp¡Aµ{¦¡ÁÙ­n¥h³B²z±o¨ìnull®É«ç»ò¿ì¡C°õ¦æ®É´Á dynamic_cast¥»´N­n¥I¤@ÂI¥N»ùªº¡A
¦A¥[¤WÀˬd¥¢±Ñªº³B²z¡Aµ¥©ó¥I¨â¥÷¥N»ùªºµ²ªG¡A­Ë¤£¦p¦bIBase¸Ì¦h¤@­ÓWhoAmI()ªº¤¶­±¡A¤]¬O¥i¥H°ÊºAÀˬd«¬§O¡A¦ý¥uªá¤@¥÷¥N»ù¡C
¥[¤WWhoAmI()ªº«¬§OÀˬd«á¦Astatic_cast ´N¦w¥þ¤F¡C¦p¤ß¸ÌÁÙ¬O¤ò¤òªº(¤£«H¥ôWhoAmI)¡A·íµM¥i¥HWhoAmI()¤À¬£¨ì¬ÛÀ³ªºdynamic_cast¦A°µ½T»{Àˬd¡C
¥u¬O³o´N¤Sªá¤F¨â¥÷¥N»ù¤F¡C
Á`¦Ó¨¥¤§¡A¦w¥þ¬O­n¥I¥N»ùªº¡C
§@ªÌ : cxxlman(CxxlMan) C++Àu¨q¦n¤â¶K¤å¶W¹L1000«h
[ ¶K¤å 1036 | ¤H®ð 3227 | µû»ù 1260 | µû»ù/¶K¤å 1.22 | °e¥Xµû»ù 27 ¦¸ ] 
[ µ¹­ÓÆg ]  [ µ¹­ÓÆg ]  [ ¦^À³¥»¤å ]  [ µoªí·s¤å ]  [ ¦^¤W­¶ ] [ ¦^°Q½×°Ï¦Cªí ] [ ¦^ª¾ÃѤJ¤f ]
2017/11/27 ¤U¤È 04:57:16

>>clone ´N¬O­n¥þ³¡½Æ»s¡A­Y¤£Âмg´N¥u·| clone ¤W¥b³¡¡A¤U¥b³¡¤£¨£¤F¡A
>>¦ÛµM dynamic_cast<Derived3> ´N·|±o¨ì NULL
>¨º¨Ã¤£¬O½Æ»s¤£§¹¥þ©Ò­P(½Æ»s¬O§¹¥þªº)¡Adynamic_cast·|±o¨ìnull¬O¦]¬°¦V¤UÂ૬®É«¬§OÀˬd¨S³q¹L¡C

­Y½Æ»s¬O§¹¥þªº¡A¨º¥H¤U³oµ{¦¡½Xªº¥»´L©M¤À¨­´N·|±o¨ì¬Û¦Pªºµ²ªG¤F

Base *pBase2 = new Derived2("sunyear"); // ¥»´L
Base *clone_pBase2 = pBase2->Clone(); // ¤À¨­
Derived2 *pDerived2 = dynamic_cast<Derived2*>(pBase2);
pDerived2->Show(); // I am Derived2. My name is sunyear
pDerived2 = dynamic_cast<Derived2*>(clone_pBase2);
pDerived2->Show(); // ·í±¼

>³oºØ¤£¦P¶¥¼h«¬§Oª«¥ó¾Þ§@¡AÀ³¸Ó³£¨Ï¥Î¤¶­±«¬§OIBaseªº¤¶­±¥h¾Þ§@¡C¤SÂà¦^­l¥Í«¬§O¾Þ§@¥»¨Ó´N­Ñ¦MÀI©Ê¡C
>¦pªG¦³¤°»ò¯S§O²z¥Ñ­nÂà¦^­l¥Í«¬§O¾Þ§@¡A¥u­n½T©w¬O¨º­Ó­l¥Í«¬§O(§Aªº¨Ò¤l¬O½T©wªº)¡A¥i¥H¥Îstatic_castÂ૬¡A´N¥i¥HÁ×§K«¬§OÀˬd¡C

§Ú¥u¬O¥Î dynamic_cast ¨ÓÃÒ©ú clone_pBase2 ¦] Derived2 ¨S¦³½Æ¼g Clone() ·|³y¦¨½Æ»s¤£§¹¥þ¦Ó¤w¡A¨S¦³­n³o¼Ë¨Ï¥Î

§@ªÌ : sunyear(coco) VC++¨ô¶V±M®aC++³»¦y°ª¤â¶K¤å¶W¹L2000«h
[ ¶K¤å 2421 | ¤H®ð 1485 | µû»ù 6060 | µû»ù/¶K¤å 2.5 | °e¥Xµû»ù 5 ¦¸ ] 
[ µ¹­ÓÆg ]  [ µ¹­ÓÆg ]  [ ¦^À³¥»¤å ]  [ µoªí·s¤å ]  [ ¦^¤W­¶ ] [ ¦^°Q½×°Ï¦Cªí ] [ ¦^ª¾ÃѤJ¤f ]
2017/11/27 ¤U¤È 05:30:25
>­Y½Æ»s¬O§¹¥þªº¡A¨º¥H¤U³oµ{¦¡½Xªº¥»´L©M¤À¨­´N·|±o¨ì¬Û¦Pªºµ²ªG¤F
>Base *pBase2 = new Derived2("sunyear"); // ¥»´L
>Base *clone_pBase2 = pBase2->Clone(); // ¤À¨­
>:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
>pDerived2 = dynamic_cast<Derived2*>(clone_pBase2);
>pDerived2->Show(); // ·í±¼
§Ú»¡ªº¬ODerived3©µ¥Î°òÃþ§Oªºcloneªº½Æ»s¬O§¹¥þªº¡A¨S¦³»¡¬ODerived2¡C
Derived2¨S¦³¼W¥[¥ô¦óªº¸ê®Æ¦¨­û¡A©µ¥Î°òÃþ§Oªºclone¬O¥i¥Hªº;
Derived2¦³¦Û¤v·s¼Wªº¸ê®Æ¡A·íµM­n¦Û¤vÂмgclone¡C
§Úªº·N«ä¬O¤lÃþ§O¨Ì¦Û¤vªº±¡ªp¨M©w­n¤£­nÂмgclone¡A¤£À³¸Ó³Q±j­¢¤@©w­nÂмg¡C¹³Derived3´N¤£»Ý­nÂмg¡C

>§Ú¥u¬O¥Î dynamic_cast ¨ÓÃÒ©ú clone_pBase2 ¦] Derived2 ¨S¦³½Æ¼g Clone() ·|³y¦¨½Æ»s¤£§¹¥þ¦Ó¤w¡A¨S¦³­n³o¼Ë¨Ï¥Î
¤£¬O½Æ»s¤£§¹¥þ¡C¨º¬O¦]¬°¨S¨SÂмgclone¦Ó¤÷Ãþ§O»s³yªº¬OBaseª«¥ó¡Adynamic_cast·|Àˬd¨äÃþ§O¶¥¼h¦Ócast¥¢±Ñ¡C
§Aªº¨Ò¤l¡A¨Ï¥Îstatic_cast´N¤£·|¦³°ÝÃD¡A¦p¦]½Æ»s¤£§¹¥þ¡A¨ºstatic_cast´N¤@¼Ë·|¦³°ÝÃD¡C
§Úª¾¹D³o¥u¬O­Ó¨Ò¤l¡A©Ò¥H§Ú°²³]¤F¤£½T©wÃþ§O±¡ªpªº³B²z¡C
§@ªÌ : sunyear(coco) VC++¨ô¶V±M®aC++³»¦y°ª¤â¶K¤å¶W¹L2000«h
[ ¶K¤å 2421 | ¤H®ð 1485 | µû»ù 6060 | µû»ù/¶K¤å 2.5 | °e¥Xµû»ù 5 ¦¸ ] 
[ µ¹­ÓÆg ]  [ µ¹­ÓÆg ]  [ ¦^À³¥»¤å ]  [ µoªí·s¤å ]  [ ¦^¤W­¶ ] [ ¦^°Q½×°Ï¦Cªí ] [ ¦^ª¾ÃѤJ¤f ]
2017/11/27 ¤U¤È 05:34:15
­q¥¿:
Derived3¨S¦³¼W¥[¥ô¦óªº¸ê®Æ¦¨­û¡A©µ¥Î°òÃþ§Oªºclone¬O¥i¥Hªº;
Derived2¦³¦Û¤v·s¼Wªº¸ê®Æ¡A·íµM­n¦Û¤vÂмgclone¡C
§@ªÌ : cxxlman(CxxlMan) C++Àu¨q¦n¤â¶K¤å¶W¹L1000«h
[ ¶K¤å 1036 | ¤H®ð 3227 | µû»ù 1260 | µû»ù/¶K¤å 1.22 | °e¥Xµû»ù 27 ¦¸ ] 
[ µ¹­ÓÆg ]  [ µ¹­ÓÆg ]  [ ¦^À³¥»¤å ]  [ µoªí·s¤å ]  [ ¦^¤W­¶ ] [ ¦^°Q½×°Ï¦Cªí ] [ ¦^ª¾ÃѤJ¤f ]
2017/11/27 ¤U¤È 07:52:36
­Y§¹¥þ½Æ»s°õ¦æµ²ªGÀ³¸Ó¬Û¦P

#include <iostream>
#include <string>

using namespace std;

class Base
{
public:
¡@virtual Base *Clone()
¡@{
¡@¡@return new Base(*this);
¡@}
};

class Derived3 :public Base
{
public:
¡@virtual Base *Clone() override¡@
¡@{
¡@¡@return new Derived3(*this);
¡@}
};

class Derived4 :public Base
{
public:
};

int main()
{
¡@Base *pBase3 = new Derived3; // ¥»´L
¡@Base *clone_pBase3 = pBase3->Clone(); // ¤À¨­

¡@cout << "Derived3 ¥»´L¡G";
¡@if (dynamic_cast<Derived3*>(pBase3))
¡@¡@cout << "§¹¥þ" << endl;
¡@else
¡@¡@cout << "¤£§¹¥þ" << endl;

¡@cout << "Derived3 ¤À¨­¡G";
¡@if (dynamic_cast<Derived3*>(clone_pBase3))
¡@¡@cout << "§¹¥þ" << endl;
¡@else
¡@¡@cout << "¤£§¹¥þ" << endl;

¡@cout << endl;

¡@Base *pBase4 = new Derived4; // ¥»´L
¡@Base *clone_pBase4 = pBase4->Clone(); // ¤À¨­

¡@cout << "Derived4 ¥»´L¡G";
¡@if (dynamic_cast<Derived4*>(pBase4))
¡@¡@cout << "§¹¥þ" << endl;
¡@else
¡@¡@cout << "¤£§¹¥þ" << endl;

¡@cout << "Derived4 ¤À¨­¡G";
¡@if (dynamic_cast<Derived4*>(clone_pBase4))
¡@¡@cout << "§¹¥þ" << endl;
¡@else
¡@¡@cout << "¤£§¹¥þ" << endl;

¡@return 0;
}

°õ¦æµ²ªG¡G
Derived3 ¥»´L¡G§¹¥þ
Derived3 ¤À¨­¡G§¹¥þ

Derived4 ¥»´L¡G§¹¥þ
Derived4 ¤À¨­¡G¤£§¹¥þ
½Ð«ö¥ô·NÁäÄ~Äò . . .
§@ªÌ : sunyear(coco) VC++¨ô¶V±M®aC++³»¦y°ª¤â¶K¤å¶W¹L2000«h
[ ¶K¤å 2421 | ¤H®ð 1485 | µû»ù 6060 | µû»ù/¶K¤å 2.5 | °e¥Xµû»ù 5 ¦¸ ] 
[ µ¹­ÓÆg ]  [ µ¹­ÓÆg ]  [ ¦^À³¥»¤å ]  [ µoªí·s¤å ]  [ ¦^¤W­¶ ] [ ¦^°Q½×°Ï¦Cªí ] [ ¦^ª¾ÃѤJ¤f ]
2017/11/27 ¤U¤È 09:14:13
>¡@if (dynamic_cast<Derived4*>(clone_pBase4))
>¡@¡@cout << "§¹¥þ" << endl;
>¡@else
>¡@¡@cout << "¤£§¹¥þ" << endl;
§A¨S¦³©ú¥Õ§Úªº·N«ä¡C
dynamic_cast¬O¤@­Ó·|°ÊºA§PÂ_¬O§_¦w¥þ¦V¤UÂ૬(Safe downcasting¡^ªºcasting¤£¬O§PÂ_½Æ»s§¹¤£§¹¥þ¡C
¹ï©óDerived4¡A¦]¬O¨Ï¥Î°òÃþ§O¨Ó½Æ»s¦Û¤v¡A©Ò¤vª«¥ó­ì¥»«¬ºA·|¬O°òÃþ§O¡A¦bdynamic_cast·íµM·|³Q§PÂ_«Dªk¡C
(¹ïdynamic_cast¨Ó»¡¡A¥u¦³­l¦ùÃþ§O­°Âà°òÃþ§Oªºª«¥ó¦AÂà¦^­l¦ùÃþ§O¤~¬O¦w¥þªº)
¦ý¨Æ¹ê¤WDerived4ª«¥ó©M¨ä°òÃþ§O¸ê®Æ¨S¤°»ò¤£¦P(¤º®eª«§¹¥þ¬Û¦P)¡A¤¬Âà¬O¤£»ù¦³°ÝÃDªº¡Aµ{¦¡­û¥u­nclone_pBase4¨­¥÷¬O½T©wªº¡C
¨º»ò Derived4 *pClone4= static_cast<Derived4*>(clone_pBase4);
µM«ápClone4§¹¥þ¥i¥H·í§@ Derived4ªºª«¥ó¨Ó¥Î¡A¤£·|¦³½Æ»s§¹¤£§¹¥þªº°ÝÃD¡C
§@ªÌ : sunyear(coco) VC++¨ô¶V±M®aC++³»¦y°ª¤â¶K¤å¶W¹L2000«h
[ ¶K¤å 2421 | ¤H®ð 1485 | µû»ù 6060 | µû»ù/¶K¤å 2.5 | °e¥Xµû»ù 5 ¦¸ ] 
[ µ¹­ÓÆg ]  [ µ¹­ÓÆg ]  [ ¦^À³¥»¤å ]  [ µoªí·s¤å ]  [ ¦^¤W­¶ ] [ ¦^°Q½×°Ï¦Cªí ] [ ¦^ª¾ÃѤJ¤f ]
2017/11/27 ¤U¤È 10:27:01
¦n§a¡A§Ú§ï¼g¤@¤Uµ{¦¡¡A©Î³\¸û¯à¼á²M
if (dynamic_cast<Derived4*>(clone_pBase4))
¡@cout << "¦w¥þÂ૬" << endl;
else
¡@cout << "¤£¦w¥þÂ૬" << endl;

ª`·N: "(¤£)¦w¥þ" ¤£¬O "(¤£)§¹¥þ"
©Ò¿×"¤£¦w¥þ"¥u¬O¨S¿ìªk«OÃÒ¦w¥þ¡A¨Ã¤£¬O»¡Â૬¤@©w¬O¿ùªº¡C
¦pªGµ{¦¡­û½T©wÂ૬¬O¹ïªº¡A¥i¥H¥Îstatic_cast¨Ó±j¨îÂ૬¡C
§@ªÌ : cxxlman(CxxlMan) C++Àu¨q¦n¤â¶K¤å¶W¹L1000«h
[ ¶K¤å 1036 | ¤H®ð 3227 | µû»ù 1260 | µû»ù/¶K¤å 1.22 | °e¥Xµû»ù 27 ¦¸ ] 
[ µ¹­ÓÆg ]  [ µ¹­ÓÆg ]  [ ¦^À³¥»¤å ]  [ µoªí·s¤å ]  [ ¦^¤W­¶ ] [ ¦^°Q½×°Ï¦Cªí ] [ ¦^ª¾ÃѤJ¤f ]
2017/11/28 ¤U¤È 06:27:17

>¦n§a¡A§Ú§ï¼g¤@¤Uµ{¦¡¡A©Î³\¸û¯à¼á²M
>if (dynamic_cast<Derived4*>(clone_pBase4))
>¡@cout << '¦w¥þÂ૬' << endl;
>else
>¡@cout << '¤£¦w¥þÂ૬' << endl;
>
>ª`·N: '(¤£)¦w¥þ' ¤£¬O '(¤£)§¹¥þ'
>©Ò¿×'¤£¦w¥þ'¥u¬O¨S¿ìªk«OÃÒ¦w¥þ¡A¨Ã¤£¬O»¡Â૬¤@©w¬O¿ùªº¡C
¥u¦³§¹¥þ©Î¤£§¹¥þ¡A¨S¦³¤£¦w¥þ³oºØ¨Æ¡A
ÀËÅ礣³q¹L´N¬O Blog() ¨SÂмg©Î¬O¼g¿ù¤F

>¦pªGµ{¦¡­û½T©wÂ૬¬O¹ïªº¡A¥i¥H¥Îstatic_cast¨Ó±j¨îÂ૬¡C
¥Ñ Base Âà¨ì Derived ¶Ü¡A­n¬O¦h­«Ä~©Ó¤£¤@©w·|¦¨¥\
§@ªÌ : sunyear(coco) VC++¨ô¶V±M®aC++³»¦y°ª¤â¶K¤å¶W¹L2000«h
[ ¶K¤å 2421 | ¤H®ð 1485 | µû»ù 6060 | µû»ù/¶K¤å 2.5 | °e¥Xµû»ù 5 ¦¸ ] 
[ µ¹­ÓÆg ]  [ µ¹­ÓÆg ]  [ ¦^À³¥»¤å ]  [ µoªí·s¤å ]  [ ¦^¤W­¶ ] [ ¦^°Q½×°Ï¦Cªí ] [ ¦^ª¾ÃѤJ¤f ]
2017/11/28 ¤U¤È 06:54:01
>¥u¦³§¹¥þ©Î¤£§¹¥þ¡A¨S¦³¤£¦w¥þ³oºØ¨Æ¡A
>ÀËÅ礣³q¹L´N¬O Blog() ¨SÂмg©Î¬O¼g¿ù¤F
©Ò¥Hstatic_castÀ³¸Ó¬OC++ªº¤@­Óbug :D
§@ªÌ : cxxlman(CxxlMan) C++Àu¨q¦n¤â¶K¤å¶W¹L1000«h
[ ¶K¤å 1036 | ¤H®ð 3227 | µû»ù 1260 | µû»ù/¶K¤å 1.22 | °e¥Xµû»ù 27 ¦¸ ] 
[ µ¹­ÓÆg ]  [ µ¹­ÓÆg ]  [ ¦^À³¥»¤å ]  [ µoªí·s¤å ]  [ ¦^¤W­¶ ] [ ¦^°Q½×°Ï¦Cªí ] [ ¦^ª¾ÃѤJ¤f ]
2017/11/28 ¤U¤È 09:04:59


>©Ò¥Hstatic_castÀ³¸Ó¬OC++ªº¤@­Óbug :D
static_cast ¨Ì¿àªº¬O½s;¹ªº¯à¤O¡A¥u­n¤£¥Î´c·d¤âªk¡A¯à¹L±o¤FÀ³¸Ó¨S°ÝÃD
§@ªÌ : sunyear(coco) VC++¨ô¶V±M®aC++³»¦y°ª¤â¶K¤å¶W¹L2000«h
[ ¶K¤å 2421 | ¤H®ð 1485 | µû»ù 6060 | µû»ù/¶K¤å 2.5 | °e¥Xµû»ù 5 ¦¸ ] 
[ µ¹­ÓÆg ]  [ µ¹­ÓÆg ]  [ ¦^À³¥»¤å ]  [ µoªí·s¤å ]  [ ¦^¤W­¶ ] [ ¦^°Q½×°Ï¦Cªí ] [ ¦^ª¾ÃѤJ¤f ]
2017/11/29 ¤W¤È 12:09:51
>static_cast ¨Ì¿àªº¬O½s;¹ªº¯à¤O¡A¥u­n¤£¥Î´c·d¤âªk¡A¯à¹L±o¤FÀ³¸Ó¨S°ÝÃD
dynamic_cast ¤~¬O¨Ì¿à½s;¹ªº¯à¤O§a?
¥¦¬O¨Ì¿àRTTI ªºtype informationÀˬddowncastªº¦w¥þ©Ê¡C
¨S¤°»ò¤£¦n(ÁöµM¦³¤H»{¬°¡A¦nªºC++µ{¦¡¤£À³¸Ó¥Îdynamic_cast )¡A¦ý¦³©ú©ú¥i¥HÂ઺ªF¦è¡A¥¦·|Âण°Ê¡C
³o®É´N¬Ostatic_cast¤W³õ¡Astatic_castªºÁô§t·N¸q´N¬O¡A§Úª¾¹D³oÂ૬OK¨S°ÝÃD¡A¤£­nÀ°§ÚÀˬd¡Aµ²ªG§Ú¦Û¤v­t³d¡C
¦³¨ÇªF¦è·|¬O³oºØ±¡ªp(¹³¬O³q°T¤¶­±µ{¦¡)¡Adynamic_cast ¹L¤£¤F¡A¥u¦³¥Îstatic_cast¤~¥i¥H¡C
static_cast<Derived4*>(clone_pBase4)¥i¥HÂ૬(¦]¬°¬O¤@¼Ëªº¸ê®Æ¦¨­û)¡A¨Ï¥Î¤]¨S¦³°ÝÃD¡C¦pªG¤@©w°í«ùdynamic_cast¤~¬O¹ïªº¡A¨ºstatic_cast´NµL¥ÎªZ¤§¦a¤F¡C

§@ªÌ : cxxlman(CxxlMan) C++Àu¨q¦n¤â¶K¤å¶W¹L1000«h
[ ¶K¤å 1036 | ¤H®ð 3227 | µû»ù 1260 | µû»ù/¶K¤å 1.22 | °e¥Xµû»ù 27 ¦¸ ] 
[ µ¹­ÓÆg ]  [ µ¹­ÓÆg ]  [ ¦^À³¥»¤å ]  [ µoªí·s¤å ]  [ ¦^¤W­¶ ] [ ¦^°Q½×°Ï¦Cªí ] [ ¦^ª¾ÃѤJ¤f ]
2017/11/29 ¤U¤È 09:16:20

>>static_cast ¨Ì¿àªº¬O½s;¹ªº¯à¤O¡A¥u­n¤£¥Î´c·d¤âªk¡A¯à¹L±o¤FÀ³¸Ó¨S°ÝÃD
>dynamic_cast ¤~¬O¨Ì¿à½s;¹ªº¯à¤O§a?

§Ú·N«ä¬O»¡ static_cast ¬O¦b½sͮɴÁ¥Ñ½s;¹´NÂà´«¦nªº¡Adynamic_cast ¬O¦b°õ¦æ®É´Á¥Ñ RTTI ¬d§ä¥X¨Óªº

>¥¦¬O¨Ì¿àRTTI ªºtype informationÀˬddowncastªº¦w¥þ©Ê¡C
>¨S¤°»ò¤£¦n(ÁöµM¦³¤H»{¬°¡A¦nªºC++µ{¦¡¤£À³¸Ó¥Îdynamic_cast )¡A¦ý¦³©ú©ú¥i¥HÂ઺ªF¦è¡A¥¦·|Âण°Ê¡C
>³o®É´N¬Ostatic_cast¤W³õ¡Astatic_castªºÁô§t·N¸q´N¬O¡A§Úª¾¹D³oÂ૬OK¨S°ÝÃD¡A¤£­nÀ°§ÚÀˬd¡Aµ²ªG§Ú¦Û¤v­t³d¡C
>¦³¨ÇªF¦è·|¬O³oºØ±¡ªp(¹³¬O³q°T¤¶­±µ{¦¡)¡Adynamic_cast ¹L¤£¤F¡A¥u¦³¥Îstatic_cast¤~¥i¥H¡C

¦³³oºØ¨Æ? ¾Ú§Ú©Òª¾¥u­n¯à¶¶§Q«Ø¦n RTTI ´N¤@©w¯àÂà¡A­Y¤£¯àÂà´N¬O¤£À³¸Ó³o¼ËÂà

>static_cast<Derived4*>(clone_pBase4)¥i¥HÂ૬(¦]¬°¬O¤@¼Ëªº¸ê®Æ¦¨­û)¡A¨Ï¥Î¤]¨S¦³°ÝÃD¡C¦pªG¤@©w°í«ùdynamic_cast¤~¬O¹ïªº¡A¨ºstatic_cast´NµL¥ÎªZ¤§¦a¤F¡C

§Ú»{¬° static_cast ¤£À³¸Ó downcast¡A³o½s;¹À³¯à¾×±¼¡A¤£ª¾¬O¤°»ò­ì¦]¤£³o¼Ë°µ
§@ªÌ : sunyear(coco) VC++¨ô¶V±M®aC++³»¦y°ª¤â¶K¤å¶W¹L2000«h
[ ¶K¤å 2421 | ¤H®ð 1485 | µû»ù 6060 | µû»ù/¶K¤å 2.5 | °e¥Xµû»ù 5 ¦¸ ] 
[ µ¹­ÓÆg ]  [ µ¹­ÓÆg ]  [ ¦^À³¥»¤å ]  [ µoªí·s¤å ]  [ ¦^¤W­¶ ] [ ¦^°Q½×°Ï¦Cªí ] [ ¦^ª¾ÃѤJ¤f ]
2017/11/29 ¤U¤È 10:18:59
>¦³³oºØ¨Æ? ¾Ú§Ú©Òª¾¥u­n¯à¶¶§Q«Ø¦n RTTI ´N¤@©w¯àÂà¡A­Y¤£¯àÂà´N¬O¤£À³¸Ó³o¼ËÂà
¦pªGdynamic_cast¥i¥H¨M©w¯à¤£¯àÂà¡A¤£¯àÂà´N¬O¿ùªº¡C¨º´Ndynamic_cast¨M©w¤@¤Á´N¦n¤F¡A¦ó¥²¦³static_cast?

>¦³³oºØ¨Æ? ¾Ú§Ú©Òª¾¥u­n¯à¶¶§Q«Ø¦n RTTI ´N¤@©w¯àÂà¡A­Y¤£¯àÂà´N¬O¤£À³¸Ó³o¼ËÂà
ª«¥ó­Y³£¬O¦b§A¦P¤@­Óµ{¦¡¤U¥Í¦¨¡A·íµMı±o¤£À³¸Ó¦³³oµ¥¨Æ¡C
­Y¨â­Óµ{¦¡(¥i¯à¦b¦P¤@­Ó¨t²Î¤]¥i¯à¦b¤£¦Pªº¸Ë¸m¤U)¡A¶Ç¹L¨Óªºª«¥ó¦p¦ó³q¹Ldynamic_cast?
³o³q±`¬O¾a³q°T¨ó©w½T©w¸ê®Æµ²ºc¡AµM«á´N±jÂà¡C
Á`¤£¯à»¡¦]¤£¯à³q¹Ldynamic_cast¡AµM«á»¡C++¤£¾A¦X¼¶¼g³q°T¨ó©w§a¡C
¦A¼á²M¤@¦¸¡Adynamic_cast¤£¯à³q¹L¡A¥u¬OÀË´ú¤£¯à½T»{¦w¥þ¡A¤£¬O¤@©w¬O­Ó¿ù»~¡C
«e­±§Ú¨º­ÓDerived3ªº¸ê®Æµ²ºc©MBase¬O¤@¼Ò¤@¼Ëªº¡A¥u­n½T©w³o­Ó¡A±jÂà´N¨S°ÝÃD¡C
·íµM¥HC++ªºÆ[ÂI¡A¦b¦P¤@­Óµ{¦¡¤º²£¥Íªºª«¥ó¡A°µ¨ì­n±jÂण¬O¦n¨Æ¡C¦ý¦P¼Ëdynamic_cast¤]¤£¬O¦n¨Æ¡C
¦³¦¹¤@¬£»¡ªk¡AC++ªºµ{¦¡¤£À³¸Ó¥Î¨ìdynamic_cast¡C©Ò¦³¥Î¨ìdynamic_cast³£¥i¥H¥Î§Oªº¸û¦nªº¤è¦¡¸Ñ¨M¡C
³o­Ó»¡ªkªº¥ß½×¤§¤@¡A¬O¦w¥þ¬Oµ{¦¡­û³d¥ô¤£¬O½s;¹¡A¤£¬O½s;¹;¨ä¤G¬O¬O¦nªºµ{¦¡¬O¤£»Ý­nDowncastªº¡C
¦ý¨SÅ¥¹L¨º¬£»¡ªk¡A»¡static_cast¬O¤£»Ý­nªº±jÂà¡C(¦ý³o¤£¬O»¡¡A§â©Ò¦³ªºdynamic_cast§ï¦¨static_castªº·N«ä³á)
³o©M¥H«e¦³Ãögoto¸Ó¤£¸Ó¥Îªºª§Ä³¦³ÂI¹³¡A§Ú¤ñ¸û¦P·N¤£¸ÓÀݥΦӤ£¬Oµ´¹ï¤£¯à¥Î¡C
§@ªÌ : cxxlman(CxxlMan) C++Àu¨q¦n¤â¶K¤å¶W¹L1000«h
[ ¶K¤å 1036 | ¤H®ð 3227 | µû»ù 1260 | µû»ù/¶K¤å 1.22 | °e¥Xµû»ù 27 ¦¸ ] 
[ µ¹­ÓÆg ]  [ µ¹­ÓÆg ]  [ ¦^À³¥»¤å ]  [ µoªí·s¤å ]  [ ¦^¤W­¶ ] [ ¦^°Q½×°Ï¦Cªí ] [ ¦^ª¾ÃѤJ¤f ]
2017/12/1 ¤U¤È 03:15:57

>>¦³³oºØ¨Æ? ¾Ú§Ú©Òª¾¥u­n¯à¶¶§Q«Ø¦n RTTI ´N¤@©w¯àÂà¡A­Y¤£¯àÂà´N¬O¤£À³¸Ó³o¼ËÂà
>¦pªGdynamic_cast¥i¥H¨M©w¯à¤£¯àÂà¡A¤£¯àÂà´N¬O¿ùªº¡C¨º´Ndynamic_cast¨M©w¤@¤Á´N¦n¤F¡A¦ó¥²¦³static_cast?

°ò¥»¤W¬Oªº¡A¦ý¦b³t«×¤W®t«Ü¤j¡A¦Ó¥B dynamic_cast ¤£·|±j¨îÂà§Î

>>¦³³oºØ¨Æ? ¾Ú§Ú©Òª¾¥u­n¯à¶¶§Q«Ø¦n RTTI ´N¤@©w¯àÂà¡A­Y¤£¯àÂà´N¬O¤£À³¸Ó³o¼ËÂà
>ª«¥ó­Y³£¬O¦b§A¦P¤@­Óµ{¦¡¤U¥Í¦¨¡A·íµMı±o¤£À³¸Ó¦³³oµ¥¨Æ¡C
>­Y¨â­Óµ{¦¡(¥i¯à¦b¦P¤@­Ó¨t²Î¤]¥i¯à¦b¤£¦Pªº¸Ë¸m¤U)¡A¶Ç¹L¨Óªºª«¥ó¦p¦ó³q¹Ldynamic_cast?
>³o³q±`¬O¾a³q°T¨ó©w½T©w¸ê®Æµ²ºc¡AµM«á´N±jÂà¡C

§A·Q¤Ó¦h¤F¡Adynamic_cast ¥u°µ¦P¤@­Óª«¥ó¤¶­±¶¡ªºÂà´«¡A¤£¬Oª«¥ó¤§¶¡ªºÂà´«
§@ªÌ : sunyear(coco) VC++¨ô¶V±M®aC++³»¦y°ª¤â¶K¤å¶W¹L2000«h
[ ¶K¤å 2421 | ¤H®ð 1485 | µû»ù 6060 | µû»ù/¶K¤å 2.5 | °e¥Xµû»ù 5 ¦¸ ] 
[ µ¹­ÓÆg ]  [ µ¹­ÓÆg ]  [ ¦^À³¥»¤å ]  [ µoªí·s¤å ]  [ ¦^¤W­¶ ] [ ¦^°Q½×°Ï¦Cªí ] [ ¦^ª¾ÃѤJ¤f ]
2017/12/1 ¤U¤È 06:17:04
>§A·Q¤Ó¦h¤F¡Adynamic_cast ¥u°µ¦P¤@­Óª«¥ó¤¶­±¶¡ªºÂà´«¡A¤£¬Oª«¥ó¤§¶¡ªºÂà´«
¤£¬O·Q¤Ó¦h¡A¥u¬O«ü¥X¡A¦³¨ÇÂ૬¬O¹ïªº¤]¬O¥²»Ý¡A¦ýdynamic_castµLªkµo´§§@¥Î¡C
¤£¥u¬O¦P¤@­Óµ{¦¡¤º«¬§OªºÂà´«¡Adynamic_cast§P§Oªº¨Ì¾Ú¬O¦s©ñ¦bµêÀÀ¨ç¦¡ªí¸Ì­±¡C
­Y¬OÃþ§O¨S¦³µêÀÀ¨ç¦¡¡Adynamic_cast¤]µLªkµo´§§@¥Î¡C

Á`¤§¡A¥i¤£¥i¥HÂ૬¡AÁÙ¬O¥Hµ{¦¡­û§PÂ_¬°¥D¡Adynamic_cast¥u¬OÀ°ÂI¦£¡C
»¡dynamic_cast¥i¥HÂ૬¦¨¥\¡A¨ºÂ૬¤@©w¬O¦w¥þªº¡A¬O¹ïªº¡C
¦ý­Y»¡dynamic_castÂ૬¤£¦¨¥\¡A¨ºÂ૬¤@©w¬O¿ùªº¡A¨º´N¹ïdynamic_cast¨Ì¿à¹L²`¤F¡C

§@ªÌ : cxxlman(CxxlMan) C++Àu¨q¦n¤â¶K¤å¶W¹L1000«h
[ ¶K¤å 1036 | ¤H®ð 3227 | µû»ù 1260 | µû»ù/¶K¤å 1.22 | °e¥Xµû»ù 27 ¦¸ ] 
[ µ¹­ÓÆg ]  [ µ¹­ÓÆg ]  [ ¦^À³¥»¤å ]  [ µoªí·s¤å ]  [ ¦^¤W­¶ ] [ ¦^°Q½×°Ï¦Cªí ] [ ¦^ª¾ÃѤJ¤f ]
2017/12/2 ¤U¤È 09:05:18
§Ú¬O·d¤£¥X§A»¡ªºª¬ªp¡A§A§Ë¤@­Ó¨Ó¬Ý¬Ý¡A¦b¦¹¤§«e§Ú»{¬° dynamic_cast µ´¹ï¥¿½T¡A§_«h RTTI ªº»ù­È±N¤@¤i
¤§¶¡¥Ë¸Ñ¡ARTTI ¥»¨Ó´N¬O°µ class type ªºÃö«Y§PÂ_¥Îªº¡A¥²¶·­nµ´¹ï¥i¾a

#include <iostream>

using namespace std;

class A1
{
public:
¡@virtual ~A1() {}
};

class A2
{
};

class B1:public A1, public A2
{
};

class B2 :public A1
{
};

class C1 :public B1
{
};

class C2 :public B2
{
};

int main()
{
¡@A1 *pA1 = new C1;
¡@
¡@A2 *pA2 = dynamic_cast<A2*>(pA1);
¡@cout << "dynamic_cast<A2*>(pA1) pA1 is C1: " << ((pA2) ? "YES" : "NO") << endl; // YRS

//¡@C1 *pC1 = dynamic_cast<C1*>(pA2); // A2 ¨S¦³ RTTI ½sĶ¦Û°Ê¾×±¼
//¡@cout << "dynamic_cast<C1*>(pA2) pA2 is C1: " << ((pC1) ? "YES" : "NO") << endl;

¡@pA1 = new C2;

¡@pA2 = dynamic_cast<A2*>(pA1);
¡@cout << "dynamic_cast<A2*>(pA1) pA1 is C2: " << ((pA2) ? "YES" : "NO") << endl; // NO

//¡@C1 *pC1 = dynamic_cast<C1*>(pA2); // A2 ¨S¦³ RTTI ½sĶ¦Û°Ê¾×±¼
//¡@cout << "dynamic_cast<C1*>(pA2) pA2 is C2: " << ((pC1) ? "YES" : "NO") << endl;

¡@return 0;
}
§@ªÌ : sunyear(coco) VC++¨ô¶V±M®aC++³»¦y°ª¤â¶K¤å¶W¹L2000«h
[ ¶K¤å 2421 | ¤H®ð 1485 | µû»ù 6060 | µû»ù/¶K¤å 2.5 | °e¥Xµû»ù 5 ¦¸ ] 
[ µ¹­ÓÆg ]  [ µ¹­ÓÆg ]  [ ¦^À³¥»¤å ]  [ µoªí·s¤å ]  [ ¦^¤W­¶ ] [ ¦^°Q½×°Ï¦Cªí ] [ ¦^ª¾ÃѤJ¤f ]
2017/12/3 ¤U¤È 09:23:48
>§Ú¬O·d¤£¥X§A»¡ªºª¬ªp¡A§A§Ë¤@­Ó¨Ó¬Ý¬Ý
§A¬O«ü³o¥y¸Ü:"­Y¬OÃþ§O¨S¦³µêÀÀ¨ç¦¡¡Adynamic_cast¤]µLªkµo´§§@¥Î"?
§Aªº¨Ò¤l¡A½s;¹¤£¬O¤v¸gµo¥X¡A¦]¨SµêÀÀ¨ç¦¡µLªk¨Ï¥Îdynamic_cast¤F¶Ü?
¦Ü©ó¦³µêÀÀ¨ç¦¡ªº±¡ªp¡A§Ú«e­±Derived3ªº¨Ò¤l´N¬O°Ú¡C
¥¦¥Îstatic_cast¬O¥i¤u§@ªº¡A°õ¦æ¤]¨S°ÝÃD( ´N§A§âÃþ§O§Ë±o§ó½ÆÂø¡A°õ¦æ¤W¤£·|¦³¿ù)¡C
¦ý§A­n°í«ù¤£¯à¨Ï¥Îdynamic_cast´N¬O¿ùªº¡A¨º§Ú¤]¨S¿ìªk¤F¡C
©Ò¦³¥¿¦¡ªº¤å¥ó³£»¡dynamic_castÀˬd¤£¹L¬O¤£¦w¥þªº¡A¦ý³£¨S»¡Àˬd¤£¹L´N¬O¿ùªº¡C
¦Ñ®v¸ò¾Ç¥Í»¡¡A¹L°¨¸ô¨S¹D¸ô¾ÉÅ@«ü´§¥æ³q¬O¤£¦w¥þªº¡C¦b¨S¹D¸ô¾ÉÅ@¤U¡A¾Ç¥Í¥i¥H¿ï¾Ü¤£¹L°¨¸ô©Î¦Û¦æª`·N¦w¥þ¡C
¾Ç¥Í¥ª¥k¬Ý½T¹ê¨S¨Ó¨®¤F¡A¹L°¨¸ô¬O¦w¥þªº¡C¾Ç¥Í¥i¥H¿ï¾Ü¦Û¦æ­t³d¦w¥þ¡C
§@ªÌ : cxxlman(CxxlMan) C++Àu¨q¦n¤â¶K¤å¶W¹L1000«h
[ ¶K¤å 1036 | ¤H®ð 3227 | µû»ù 1260 | µû»ù/¶K¤å 1.22 | °e¥Xµû»ù 27 ¦¸ ] 
[ µ¹­ÓÆg ]  [ µ¹­ÓÆg ]  [ ¦^À³¥»¤å ]  [ µoªí·s¤å ]  [ ¦^¤W­¶ ] [ ¦^°Q½×°Ï¦Cªí ] [ ¦^ª¾ÃѤJ¤f ]
2017/12/6 ¤W¤È 08:54:40

>>§Ú¬O·d¤£¥X§A»¡ªºª¬ªp¡A§A§Ë¤@­Ó¨Ó¬Ý¬Ý
>§A¬O«ü³o¥y¸Ü:'­Y¬OÃþ§O¨S¦³µêÀÀ¨ç¦¡¡Adynamic_cast¤]µLªkµo´§§@¥Î'?

¬O»¡³o¥y "©Ò¿×'¤£¦w¥þ'¥u¬O¨S¿ìªk«OÃÒ¦w¥þ¡A¨Ã¤£¬O»¡Â૬¤@©w¬O¿ùªº" ³o¥y "dynamic_cast¤£¯à³q¹L¡A¥u¬OÀË´ú¤£¯à½T»{¦w¥þ¡A¤£¬O¤@©w¬O­Ó¿ù»~" ÁÙ¦³³o¥y "¦ý§A­n°í«ù¤£¯à¨Ï¥Îdynamic_cast´N¬O¿ùªº¡A¨º§Ú¤]¨S¿ìªk¤F"

>§Aªº¨Ò¤l¡A½s;¹¤£¬O¤v¸gµo¥X¡A¦]¨SµêÀÀ¨ç¦¡µLªk¨Ï¥Îdynamic_cast¤F¶Ü?
>¦Ü©ó¦³µêÀÀ¨ç¦¡ªº±¡ªp¡A§Ú«e­±Derived3ªº¨Ò¤l´N¬O°Ú¡C
>¥¦¥Îstatic_cast¬O¥i¤u§@ªº¡A°õ¦æ¤]¨S°ÝÃD( ´N§A§âÃþ§O§Ë±o§ó½ÆÂø¡A°õ¦æ¤W¤£·|¦³¿ù)¡C
>¦ý§A­n°í«ù¤£¯à¨Ï¥Îdynamic_cast´N¬O¿ùªº¡A¨º§Ú¤]¨S¿ìªk¤F¡C
>©Ò¦³¥¿¦¡ªº¤å¥ó³£»¡dynamic_castÀˬd¤£¹L¬O¤£¦w¥þªº¡A¦ý³£¨S»¡Àˬd¤£¹L´N¬O¿ùªº¡C
>¦Ñ®v¸ò¾Ç¥Í»¡¡A¹L°¨¸ô¨S¹D¸ô¾ÉÅ@«ü´§¥æ³q¬O¤£¦w¥þªº¡C¦b¨S¹D¸ô¾ÉÅ@¤U¡A¾Ç¥Í¥i¥H¿ï¾Ü¤£¹L°¨¸ô©Î¦Û¦æª`·N¦w¥þ¡C
>¾Ç¥Í¥ª¥k¬Ý½T¹ê¨S¨Ó¨®¤F¡A¹L°¨¸ô¬O¦w¥þªº¡C¾Ç¥Í¥i¥H¿ï¾Ü¦Û¦æ­t³d¦w¥þ¡C

§Ú»¡ dynamic_cast<I*>(pObj) Âण¹L´N¬O¿ù¬O«ü I ³o¼h¤¶­±¤£¦s¦b©ó pObj ª«¥ó¤§¤¤¡A¦Ó§Aªº¤£¦w¥þ¬O«ü´NºâÂण¹L¡AI ÁÙ¬O¦³¥i¯à¦s¦b pObj ¤¤¬O¶Ü???­Y¬Oªº¸Ü´N©M§Úªº»{ª¾¬Û®t¤Ó¦h¤F¡A½Ð§A»¡²M·¡¡A³Ì¦n¯à¼g¥X¹ê»Ú¨Ò¤l
§@ªÌ : sunyear(coco) VC++¨ô¶V±M®aC++³»¦y°ª¤â¶K¤å¶W¹L2000«h
[ ¶K¤å 2421 | ¤H®ð 1485 | µû»ù 6060 | µû»ù/¶K¤å 2.5 | °e¥Xµû»ù 5 ¦¸ ] 
[ µ¹­ÓÆg ]  [ µ¹­ÓÆg ]  [ ¦^À³¥»¤å ]  [ µoªí·s¤å ]  [ ¦^¤W­¶ ] [ ¦^°Q½×°Ï¦Cªí ] [ ¦^ª¾ÃѤJ¤f ]
2017/12/6 ¤U¤È 06:05:18
>§Ú»¡ dynamic_cast<I*>(pObj) Âण¹L´N¬O¿ù¬O«ü I ³o¼h¤¶­±¤£¦s¦b©ó pObj ª«¥ó¤§¤¤¡A
>¦Ó§Aªº¤£¦w¥þ¬O«ü´NºâÂण¹L¡AI ÁÙ¬O¦³¥i¯à¦s¦b pObj ¤¤¬O¶Ü???
>­Y¬Oªº¸Ü´N©M§Úªº»{ª¾¬Û®t¤Ó¦h¤F¡A½Ð§A»¡²M·¡¡A³Ì¦n¯à¼g¥X¹ê»Ú¨Ò¤l
§Úªº¨Ò¤l¦b2017/11/22 ¤W¤È 01:20:31´N¬O¡C
¤£ª¾§Aªº"¤¶­±"©M"¦s¦b"«üªº¬O¤°»ò¡A§Ú¥u¯à¸ÑÄÀ§Úªº»{ª¾:
©Ò¿×Ãþ§Oª«¥ó¡A¤À¦¨"¸ê®Æ"(§tµêÀÀ¨ç¦¡ªí)©M¨ç¦¡¡C
§Ú­Ì¦b¶Ç¶Ç»¼©Î½Æ»sª«¥ó®É¡A¨Æ¹ê¤W¥u¬O¦b¶Ç»¼©Î½Æ»s"¸ê®Æ"¡C¨ç¦¡¥u¾a«¬§O¨ú¥Î¡A¨Ã¤£»Ý­n¯u¥¿¶Ç»¼©Î½Æ»s¡C
¯U¸qªº»¡¡A©Ò¿×ª«¥ó«üªº¥u¬O"¸ê®Æ"¨Ã¤£§t¨ç¦¡¥»Åé¡C
©Ò¥H½T»{¸ê®Æ¦¨­û(©Î»¡¸ê®Æµ²ºc)¬Û¦PªºÃþ§O¡A¬O¥i¥H¤¬Â઺¡A§Y¨Ï¦bdynamic_castµLªk¦¨¥\Â૬¡C
¥Hdocument viewªº¸ÑÄÀ¡A¤@­Ódocument¥i¥H¦n´X­Ó¤£¦Pªºview¡C
document´N¬Oª«¥ó¸ê®Æ¡Aview´N¬OÃþ§O¨ç¦¡¡C¤£¦Pªºview¥i¥H¥H¤£¦Pªº§Î¦¡Åã¥Ü¦P¤@­Óª«¥ó¸ê®Æ(¥»¤å¡A¹Ï§Î¡AÁn­µ...)
¤U­±¬O¤@­Ó¨Ò¤l¡A¤@­Ó®y¼Ðª«¥ó¡A¥i¥H¦³¦hºØ(Ãþ§O)§Î¦¡ªºªí¹F:
class Coordinate
{
protected:
double m_X;
double m_Y;
public:
Coordinate(double x, double y) { {m_X = x, m_Y = y; } }
virtual ~Coordinate() {}
};

class CPoint : public Coordinate
{
public:
void ShowPoint() { cout << "Point at (" << m_X <<','<< m_Y<<')' << endl; }
};

class CTan : public Coordinate
{
public:
void ShowTangent() {
cout << "Tangent is " << (m_Y / m_X) << endl;}
};

class CDrawPoint : public CPoint
{
public:
void DrawPoint() {
ShowPoint();
//Draw the point...
}
};


int main()
{
Coordinate Pt(12.0, 22.8);
CPoint *pPoint = static_cast<CPoint *>(& Pt);
pPoint->ShowPoint();
CTan *pTangent = static_cast< CTan *>(&Pt);
pTangent->ShowTangent();
CDrawPoint *pDrawPoint = static_cast< CDrawPoint *>(&Pt);
pDrawPoint->DrawPoint();
return 0;
}
¥H¤W´X­Óª«¥ó¬O¥i¥HÂà¨ÓÂà¥h¡A¥H¾Þ§@¦P¤@­Óª«¥óªº(·Q¹³document-viewªºÆ[¤µ©À¡A¤@­Ó¸ê®Æ¦³¤£¦P§Î¦¡ªº¾Þ§@)¡C
¦ý¨S¦³¤@­ÓÂ૬¥i¥H¨Ï¥Îdynamic_cast¡C


§@ªÌ : cxxlman(CxxlMan) C++Àu¨q¦n¤â¶K¤å¶W¹L1000«h
[ ¶K¤å 1036 | ¤H®ð 3227 | µû»ù 1260 | µû»ù/¶K¤å 1.22 | °e¥Xµû»ù 27 ¦¸ ] 
[ µ¹­ÓÆg ]  [ µ¹­ÓÆg ]  [ ¦^À³¥»¤å ]  [ µoªí·s¤å ]  [ ¦^¤W­¶ ] [ ¦^°Q½×°Ï¦Cªí ] [ ¦^ª¾ÃѤJ¤f ]
2017/12/7 ¤W¤È 10:02:58
§A¦b¶}¤°»òª±¯º¡A§A¼gªº¨Ò¤l¤£¬O´N¦b»¡ static_cast «Ü¤£¦w¥þ¡A­n¥Î dynamic_cast ¤~¦w¥þ¡A§A«ç»ò¤Ï¹L¨Ó»¡

§@ªÌ : sunyear(coco) VC++¨ô¶V±M®aC++³»¦y°ª¤â¶K¤å¶W¹L2000«h
[ ¶K¤å 2421 | ¤H®ð 1485 | µû»ù 6060 | µû»ù/¶K¤å 2.5 | °e¥Xµû»ù 5 ¦¸ ] 
[ µ¹­ÓÆg ]  [ µ¹­ÓÆg ]  [ ¦^À³¥»¤å ]  [ µoªí·s¤å ]  [ ¦^¤W­¶ ] [ ¦^°Q½×°Ï¦Cªí ] [ ¦^ª¾ÃѤJ¤f ]
2017/12/7 ¤U¤È 12:40:44
>§A¦b¶}¤°»òª±¯º¡A§A¼gªº¨Ò¤l¤£¬O´N¦b»¡ static_cast «Ü¤£¦w¥þ¡A­n¥Î dynamic_cast ¤~¦w¥þ¡A§A«ç»ò¤Ï¹L¨Ó»¡
«ç¼Ëªº¤£¦w¥þ?¼g­Ó¨Ò¤lÃÒ©ú§Úªº¨Ò¤l·|¥X¿ù¡C¤£­n¤S¥Îdynamic_cast ·|return null¨Ó»¡¥¦¬O¿ùªº¡C
¨Ï¥Î·|¿ù¤~¥s¿ù¡AÀË´ú»¡¤£ª¾¬O§_¦w¥þ¤£¯à¥s¿ù¡C
§Úªº¨Ò¤l¬O¦b»¡©ú:
½T»{¸ê®Æ¦¨­û(©Î»¡¸ê®Æµ²ºc)¬Û¦PªºÃþ§O¡A¬O¥i¥H¤¬Â઺¡A§Y¨Ï¦bdynamic_castµLªk¦¨¥\Â૬¡C
¨º´X­Ó¤¬Â઺Ãþ§O¡A¸ê®Æµ²ºc§¹¥þ¬Û¦P¡A¤¬¦³¤°»ò°ÝÃD?´N¦]dynamic_castµLªk¦¨¥\?
¥i§_§ä­Ó¦³»¡»¡ªA¤Oªº¤å¥ó¦³»¡¡Adynamic_castµLªk¦¨¥\Â૬ªºª«¥ó´N¤@©w¤£¯àÂà?(·|¥X¿ù)
¦pªG¥u¦³dynamic_cast¦¨¥\¤~¥i¥HÂ૬¡A´N¸ò¥»¤£À³¸Ó¦³static_cast³oªF¦è¤F¡C
§@ªÌ : cxxlman(CxxlMan) C++Àu¨q¦n¤â¶K¤å¶W¹L1000«h
[ ¶K¤å 1036 | ¤H®ð 3227 | µû»ù 1260 | µû»ù/¶K¤å 1.22 | °e¥Xµû»ù 27 ¦¸ ] 
[ µ¹­ÓÆg ]  [ µ¹­ÓÆg ]  [ ¦^À³¥»¤å ]  [ µoªí·s¤å ]  [ ¦^¤W­¶ ] [ ¦^°Q½×°Ï¦Cªí ] [ ¦^ª¾ÃѤJ¤f ]
2017/12/7 ¤U¤È 03:51:20
static_cast ¬YºØµ{«×¤W¥i¥H°µ¨ì±j¨îÂà§Î¡A±j¨îÂà§ÎÁÙ®³¥X¨Ó¤ñ¸û¦w¤£¦w¥þ...:(

#include <iostream>

using namespace std;

class Coordinate
{
protected:
¡@double m_X;
¡@double m_Y;
public:
¡@Coordinate(double x, double y) { {m_X = x, m_Y = y; } }
¡@virtual ~Coordinate() {}
};

class A :public Coordinate
{
¡@int i;
public:
¡@A()
¡@¡@:Coordinate(0,0)
¡@{
¡@}

¡@void Set(double x, double y)
¡@{
¡@¡@i = x*y;
¡@¡@m_X = x;
¡@¡@m_Y = y;
¡@}
};

class B :public Coordinate
{
¡@float i;
public:
¡@B(double x, double y)
¡@¡@:Coordinate(x, y)
¡@{
¡@¡@i = x*y;
¡@}
¡@void Show()
¡@{
¡@¡@cout << m_X << " x " << m_Y << " = " << i << endl;
¡@}
};

int main()
{
¡@B B_Obj(2, 2);
¡@Coordinate *pCoordinate = &B_Obj;

¡@A *pA = static_cast<A*>(pCoordinate); // ´c·d¦¡±j¨îÂà§Î
¡@pA->Set(10, 10);

¡@B_Obj.Show();

¡@return 0;
}

§@ªÌ : sunyear(coco) VC++¨ô¶V±M®aC++³»¦y°ª¤â¶K¤å¶W¹L2000«h
[ ¶K¤å 2421 | ¤H®ð 1485 | µû»ù 6060 | µû»ù/¶K¤å 2.5 | °e¥Xµû»ù 5 ¦¸ ] 
[ µ¹­ÓÆg ]  [ µ¹­ÓÆg ]  [ ¦^À³¥»¤å ]  [ µoªí·s¤å ]  [ ¦^¤W­¶ ] [ ¦^°Q½×°Ï¦Cªí ] [ ¦^ª¾ÃѤJ¤f ]
2017/12/8 ¤W¤È 12:09:12
>static_cast ¬YºØµ{«×¤W¥i¥H°µ¨ì±j¨îÂà§Î¡A±j¨îÂà§ÎÁÙ®³¥X¨Ó¤ñ¸û¦w¤£¦w¥þ...:(
«e­±¤£¬O¤@ª½±j½Õ¡Aµ{¦¡­û½T©wª«¥óªº¸ê®Æµ²ºc¬O¤@¼Ëªº¡A´N¥i¥H±j¨îÂ૬¡C
document viewªºÆ[©À¤]¬O¬Û¦Pªº¸ê®Æ(µ²ºc)¡A¤£¦P¾Þ§@ªºÆ[©À¡C
§A¬G·N°µ¦¨¤£¦Pªº¸ê®Æ(µ²ºc)¥h±j¨îÂ૬¡AµM«áÃÒ©ústatic_cast¤£¦w¥þ¡AÁÙ¬O¤£¯à¥Î?
µ{¦¡¦w¤£¦w¥þ¤£¬O¾adynamic_cast°Õ¡A´Nºâ§A°í«ù¤£¯à¨Ï¥Îstatic_cast(°£«Ddynamic_cast¥i¥H¹LÃö)¡C
µ{¦¡­û¤£¯à¹ï¦Û¤v­t³d¡A´Nºâ¤@¥Í¤@¥@°í«ù¤£¨Ï¥Îstatic_cast¡AÁÙ¬O·|º|¬}¤@¤j°ï¡C
­Y¤£¯à­t³d¦Û¤v¦w¥þ¡A³Ì¦ndynamic_cast¤]³£¤£­n¥Î¡Adowncast¥»¨Ó´N¤£¬O¥²­nªº(°ò¥»¤W³£¦³§ó¦nªº¼gªk´À¥N)¡C
§@ªÌ : cxxlman(CxxlMan) C++Àu¨q¦n¤â¶K¤å¶W¹L1000«h
[ ¶K¤å 1036 | ¤H®ð 3227 | µû»ù 1260 | µû»ù/¶K¤å 1.22 | °e¥Xµû»ù 27 ¦¸ ] 
[ µ¹­ÓÆg ]  [ µ¹­ÓÆg ]  [ ¦^À³¥»¤å ]  [ µoªí·s¤å ]  [ ¦^¤W­¶ ] [ ¦^°Q½×°Ï¦Cªí ] [ ¦^ª¾ÃѤJ¤f ]
2017/12/8 ¤U¤È 01:14:22

>>static_cast ¬YºØµ{«×¤W¥i¥H°µ¨ì±j¨îÂà§Î¡A±j¨îÂà§ÎÁÙ®³¥X¨Ó¤ñ¸û¦w¤£¦w¥þ...:(
>«e­±¤£¬O¤@ª½±j½Õ¡Aµ{¦¡­û½T©wª«¥óªº¸ê®Æµ²ºc¬O¤@¼Ëªº¡A´N¥i¥H±j¨îÂ૬¡C
>document viewªºÆ[©À¤]¬O¬Û¦Pªº¸ê®Æ(µ²ºc)¡A¤£¦P¾Þ§@ªºÆ[©À¡C

¤£ºÞ¦³¨S¦³¤@¼Ë¡A±j¨îÂ૬³£¦³¥i¯àÀ°§AÂà

>§A¬G·N°µ¦¨¤£¦Pªº¸ê®Æ(µ²ºc)¥h±j¨îÂ૬¡AµM«áÃÒ©ústatic_cast¤£¦w¥þ¡AÁÙ¬O¤£¯à¥Î?
>µ{¦¡¦w¤£¦w¥þ¤£¬O¾adynamic_cast°Õ¡A´Nºâ§A°í«ù¤£¯à¨Ï¥Îstatic_cast(°£«Ddynamic_cast¥i¥H¹LÃö)¡C
>µ{¦¡­û¤£¯à¹ï¦Û¤v­t³d¡A´Nºâ¤@¥Í¤@¥@°í«ù¤£¨Ï¥Îstatic_cast¡AÁÙ¬O·|º|¬}¤@¤j°ï¡C

static_cast ¤°»ò®É­ÔIJ¤Î¨ì¤F¦w¥þ³o»â°ì¤F¡A¥¦¥u¬O¬°¤F¹F¨ì¥Øªºªº¤â¬q¡A§A´N²n²n¥Î´N¦n¡A¥u­n±±ºÞ±o©yÁÙ¬O¯à§¹¦¨¥ô°È

>­Y¤£¯à­t³d¦Û¤v¦w¥þ¡A³Ì¦ndynamic_cast¤]³£¤£­n¥Î¡Adowncast¥»¨Ó´N¤£¬O¥²­nªº(°ò¥»¤W³£¦³§ó¦nªº¼gªk´À¥N)¡C

§Ú¥u¬O½T©w¥Î dynamic_cast °µ downcast ¦³µ´¹ïªº¥i«H«×¡A©Ò¥H¥Î¥¦§@¬°¥H¤W¨Ò¤lªºÀË´ú¨Ï¥Î¡A§Ú¤]«Ü¤Ö¥Î dynamic_cast¡A¥D¦]¬O¥¦¤ÓºC¤F¡A©Ò¥H¯u¥¿¥Î©óµ{¦¡ªº³£¬O¨ä¥¦¤èªk¨Ó¹ê²{


§@ªÌ : sunyear(coco) VC++¨ô¶V±M®aC++³»¦y°ª¤â¶K¤å¶W¹L2000«h
[ ¶K¤å 2421 | ¤H®ð 1485 | µû»ù 6060 | µû»ù/¶K¤å 2.5 | °e¥Xµû»ù 5 ¦¸ ] 
[ µ¹­ÓÆg ]  [ µ¹­ÓÆg ]  [ ¦^À³¥»¤å ]  [ µoªí·s¤å ]  [ ¦^¤W­¶ ] [ ¦^°Q½×°Ï¦Cªí ] [ ¦^ª¾ÃѤJ¤f ]
2017/12/8 ¤U¤È 01:50:12
>¤£ºÞ¦³¨S¦³¤@¼Ë¡A±j¨îÂ૬³£¦³¥i¯àÀ°§AÂà
©Ò¥Hµ{¦¡­û½T»{¥i¥HÂà´N¥i¥H¤F¡C¤×¨ä¬Odynamic_castµLªkÂà¦ý¤£¬O¿ù»~ªº®É­Ô¡C

>>§A¬G·N°µ¦¨¤£¦Pªº¸ê®Æ(µ²ºc)¥h±j¨îÂ૬¡AµM«áÃÒ©ústatic_cast¤£¦w¥þ¡AÁÙ¬O¤£¯à¥Î?
>>µ{¦¡¦w¤£¦w¥þ¤£¬O¾adynamic_cast°Õ¡A´Nºâ§A°í«ù¤£¯à¨Ï¥Îstatic_cast(°£«Ddynamic_cast¥i¥H¹LÃö)¡C
>>µ{¦¡­û¤£¯à¹ï¦Û¤v­t³d¡A´Nºâ¤@¥Í¤@¥@°í«ù¤£¨Ï¥Îstatic_cast¡AÁÙ¬O·|º|¬}¤@¤j°ï¡C
>static_cast ¤°»ò®É­ÔIJ¤Î¨ì¤F¦w¥þ³o»â°ì¤F¡A¥¦¥u¬O¬°¤F¹F¨ì¥Øªºªº¤â¬q¡A§A´N²n²n¥Î´N¦n¡A¥u­n±±ºÞ±o©yÁÙ¬O¯à§¹¦¨¥ô°È
¨º¤@¥y¸ÜÅý§A¸ÑŪ¦¨static_cast­ÔIJ¤Î¨ì¦w¥þ»â°ì?
§Ú³£Á¿¤F¦h¤Ö¦¸¡Aµ{¦¡­û¦Û¦æ­t³d¦w¥þ¡A´N¥i¥Îstatic_cast¡A¤£´Nªí©ústatic_cast ¤£·|¦b¦w¥þ¤W¦³¤°»òÀ°¦£¡Cµ{¦¡­û­n¦Û¤v­t³d¦w¥þ¡C

>§Ú¥u¬O½T©w¥Î dynamic_cast °µ downcast ¦³µ´¹ïªº¥i«H«×¡A©Ò¥H¥Î¥¦§@¬°¥H¤W¨Ò¤lªºÀË´ú¨Ï¥Î¡A
¥¦ªº¥i«H«×¬O¥¦½T»{¥i¥HÂà¡A°ò¥»¤W¬O¦w¥þªº¡A¦ý¤£¯àÂणªí¥Ü¬O¿ù»~ªº¡C
¤£¯àÂà¡A¥u¬Ortti¨S¦³¥¿½Tªº¸ê°T¡C

>§Ú¤]«Ü¤Ö¥Î dynamic_cast¡A¥D¦]¬O¥¦¤ÓºC¤F¡A©Ò¥H¯u¥¿¥Î©óµ{¦¡ªº³£¬O¨ä¥¦¤èªk¨Ó¹ê²{
¤£¥u¬OºCªº°ÝÃD¡A±qÄ~©ÓÆ[©À¨Ó»¡downcast´N¤£¬O¤@­Ó¦nµ{¦¡ªº¼gªk¡C
§Aªºclone¨Ò¤l©M§Úcoordinateªº¨Ò¤l¡A³£¦³§ó¦X¥GC++ºë¯«ªº¼gªk¡A¤£»Ý­ndowncast¡C
¦ýstatic_cast«h¬O¦b¬Y¨Ç³õ¦X·|»Ý­nªº¡C¨Ò¦p«e­±´£¨ìªº³q°T¡C
§@ªÌ : cxxlman(CxxlMan) C++Àu¨q¦n¤â¶K¤å¶W¹L1000«h
[ ¶K¤å 1036 | ¤H®ð 3227 | µû»ù 1260 | µû»ù/¶K¤å 1.22 | °e¥Xµû»ù 27 ¦¸ ] 
[ µ¹­ÓÆg ]  [ µ¹­ÓÆg ]  [ ¦^À³¥»¤å ]  [ µoªí·s¤å ]  [ ¦^¤W­¶ ] [ ¦^°Q½×°Ï¦Cªí ] [ ¦^ª¾ÃѤJ¤f ]
2017/12/8 ¤U¤È 04:49:54

§Ú·Q¦bÂ૬³oÂI¤W­n¥ýÁ¿²M·¡¡Adynamic_cast ¬O¦bª«¥ó¦³¥]§tªº class ¤§¶¡ªºÂ૬¡ARTTI ­t³d°µ¦n³o¨Ç°O¿ý¡Adynamic_cast ´N¬O¦b RTTI ªº°O¿ý¤¤¬d§ä¡A¦³§ä¨ì´NÂà¨ì­n¨Dªº class ³o¼h¤¶­±¤W¡A¨S§ä¨ì´Nªí¥Üª«¥ó¤£¥]§t³o­Ó class ªº¦¨¥÷¡A·|¦^ÂÐ NULL¡A©Ò¥H dynamic_cast «OÃÒ¥¿½T»P¦w¥þ

¤ÏÆ[±j¨îÂ૬´N¬O§â¬Y­Ó¸ê®Æµ²ºc­n·í§@­þºØ¼Ë»ª¨Ó¬Ýªº·N«ä¡A©Ò¥H int intVar = (int)floatVar ¥u­n½s;¹¦P·N§A³o¼ËÂà¡A§A´N¥i¥H·í§@ int ¨Ó³B²z¡A³o¥u¬O¤@ºØ¤â¬q¡A©M oo Æ[©À¤¤ªºÂ૬¬O¤£¤@¼Ë¡A¤£­n¦]¬°³£¥sÂ૬¡A´N¦b¨º¸Ì³½¥Ø²V¯]


§@ªÌ : sunyear(coco) VC++¨ô¶V±M®aC++³»¦y°ª¤â¶K¤å¶W¹L2000«h
[ ¶K¤å 2421 | ¤H®ð 1485 | µû»ù 6060 | µû»ù/¶K¤å 2.5 | °e¥Xµû»ù 5 ¦¸ ] 
[ µ¹­ÓÆg ]  [ µ¹­ÓÆg ]  [ ¦^À³¥»¤å ]  [ µoªí·s¤å ]  [ ¦^¤W­¶ ] [ ¦^°Q½×°Ï¦Cªí ] [ ¦^ª¾ÃѤJ¤f ]
2017/12/8 ¤U¤È 08:55:18
>§Ú·Q¦bÂ૬³oÂI¤W­n¥ýÁ¿²M·¡¡Adynamic_cast ¬O¦bª«¥ó¦³¥]§tªº class ¤§¶¡ªºÂ૬¡ARTTI ­t³d°µ¦n³o¨Ç°O¿ý...
³o­Ó§Aª¾§Úª¾¤j®aª¾¡A¤£»Ý­n°Q½×¡C
­«ÂI¦b¡A
­Y¨SRTTI°O¿ý¡A¥i¤£¥i¥HÂà?«ç»òÂà?
­YRTTI°O¿ý¤£¯àÂà¡A¹ê»Ú¤W¥i¥HÂà¡AÂà¤F¤£·|¦³°ÝÃD¡A¥i¤£¥i¥HÂà?/

>©Ò¥H dynamic_cast «OÃÒ¥¿½T»P¦w¥þ
dynamic_cast¤£«OÃÒ¦w¥þªºÂ૬¡Aµ{¦¡­û¥i¤£¥i¥H¦Û¦æ­t³d©M¨M©w­n¤£­nÂà?

>¤ÏÆ[±j¨îÂ૬´N¬O§â¬Y­Ó¸ê®Æµ²ºc­n·í§@­þºØ¼Ë»ª¨Ó¬Ýªº·N«ä¡A©Ò¥H int intVar = (int)floatVar ¥u­n½s;¹¦P·N§A³o¼ËÂà¡A§A´N¥i¥H·í§@ int ¨Ó³B²z¡A
¤£¬O¡A±j¨îÂ૬·N«ä¬O¹ï¿ù©M«áªG¦Û­t¡C

>³o¥u¬O¤@ºØ¤â¬q¡A©M oo Æ[©À¤¤ªºÂ૬¬O¤£¤@¼Ë¡A¤£­n¦]¬°³£¥sÂ૬¡A´N¦b¨º¸Ì³½¥Ø²V¯]
¤£ª¾"³½¥Ø²V¯]"¸o¦W±q¦ó¦Ó¨Ó?
¥H«e¸ò§A°Q½×¡AÁö¦³ª§°õ¡A¦ý³£ÁÙ¦b´N¨Æ½×¨Æªº°Q½×¡C¬ðµM¦w­Ó¸o¦W¡A¬O¤£¬O¸Ó°±¤î°Q½×¤F?
C++ªºÂ૬¬O±qCªºÂ૬ªº§ï¨}ª©¡CÁöµM¦³ªºÂ૬ªº³W«h¯A¤Î¨ìÄ~©ÓÃö«Y¡A¦ý¤£»Ý­n·d¨ì00Æ[©ÀªºÂ૬³o»ò°¶¤j§a¡C
(C¤]¬O¦³Â૬³W«h¡A¥u¬O¤Ö¤FÄ~©Ó¶}Ãö«Yªº³W«h)

²¤Æª§°õÂI¡A
§Ú¨º¤@­Ócoordinateªºµ{¦¡¡A¤°»ò¦a¤è¦³¿ù?(¤£¬O°Q½×¦n¤£¦n³á)
­Y¬O¨S¦³¿ù¡A§Ú­Ìª§°õ¤°»ò?
­Y¬O¦³¿ù¡A½Ð«ü¥X¨º¸Ì¿ù¡C
§A­Y­n»¡¦]¬°dynamic_cast¤£¯à³q¹L¡C
¨ºµ{¦¡ÀH§A§ï¡A­­¨î±ø¥ó¥u¦³Coordinateªº¤lÃþ§O¤£¯à¼W¥[¸ê®Æ¦¨­û(¥]¬AµêÀÀ¨ç¦¡¦¨­û)¡C
­Yµ{¦¡¥ô§A«ç»ò§ï¡A³£¤£¯à¨Ïµ{¦¡¦]¬°static_cast¦Ó¥X¿ù¡A¨º¬°¤°»ò»¡¥¦¿ù¡A¦Ó¤£¬Odynamic_cast¦³©Ò¤£¯à?

«e­±´£¹LªºÆ[©À¡A§A¨S¥¿­±¦^À³¡A¥¦¨ä¹ê¬OÃöÁä:
¤@­ÓÃþ§O¤À¬°¸ê®Æ¦¨­ûªº¾Þ§@¦¨­û¡C
¦pªG¨â­ÓÃþ§O¸ê®Æ¦¨­û¬Û¦Pªº¡A¨º³o¨â­ÓÃþ§Oªºª«¥ó¬O¥i¥H¤¬Â઺¡C
§A­n»¡¥¦¿ù¡A­n¯à«ü¥X¨º¸Ì¿ù¡A¦Ó¤£¯à¥u¬O»¡dynamic_cast¤£³q¹L¡C
dynamic_cast¥»¨Ó´N¦³¥¦ªº­­¨î¡A¨SµêÀÀ¨ç¦¡¤£¯à¹B§@¡A(¥Ø«e)¥u¯à¾aRTTIªºtype information¨ÓÀ˵ø¡A¨S¦³¿ëÃÑ¸ê®Æ¦¨­ûµ²ºc¬O§_¬Û¦P¡C
©Ò¥Hdynamic_castÀˬd¤£¹L¡A´N¥u¥Nªí±qtype information¬Ý¤£¥X¥i¥HÂ૬¡A´N³o¼Ë¦Ó¤v¡A¤£¥²§âdynamic_cast´£¤É¨ì¹ï¿ù¼Ð·Ç¡C

§@ªÌ : cxxlman(CxxlMan) C++Àu¨q¦n¤â¶K¤å¶W¹L1000«h
[ ¶K¤å 1036 | ¤H®ð 3227 | µû»ù 1260 | µû»ù/¶K¤å 1.22 | °e¥Xµû»ù 27 ¦¸ ] 
[ µ¹­ÓÆg ]  [ µ¹­ÓÆg ]  [ ¦^À³¥»¤å ]  [ µoªí·s¤å ]  [ ¦^¤W­¶ ] [ ¦^°Q½×°Ï¦Cªí ] [ ¦^ª¾ÃѤJ¤f ]
2017/12/9 ¤W¤È 11:52:01
RTTI ©M±j»sÂ૬¬O¨â­Ó¤£¦P»â°ìÀ³¥ÎªºªF¦è¡A¤£¯à²V¬°¤@½Í¡A­Y§â±j»sÂ૬§ï¦W¥sÅÜ«¬¥i¯à¦b¦r­±©M·§©À¤W·|¤ñ¸û²M·¡¡A
ÅÜ«¬¬O¬O¤ñ¸û§C¶¥»y¨¥ªº³B²z¤âªk¡A´N¹³²Õ¦X»y¨¥§â¤@¶ô°O¾ÐÅé·í§@­þºØ type ¨Ó¬Ý«Ýªº·N¸q¬Û·í

RTTI ¬O­n¥Î©ó oo ³o»â°ìªºªF¦è¡A§A»¡ RTTI ¶·¦³ vTable ¤~·|¦s¦b¡A³o¤]¨S¿ìªk¡AC++ ´N³o¼Ë³]­p¡A¤]¥u¦n±Ä¥Î¦³ vTable ªºµ²ºc¡A
³o¬O¤£¦P»â°ìªº°ÝÃD¡A¤£¬O C++ §Þ³Nªº°ÝÃD¡AÂ૬©MÅÜ«¬µLªk¤¬¬Û¨ú¥N
§@ªÌ : sunyear(coco) VC++¨ô¶V±M®aC++³»¦y°ª¤â¶K¤å¶W¹L2000«h
[ ¶K¤å 2421 | ¤H®ð 1485 | µû»ù 6060 | µû»ù/¶K¤å 2.5 | °e¥Xµû»ù 5 ¦¸ ] 
[ µ¹­ÓÆg ]  [ µ¹­ÓÆg ]  [ ¦^À³¥»¤å ]  [ µoªí·s¤å ]  [ ¦^¤W­¶ ] [ ¦^°Q½×°Ï¦Cªí ] [ ¦^ª¾ÃѤJ¤f ]
2017/12/9 ¤U¤È 03:28:07
>RTTI ©M±j»sÂ૬¬O¨â­Ó¤£¦P»â°ìÀ³¥ÎªºªF¦è¡A¤£¯à²V¬°¤@½Í¡A­Y§â±j»sÂ૬§ï¦W¥sÅÜ«¬¥i¯à¦b¦r­±©M·§©À¤W·|¤ñ¸û²M·¡¡A
²V¬°¤@½ÍÁÙ¬O¸ò»¡§Ú³½¥Ø²V¯]·N«ä®t¤£¦h¡C¥u¬O¦©¤@­Ó³o¼Ëªº´U¤l¡A¦n¤ï¤Þ­Ó§Ú¨º¸Ì³½¥Ø²V¯]ªº½×­z§a?
±q¨Ó¨S»¡dynamic_cast©Mstatic_cast¬O¤@¼Ëªº¡Aª§Ä³ÂI³£¦b§Ú¨Ï¥Îstatic_castªº¦a¤è¡A§A¥Î¦]¬°dynamic_cast¤£·|³q¹L¡A©Ò¥H¬O¿ùªº§a¡C
(§A§â¸Ó¥Îstatic_castªº¦a¤è¡A°í«ù­n¥Îdynamic_castÂ૬¤~¦³²V¬°¤@½Íªº¶ûºÃ§a)
§A§âdynamic_cast°µ°µ¹ï¿ùªº¼Ð·Ç¡A§Ú»{¬°¥¦¤£³q¹L¥uªí©ú¤£¦w¥þ¡A¨Ã¤£ªí¥Üµ{¦¡¬O¿ùªº¡Cµ{¦¡­û»{¬°¬O¹ïªº¡A´N¥i¥H¥Îstatic_castÂ૬¡A§A­n¥sÅÜ«¬¡A¥sÅ]ªk³£¥i¥H¡C
§Ú¥i¥H§â«e­±©Ò¦³ªº¶K¤åstatic_cast¥þ³¡§ï¬°ÅÜ«¬¡A½×­z¤£ÅÜ¡Aª§Ä³¤£ÅÜ¡A¦³¤°»ò·N¸q?
ª§Ä³¬O§Ú»{¬°¨ºcoordinate¥i¥H¹B§@µL»~ªº¡C§A­n»¡¥¦¿ù¡A­n«ü¥X¦óª¬ªp¤£¯à¹B§@¡A¦Ó¤£¬O¥Hdynamic_cast¤£¯à¹L¡A©Ò¥H¤£¯à³o¼Ë¼g¡C

¥t¥~­n½Í¨ì¦Wµü¹ï¿ù¡A§âstatic_castºÙ¤J±j¨îÂ૬¡A¤~¯uªº¬O¿ùªº¡C
C++ªº±j¨îÂ૬¬Oreinterpret_cast
static_cast¥¿½T¥sÀRºAÂ૬¡A¥¦¤]¬O¦³Àˬd¥\¯àªº¡A¥u¬OÀˬd­­©ó½sͶ¥¬q(Âà´«ÁÙ¬O¦b¹B¦æ¶¥¬q)¡C
dynamic_cast¬Û¹ï©ó½sͶ¥¬qªºÀˬd¡A¥¦¦b¦³type information ªº±ø¥ó¤U¥i¥H¦b¹B¦æ¶¥¬q°µ¦w¥þ©ÊÀˬd

³o¨Ç¬Û«H§A³£ª¾¹D¡A½Ð¬Û«H§Ú¤]²M·¡¡C¤£­n¦Ñ¬O¶¨ì¦n¹³§Ú¤£¤F³o´X­Ócastªº¥\¯à¡C
§Ú¨ºcoordinateªºµ{¦¡¡A°ò¦´N¬O¬Û¦Pªº¸ê®Æµ²ºc¡A¤£¦Pªº¾Þ§@¡A¨Ï¥ÎÄ~©Ó©Mstatic_cast¹ê²{¡C
§Ú«e¤@½gÂФå¡A¤v²¤Æ°ÝÃDÂI¡A½Ð´N§Úªº°ÝÃD¦^ÂСA¤£­n¤SÂà¨ì¦Wµü·í»P¤£·í¡C

§@ªÌ : cxxlman(CxxlMan) C++Àu¨q¦n¤â¶K¤å¶W¹L1000«h
[ ¶K¤å 1036 | ¤H®ð 3227 | µû»ù 1260 | µû»ù/¶K¤å 1.22 | °e¥Xµû»ù 27 ¦¸ ] 
[ µ¹­ÓÆg ]  [ µ¹­ÓÆg ]  [ ¦^À³¥»¤å ]  [ µoªí·s¤å ]  [ ¦^¤W­¶ ] [ ¦^°Q½×°Ï¦Cªí ] [ ¦^ª¾ÃѤJ¤f ]
2017/12/9 ¤U¤È 05:40:26

>²V¬°¤@½ÍÁÙ¬O¸ò»¡§Ú³½¥Ø²V¯]·N«ä®t¤£¦h¡C¥u¬O¦©¤@­Ó³o¼Ëªº´U¤l¡A¦n¤ï¤Þ­Ó§Ú¨º¸Ì³½¥Ø²V¯]ªº½×­z§a?

class Coordinate
{
protected:
¡@double m_X;
¡@double m_Y;
public:
¡@Coordinate(double x = 0, double y = 0) { {m_X = x, m_Y = y; } }
¡@virtual ~Coordinate() {}
};

class CPoint : public Coordinate
{
public:
¡@void ShowPoint() { cout << "Point at (" << m_X << ',' << m_Y << ')' << endl; }
};

int main()
{
¡@Coordinate *Pt = new Coordinate;
¡@CPoint *pPoint = static_cast<CPoint *>(Pt); // ³o¥sÅܧÎ

¡@pPoint = new CPoint;
¡@Pt = pPoint;
¡@pPoint = static_cast<CPoint *>(Pt); // ³o¥sÂà§Î

¡@return 0;
}

Pt ¦³¨S¦³ CPoint ¦¨¥÷«Ü­«­n¡A¥ý¦b³oÂç²M¡AÁ×§K¦A¦U»¡¦U¸Ü

>¥t¥~­n½Í¨ì¦Wµü¹ï¿ù¡A§âstatic_castºÙ¤J±j¨îÂ૬¡A¤~¯uªº¬O¿ùªº¡C
>C++ªº±j¨îÂ૬¬Oreinterpret_cast

§Úª¾¹D¡A§A´N¥ý§OºÞ³o­Ó¡A¶V»¡¶V¨S¥æ¶°
§@ªÌ : sunyear(coco) VC++¨ô¶V±M®aC++³»¦y°ª¤â¶K¤å¶W¹L2000«h
[ ¶K¤å 2421 | ¤H®ð 1485 | µû»ù 6060 | µû»ù/¶K¤å 2.5 | °e¥Xµû»ù 5 ¦¸ ] 
[ µ¹­ÓÆg ]  [ µ¹­ÓÆg ]  [ ¦^À³¥»¤å ]  [ µoªí·s¤å ]  [ ¦^¤W­¶ ] [ ¦^°Q½×°Ï¦Cªí ] [ ¦^ª¾ÃѤJ¤f ]
2017/12/9 ¤U¤È 06:36:46
>Pt ¦³¨S¦³ CPoint ¦¨¥÷«Ü­«­n¡A¥ý¦b³oÂç²M¡AÁ×§K¦A¦U»¡¦U¸Ü
¤°»ò¦¨¥÷¡A§O¤H¤£À´¡C
­Y»¡¦å½tÃö«Y¡A«e­±§Ú¤v¸g¸ÑÄÀ¹L¤F¡C
Ãþ§O¤À¦¨¨â³¡¥÷¡A¸ê®Æ©M¾Þ§@¡C
©Ò¿×ª«¥ó¹êÅ餺®e¡A´N¬O«ü¸ê®Æ¦Ó¤v¡C¦]¬°CPointÃþ§O¨Ã¨S¦³¦Û¤vªº¸ê®Æ¦¨­û¡A©Ò¥H
CPointª«¥ó©MCoordinateª«¥ó(¸ê®Æµ²ºc)¬O§¹¥þ¤@¼Ëªº¡C
¬Û¦Pªºª«¥ó(¸ê®Æ)Pt¥i¥H¦b Coordinate¡A·íµM¤]¥i¥H¦bCPoint¾Þ§@¡C
(¥»¨Ó³o¨â­ÓÃþ§O³]­p³£¬O¦b¾Þ§@¬Û¦Pªº¸ê®Æ)
­n«ç»ò§i¶D½s;¹¡Aµ{¦¡­û·Q¥ÎCPointÁÙ¬OCoordinate¾Þ§@¸ê®Æ?
¥Îstatic_cast¶K¤W¼ÐÅÒ´N¬O¤@­Ó¤è¦¡¡C
¹ï¤£¹ï¡AÅçÃÒµ{¦¡©Ò¦³ªº¥\¯àµL»~´N¬O¹ïªº¡C
Pt¶K¤W¤WCPoint¼ÐÅÒ«á¡A°£¤Ftype information¸Ì­±ªº¼ÐÅÒ¨SÅܤ§¥~¡A¥¦´N¬O¦Ê¤À¤§¤@¦ÊªºCPointª«¥ó¡C
type information¨SÅܦ³¨S¤°»ò¼vÅT?©M¨SµêÀÀ¨ç¦¡ªºÃþ§O¤@¼Ë¡A´NRTTI¸Ìªºtype_information¤£¥i¾a¦Ó¤v¡A
§@ªÌ : sunyear(coco) VC++¨ô¶V±M®aC++³»¦y°ª¤â¶K¤å¶W¹L2000«h
[ ¶K¤å 2421 | ¤H®ð 1485 | µû»ù 6060 | µû»ù/¶K¤å 2.5 | °e¥Xµû»ù 5 ¦¸ ] 
[ µ¹­ÓÆg ]  [ µ¹­ÓÆg ]  [ ¦^À³¥»¤å ]  [ µoªí·s¤å ]  [ ¦^¤W­¶ ] [ ¦^°Q½×°Ï¦Cªí ] [ ¦^ª¾ÃѤJ¤f ]
2017/12/9 ¤U¤È 10:11:57
>CPoint *pPoint = static_cast<CPoint *>(Pt); // ³o¥sÅܧÎ
>pPoint = static_cast<CPoint *>(Pt); // ³o¥sÂà§Î
µM«á©O?§Ú´N¤£¤¶·N§A­n¥s¥¦¤°»ò¡C
¹ï§Ú¨Ó»¡¡Aµ{¦¡ÅÞ¿è´N¬O¬Û¦Pªº¸ê®Æµ²ºc¥i¥H³Q½á¤©¤£¦Pªº¾Þ§@¡C
¨Æ¹ê¤W¤]¥i¥H¹B§@µL»~¡C¦Ü©ó­n¥s¥¦¤°»ò¡A§Ú³£¨S·N¨£¡C
§@ªÌ : ccl0504(¤â°Êµ{¦¡²£¥Í¾¹) ¶K¤å¶W¹L200«h
[ ¶K¤å 450 | ¤H®ð 211 | µû»ù 930 | µû»ù/¶K¤å 2.07 | °e¥Xµû»ù 2 ¦¸ ] 
[ µ¹­ÓÆg ]  [ µ¹­ÓÆg ]  [ ¦^À³¥»¤å ]  [ µoªí·s¤å ]  [ ¦^¤W­¶ ] [ ¦^°Q½×°Ï¦Cªí ] [ ¦^ª¾ÃѤJ¤f ]
2017/12/9 ¤U¤È 11:55:56

> clone ´N¬O­n¥þ³¡½Æ»s¡A­Y¤£Âмg´N¥u·| clone ¤W¥b³¡¡A¤U¥b³¡¤£¨£¤F¡A¦ÛµM dynamic_cast<Derived3> ´N·|±o¨ì NULL
> §Ú¥u¬O¥Î dynamic_cast ¨ÓÃÒ©ú clone_pBase2 ¦] Derived2 ¨S¦³½Æ¼g Clone() ·|³y¦¨½Æ»s¤£§¹¥þ¦Ó¤w¡A¨S¦³­n³o¼Ë¨Ï

dynamic_cast (type) »P clone (data) §¹¾ã»P§_À³¸ÓÄÝ©ó¨â¥ó¤£¦Pªº¨Æ±¡ ?


>¦b¦¹¤§«e§Ú»{¬° dynamic_cast µ´¹ï¥¿½T¡A§_«h RTTI ªº»ù­È±N¤@¤i
>¤§¶¡¥Ë¸Ñ¡ARTTI ¥»¨Ó´N¬O°µ class type ªºÃö«Y§PÂ_¥Îªº¡A¥²¶·­nµ´¹ï¥i¾a

¨º§Ú´c·d¤@¤U dynamic_cast ¦n¤F, ¦b Visual Studio 2017 with RTTI enabled, pA2 ¦³³QÂ૬


#include <stdio.h>
#include <iostream>

using namespace std;

class A1
{
public :
int data1;
public:
virtual ~A1() {}
virtual void Print()
{
cout << "A1" << endl;
}
};

class A2
{
public:
int dataC;
int data1;
public:
virtual ~A2() {}
};

class B1 :public A1
{
};

class B2 : public A2
{
};

int main()
{
A1 *pB1 = new B1;
pB1->data1 = 500;

cout << (void *)pB1 << endl;

A2 *pA2 = dynamic_cast<A2*>((B2 *)pB1);
if (pA2)
{
cout << (void *)pA2 << endl;
cout << pA2->dataC << " " << pA2->data1 << endl;
}

cout << "dynamic_cast<A2*>((B2 *)pB1) pA2_2 is B1: " << ((pA2) ? "YES" : "NO") << endl;

return 0;
}




§@ªÌ : sunyear(coco) VC++¨ô¶V±M®aC++³»¦y°ª¤â¶K¤å¶W¹L2000«h
[ ¶K¤å 2421 | ¤H®ð 1485 | µû»ù 6060 | µû»ù/¶K¤å 2.5 | °e¥Xµû»ù 5 ¦¸ ] 
[ µ¹­ÓÆg ]  [ µ¹­ÓÆg ]  [ ¦^À³¥»¤å ]  [ µoªí·s¤å ]  [ ¦^¤W­¶ ] [ ¦^°Q½×°Ï¦Cªí ] [ ¦^ª¾ÃѤJ¤f ]
2017/12/10 ¤W¤È 01:23:01
>A2 *pA2 = dynamic_cast<A2*>((B2 *)pB1);
C style cast ¬Û·í©ó C++ªº reinterpret_cast¡A¬O¤@ºØ¤£ÅU¤@¤ÁªºÂ૬¡AÂ૬«á³stype information(­Y¦³ªº¸Ü)¤@¨Ö§ó§ï¡C
³o¬O¯u¥¿±j«Á¦¡Â૬¡A¤£¡A¨¥­«¤F....¬O±j¨îÂ૬¡C
static_cast¥¦ÁÙ¬O¦³§@¦w¥þ©ÊÀˬdªº¡A§A³o¦æµ{¦¡§ï¦¨static_cast¡A¦b½sͶ¥¬q´N·|³Q¾×¤U¨Ó:
A2 *pA2 = dynamic_cast<A2*>(static_cast<B2 *>(pB1));
static_castÁÙ¬O·|§@°ò¥»¦å½tªºÀˬd¡A·íÂ૬¬O±q°òÃþÂ૬­l¥ÍÃþ§O®É¡A½s;¹·|¹LÃö¡A§_«h·|¾×¤U¨Ó¡C
³oªí¥Ü¡AC++¦b³W½d®É¤vª¾¦³¨Ç°òÃþ§Oª«¥óÁö¤£¬O­ì¥Í¦Û­l¥ÍÃþ§O¡A¦ý·|¦³Â૬­l¥ÍÃþ§Oªº»Ý­n¡C
(¤£µM´N¤@­Ódynamic_cast¥´³qÃö´N¦n¤F¡A·d¨º»ò¦hcast°µ¤°»ò?)
§Ú¨ºCoordinate¨Ã¤£¬O´c·d¡A¦Ó¬O¨Ìstatic_castºë¯«¥h¨Ï¥Îªº¡A³o¼Ë³£³QC¤j§P¦º¸o¤F¡A
§A³o¬O¥Ç¤F±j«Á¸o¡A¤£¡A¤S»¡¿ù¤F¡A¬O±j¨î¸o¡I·|³Q¥´¤J¤Q¤K¼h¦aÀ®ªº¡C«¢«¢
§@ªÌ : ccl0504(¤â°Êµ{¦¡²£¥Í¾¹) ¶K¤å¶W¹L200«h
[ ¶K¤å 450 | ¤H®ð 211 | µû»ù 930 | µû»ù/¶K¤å 2.07 | °e¥Xµû»ù 2 ¦¸ ] 
[ µ¹­ÓÆg ]  [ µ¹­ÓÆg ]  [ ¦^À³¥»¤å ]  [ µoªí·s¤å ]  [ ¦^¤W­¶ ] [ ¦^°Q½×°Ï¦Cªí ] [ ¦^ª¾ÃѤJ¤f ]
2017/12/10 ¤U¤È 12:08:16


¥h¬d¤F¤@¤U assembly code, µo²{ dynamic_cast ¬O downcasting ªº®É­Ô, ¤~·| call __RTDynamicCast
upcasting «h¬O»P static_cast ¬Û¦P, ¦b compile ¶¥¬q´N°µÀˬd¤F

 
#include "stdafx.h"

#include <stdio.h>
#include <iostream>

using namespace std;

class A1
{
public :
int data1;
public:
virtual ~A1() {}
virtual void Print()
{
cout << "A1" << endl;
}
};

class A2
{
public:
int dataC;
int data1;
public:
virtual ~A2() {}
};

class B1 :public A1
{
};

class B2 : public A2
{
};

class C1 : public B1, public B2
{
};

int main()
{
A1 *pB1 = new B1;
pB1->data1 = 500;

cout << (void *)pB1 << endl;

A2 *pA2 = dynamic_cast<A2*>((B2 *)pB1);
if (pA2)
{
cout << (void *)pA2 << endl;
cout << pA2->dataC << " " << pA2->data1 << endl;
}

cout << "dynamic_cast<A2*>((B2 *)pB1) pA2_2 is B1: " << ((pA2) ? "YES" : "NO") << endl;

B1*pA1 = dynamic_cast<B1*>(pB1);

C1 *pC1 = new C1;
B1 *pB1_2 = dynamic_cast<B1*>(pC1);
C1 *pC1_2 = dynamic_cast<C1*>(pB1_2);

B1 *pB1_3 = static_cast<B1*>(pC1);
C1 *pC1_3 = static_cast<C1*>(pB1_2);

return 0;
}



; 63 : B1 *pB1_2 = dynamic_cast<B1*>(pC1);

mov rax, QWORD PTR pC1$[rbp]
mov QWORD PTR pB1_2$[rbp], rax

; 64 : C1 *pC1_2 = dynamic_cast<C1*>(pB1_2);

mov DWORD PTR [rsp+32], 0
lea r9, OFFSET FLAT:??_R0?AVC1@@@8
lea r8, OFFSET FLAT:??_R0?AVB1@@@8
xor edx, edx
mov rcx, QWORD PTR pB1_2$[rbp]
call __RTDynamicCast
mov QWORD PTR pC1_2$[rbp], rax


; 65 :
; 66 : B1 *pB1_3 = static_cast<B1*>(pC1);

mov rax, QWORD PTR pC1$[rbp]
mov QWORD PTR pB1_3$[rbp], rax

; 67 : C1 *pC1_3 = static_cast<C1*>(pB1_2);

mov rax, QWORD PTR pB1_2$[rbp]
mov QWORD PTR pC1_3$[rbp], rax

§@ªÌ : ccl0504(¤â°Êµ{¦¡²£¥Í¾¹) ¶K¤å¶W¹L200«h
[ ¶K¤å 450 | ¤H®ð 211 | µû»ù 930 | µû»ù/¶K¤å 2.07 | °e¥Xµû»ù 2 ¦¸ ] 
[ µ¹­ÓÆg ]  [ µ¹­ÓÆg ]  [ ¦^À³¥»¤å ]  [ µoªí·s¤å ]  [ ¦^¤W­¶ ] [ ¦^°Q½×°Ï¦Cªí ] [ ¦^ª¾ÃѤJ¤f ]
2017/12/10 ¤U¤È 12:30:48

>§Ú¨ºCoordinate¨Ã¤£¬O´c·d¡A¦Ó¬O¨Ìstatic_castºë¯«¥h¨Ï¥Îªº¡A³o¼Ë³£³QC¤j§P¦º¸o¤F¡A
>§A³o¬O¥Ç¤F±j«Á¸o¡A¤£¡A¤S»¡¿ù¤F¡A¬O±j¨î¸o¡I·|³Q¥´¤J¤Q¤K¼h¦aÀ®ªº¡C«¢«¢

§O³o»ò»¡¨S~
¹ê§@¤W¦³¥i¯à§â object ¦s¨ì list ¤W, Ū¥Xªº®É­Ô«¬ºA cast ¿ù, ´N³y¦¨¸ú¹L¤F complier casting ªºÀˬd
©Ò¥H°£¤F¨Ì¿à compiler ªº¯à¤O¥~, programmer À³¸Ó¤]­n¤F¸Ñ¦Û¤v¦b¼g¤°»ò§a. ^^

§@ªÌ : sunyear(coco) VC++¨ô¶V±M®aC++³»¦y°ª¤â¶K¤å¶W¹L2000«h
[ ¶K¤å 2421 | ¤H®ð 1485 | µû»ù 6060 | µû»ù/¶K¤å 2.5 | °e¥Xµû»ù 5 ¦¸ ] 
[ µ¹­ÓÆg ]  [ µ¹­ÓÆg ]  [ ¦^À³¥»¤å ]  [ µoªí·s¤å ]  [ ¦^¤W­¶ ] [ ¦^°Q½×°Ï¦Cªí ] [ ¦^ª¾ÃѤJ¤f ]
2017/12/10 ¤U¤È 02:36:05
>©Ò¥H°£¤F¨Ì¿à compiler ªº¯à¤O¥~, programmer À³¸Ó¤]­n¤F¸Ñ¦Û¤v¦b¼g¤°»ò§a. ^^
¥»¨Óµ{¦¡¹ï¿ù´N¬Oµ{¦¡­û­n­t³Ì¤jªº³d¥ô¡A´Nºâ½sͱo¹L¡A©Ò¦³ªº°ÊºAÀˬd¤]¨S°ÝÃD¡A
ÁÙ¬O¥i¥H¼g¤@°ï¤£¯àworkªºÄêµ{¦¡¡C
ºÉ«H®Ñ¤£¦pµL®Ñ;­nºÉ«Hdynamic_cast¤£¦pµLdynamic_cast¡C
dynamic_cast¤£·|¹L¡A±j¨îÂ૬¡A¥u­nµ{¦¡­û¦Û¤vª¾¹D¦b°µ¤°»ò¨S¤°»ò¤£¥i¥H¡C
§@ªÌ : sunyear(coco) VC++¨ô¶V±M®aC++³»¦y°ª¤â¶K¤å¶W¹L2000«h
[ ¶K¤å 2421 | ¤H®ð 1485 | µû»ù 6060 | µû»ù/¶K¤å 2.5 | °e¥Xµû»ù 5 ¦¸ ] 
[ µ¹­ÓÆg ]  [ µ¹­ÓÆg ]  [ ¦^À³¥»¤å ]  [ µoªí·s¤å ]  [ ¦^¤W­¶ ] [ ¦^°Q½×°Ï¦Cªí ] [ ¦^ª¾ÃѤJ¤f ]
2017/12/10 ¤U¤È 02:38:02
>dynamic_cast ¬O downcasting ªº®É­Ô, ¤~·| call __RTDynamicCast
>upcasting «h¬O»P static_cast ¬Û¦P, ¦b compile ¶¥¬q´N°µÀˬd¤F
¹ï
§@ªÌ : cxxlman(CxxlMan) C++Àu¨q¦n¤â¶K¤å¶W¹L1000«h
[ ¶K¤å 1036 | ¤H®ð 3227 | µû»ù 1260 | µû»ù/¶K¤å 1.22 | °e¥Xµû»ù 27 ¦¸ ] 
[ µ¹­ÓÆg ]  [ µ¹­ÓÆg ]  [ ¦^À³¥»¤å ]  [ µoªí·s¤å ]  [ ¦^¤W­¶ ] [ ¦^°Q½×°Ï¦Cªí ] [ ¦^ª¾ÃѤJ¤f ]
2017/12/10 ¤U¤È 06:32:39

>>Pt ¦³¨S¦³ CPoint ¦¨¥÷«Ü­«­n¡A¥ý¦b³oÂç²M¡AÁ×§K¦A¦U»¡¦U¸Ü
>¤°»ò¦¨¥÷¡A§O¤H¤£À´¡C

¥Î¥]¸Ë²°°µ¤ñ³ë¦n¤F¡AC ¤ñ¸û­«µø¥]¸Ë²°ªº¤º®eª«¡A¤£¦b¥G¥]¸Ë²°ªø«ç¼Ë¡AC++ «h­«µø¦b¥]¸Ë²°¡A¤£¦b¥G¥]ªº¬O¤°»òªF¦è
©Ò¥H§A¤@ª½ C ªºÆ[ÂI¥h¬Ý C++ ¥Ã»·¤]·d¤£²M·¡
§@ªÌ : cxxlman(CxxlMan) C++Àu¨q¦n¤â¶K¤å¶W¹L1000«h
[ ¶K¤å 1036 | ¤H®ð 3227 | µû»ù 1260 | µû»ù/¶K¤å 1.22 | °e¥Xµû»ù 27 ¦¸ ] 
[ µ¹­ÓÆg ]  [ µ¹­ÓÆg ]  [ ¦^À³¥»¤å ]  [ µoªí·s¤å ]  [ ¦^¤W­¶ ] [ ¦^°Q½×°Ï¦Cªí ] [ ¦^ª¾ÃѤJ¤f ]
2017/12/10 ¤U¤È 06:39:50

>>CPoint *pPoint = static_cast<CPoint *>(Pt); // ³o¥sÅܧÎ
>>pPoint = static_cast<CPoint *>(Pt); // ³o¥sÂà§Î
>µM«á©O?§Ú´N¤£¤¶·N§A­n¥s¥¦¤°»ò¡C
>¹ï§Ú¨Ó»¡¡Aµ{¦¡ÅÞ¿è´N¬O¬Û¦Pªº¸ê®Æµ²ºc¥i¥H³Q½á¤©¤£¦Pªº¾Þ§@¡C
>¨Æ¹ê¤W¤]¥i¥H¹B§@µL»~¡C¦Ü©ó­n¥s¥¦¤°»ò¡A§Ú³£¨S·N¨£¡C

¦b OO ªº¥@¬É𥚃¡A­n°Ñ»P­þ¨Ç¬¡°Ê´N­n¦³¾A·íªº¨­¥÷¡A¤@­Óª«¥ó¯à¤Á´«­þ¨Ç¨­¥÷¨M©w¤F¯à°Ñ¥[­þ¨Ç¬¡°Ê¡A³o¼Ë§A¯à¤F¸ÑÅܧΩMÂà§Î·N¸qªº¤£¦P¶Ü
§@ªÌ : cxxlman(CxxlMan) C++Àu¨q¦n¤â¶K¤å¶W¹L1000«h
[ ¶K¤å 1036 | ¤H®ð 3227 | µû»ù 1260 | µû»ù/¶K¤å 1.22 | °e¥Xµû»ù 27 ¦¸ ] 
[ µ¹­ÓÆg ]  [ µ¹­ÓÆg ]  [ ¦^À³¥»¤å ]  [ µoªí·s¤å ]  [ ¦^¤W­¶ ] [ ¦^°Q½×°Ï¦Cªí ] [ ¦^ª¾ÃѤJ¤f ]
2017/12/10 ¤U¤È 07:13:55
#include <stdio.h>
#include <iostream>

using namespace std;

class A1
{
public:
¡@int data1;
public:
¡@virtual ~A1() {}
¡@virtual void Print()
¡@{
¡@¡@cout << "A1" << endl;
¡@}
};

class A2
{
public:
¡@int dataC;
¡@int data1;
public:
¡@virtual ~A2() {}
};

class B1 :public A1
{
};

class B2 : public A2
{
};

int main()
{
¡@A1 *pB1 = new B1;
¡@pB1->data1 = 500;

¡@cout << (void *)pB1 << endl;

¡@A2 *pA2 = dynamic_cast<A2*>((B2 *)pB1);
¡@if (pA2)
¡@{
¡@¡@cout << (void *)pA2 << endl;
¡@¡@cout << pA2->dataC << " " << pA2->data1 << endl;
¡@}

¡@cout << "dynamic_cast<A2*>((B2 *)pB1) pA2_2 is B1: " << ((pA2) ? "YES" : "NO") << endl;

¡@B2 *pB2 = dynamic_cast<B2*>(pA2);
¡@cout << "dynamic_cast<B2*>(pA2) pA2 is B1: " << ((pB2) ? "YES" : "NO") << endl; // NO

¡@return 0;
}
§@ªÌ : sunyear(coco) VC++¨ô¶V±M®aC++³»¦y°ª¤â¶K¤å¶W¹L2000«h
[ ¶K¤å 2421 | ¤H®ð 1485 | µû»ù 6060 | µû»ù/¶K¤å 2.5 | °e¥Xµû»ù 5 ¦¸ ] 
[ µ¹­ÓÆg ]  [ µ¹­ÓÆg ]  [ ¦^À³¥»¤å ]  [ µoªí·s¤å ]  [ ¦^¤W­¶ ] [ ¦^°Q½×°Ï¦Cªí ] [ ¦^ª¾ÃѤJ¤f ]
2017/12/10 ¤U¤È 10:15:24
>¦b OO ªº¥@¬É𥚃¡A­n°Ñ»P­þ¨Ç¬¡°Ê´N­n¦³¾A·íªº¨­¥÷¡A
>¤@­Óª«¥ó¯à¤Á´«­þ¨Ç¨­¥÷¨M©w¤F¯à°Ñ¥[­þ¨Ç¬¡°Ê¡A³o¼Ë§A¯à¤F¸ÑÅܧΩMÂà§Î·N¸qªº¤£¦P¶Ü
§Ú­Ì¤v¸g¨â±ø¨S¥æ¶°ªº¥­¦æ½u¹ï¸Ü¤F¡C
½Ðµ¹§Aªº»¡ªk¦³¤½«H¤Oªº¤å¥ó¡A§Ú­Ì¦A¨Ó°Q½×­ì¥»¤å¥ó¬O¦b»¡¤°»ò¡C
¥t¥~¡A¤£­n¦A¼G¥p¦Wµü¤F¡A¦n¶Ü?§Ú³£»¡¤F¡A­n¥s¤°»ò§Ú¨S·N¨£¡C
§Ú¨ºcoordinateªºµ{¦¡¡A´N¬O¤@­Ódocument¦³¦h­Ó¤£¦P¾Þ§@ªº¤@ºØ¹ê²{¡C¦³¤°»ò¤£¦XOO?
¥t¤@­ÓÆ[ÂI¡A´N¬O§â¸ê®Æ©M¤èªk°ÊºAªº²Õ¦X¦¨¤@­Óª«¥ó¡C²Õ¦Xªº¤è¦¡¤]¦bC++¤¹³\ªº¤è¦¡¡A¦³¤°»ò¤£¦XOO?
MFC³£¥i¥H°ÊºAªº²£¥Í·sªºÃþ§O¡AÃø¹D¥¦§ó¤£¦XOO¡COO½Íªº¤£¬O«ç»ò²£¥ÍÃþ§Oª«¥ó§a¡C
OO¤Ó§Î¦Ó¤W¤F¡AC++¥u¬OOO¹ê²{ªº¤@ºØµ{¦¡»y¨¥¡C¦pªG§A½Íªº¬OC++ªºÃþ§O¬[ºc¡A¤U­±ªº¤ÀªR¬Ý§A¯à¤£¯à»{¦P¡C
¤@­Ó¨S¦³¥ô¦ó¸ê®Æ¥u¦³¨ç¦¡(¾Þ§@)ªºÃþ§O¡A¥i¥H²£¥Íª«¥ó¶Ü?(¦^ÀY¬Ý§Ú»¡ªº¡A¯U¸qªºª«¥ó«üªº¬O¸ê®Æ¤£¬O¨ç¦¡)
C++¤¹³\³o¼ËªºÃþ§O²£¥Íª«¥ó¡A¦ý¨ä¹ê³o¼ËªºÃþ§O¤v¸g°h¤Æ¦¨¨ç¦¡¸s²Õªºname space¤F¡C§â¨ç¦¡¦¨­û³£¼Ð¤Wstatic§¹¥þ¥i¥H·í°µname space¨Ó¨Ï¥Î¡C
(³s»yªk³£¬Û¦P)
§Y¨Ï¤£¼Ð¤Wstatic¡A°ò¥»¤W³o¨Ç¨ç¦¡¦¨­ûªº¥»½èÁÙ¬Ostatic(³o¬O¬°¤°»ò§Ú»¡¯U¸qªºª«¥ó«üªº¬O¸ê®Æ¤£¬O¨ç¦¡¡Aª«¥ó¸Ì­±®Ú¥»¨S¦³¨ç¦¡¥»Åé)¡C
§A¥Î¥u¦³¨ç¦¡ªºÃþ§O²£¥Í¤@­Óª«¥ó¡AC++ ¬°¤F»y¨¥¬Û®e©Ê¡AÁÙ¬O·|µ¹§A¤@­Óª«¥ó¡A¦ý³o­Óª«¥ó¤º®e¬O¨S·N¸qªº¡C
¥u¦³¨ç¦¡ªºÃþ§O²£¥Í¤@­Óª«¥óªº«ü¼Ð¡A¥iÀH§A«ü©w¥ô¦ó­È¡A¬Æ¦Ü¬Onull¡A¥¦³£¥i¥H¹B§@µL»~¡C©Ò¥H§A¥i¥H§ânull Â૬¦¨³o¼ËªºÃþ§Oª«¥ó¥h¾Þ§@¡C
³o»¡©ú¤F¥u¦³¨ç¦¡ªºÃþ§O¤v°h¤Æ¦¨name spaceµ¥¯Åªº¨Æ¹ê¡C
¦pªG³o­Ó¨S°ÝÃD¡A´N¥i¥H©¹¤U¬Ý¡C
¦pªG¦³¤@¸s¨ç¦¡¬O¥Î¨Ó¾Þ§@®y¼Ð(¦V¶q)Åã¥Ü¦¨¹Ï§Îªº¡C¥t¤@¸s¨ç¦¡¬O¥Î¨Ó¾Þ§@®y¼Ð¥»¤å»¡©úªº¡A¥t¤@¸s¨ç¦¡¬O§â®y¼Ð°µ¤T¨¤¨ç¦¡¾Þ§@........
¥i¤£¥i¥H§â³o¨Ç¸s²Õ¨Ï¥Îname space¤Àªù§OÃþ¼Ð¥Ü¦WºÙ?³o¨S°ÝÃD§a?
¦n¤F¡A¶i¤J°ÝÃD®Ö¤ß¡C³o¨Ç®y¼Ð¾Þ§@ªº¸s²Õ¬O­n¾Þ§@®y¼Ð³oºØ§ÎºAªº¸ê®Æªº¡A«ç»ò¶Ç»¼¸ê®Æµ¹¨ç¨Ï¹Bºâ©Î¾Þ§@?
³o²³æ¡A´N§â®y¼Ð¸ê®Æ°µ¦¨ª«¥ó¥H¤Þ¼Æªº¤è¦¡¶Çµ¹¨ç¦¡´N¥i¥H¤F¡C
¥ØªºÁö¹F¨ì¤F¡A¦ý³o¤£¦XOOªººë¯«¬O§a¡A³Ì¥D­n¬O¨ç¦¡¨S¸j©w¸ê®Æ¡A¸ê®Æªº³sµ²ÁÙ­n¾a¨ä¥¦ªº¾÷¨î¥hºÞ²z¡C
¬JµMC++Ãþ§O¬O¥Ñ¨ç¦¡¥h¾Þ§@¸ê®Æ¡A¨º¬O¤£¬O§â®y¼Ðª«¥ó©M¨ç¦¡¸s²Õµ²¦X¦¨¤@­ÓÃþ§O¡A³o¼Ë¨ç¦¡¸s²Õ´N¦³¤@­Ó¸j©wªº¸ê®Æ¥i¥H¾Þ§@¤F?
¦ý§Ú¤S·Q­n"°ÊºA"ªº«ü©w®y¼Ð­n¥Î¨º¤@­Ó¸s²Õ¨ç¦¡¡A«ç»ò¿ì?
¤@Áû鷄³JÀH¤ßµÛ¤ß±¡¦nÃa¡A¥i¯à­n·Î­nª£©ÎµN(´ö)
¯à¤£¯à§â·Î³J¡Aª£³J©Î³Jªá´ö¡A¤À¦¨§÷®Æªº³J¡A©M·Î¡Aª£¡AµN¤T­Ó¾Þ§@¸s²Õ?
³oºâ¬O¤£¿ùªº¥D·N¡A©Ò¥H§â®y¼Ð¸ê®Æ°µ¦¨¤@­Ó¸ê®Æª«¥ó¡A¦Ó¾Þ§@ªº¨ç¦¡¸s²Õ´N¤ÀÃþ¦¨¯Â¾Þ§@Ãþ§O?(­n°O±o¥u¦³¾Þ§@¨ç¦¡ªºÃþ§O¡A¬Ostatic ¾Þ§@©Ê½è¡Aª«¥ó¨S¦³·N¸q)
µM«á´N¥i¥H§â®y¼Ðª«¥ó©M¾Þ§@¨ç¦¡¡A°ÊºAµ²¦X¦¨©Ò­nªºÃþ§Oª«¥ó¡C¦p®y¼Ð¹Ï§ÎÅã¥Üª«¥ó¡A®y¼Ð¤T¨¤¨ç¦¡ª«¥óµ¥µ¥¡C
­Y¥H«e­±³Jªº·Î¡Aª£¡AµNªº°ÊºAµ²¦X´N¬O·Î³J¡Aª£³J©M³Jªá´ö¡C
¦n¹³¦³ÂI¦b¸Ñ»¡decorator pattern ^^
µL½×¦p¦ó¡A³o¼Ëªº«äºû¡A©MOO¨S¤°»ò¤£¦X¤§³B¡C¥u¬O¦bC++µ²¦X§Ú¤è¦¡¬O±Ä¥ÎÂà§Î¤è¦¡¹ê²{¦Ó¤v¡C
§@ªÌ : sunyear(coco) VC++¨ô¶V±M®aC++³»¦y°ª¤â¶K¤å¶W¹L2000«h
[ ¶K¤å 2421 | ¤H®ð 1485 | µû»ù 6060 | µû»ù/¶K¤å 2.5 | °e¥Xµû»ù 5 ¦¸ ] 
[ µ¹­ÓÆg ]  [ µ¹­ÓÆg ]  [ ¦^À³¥»¤å ]  [ µoªí·s¤å ]  [ ¦^¤W­¶ ] [ ¦^°Q½×°Ï¦Cªí ] [ ¦^ª¾ÃѤJ¤f ]
2017/12/11 ¤W¤È 12:37:16
>¦b OO ªº¥@¬É𥚃¡A­n°Ñ»P­þ¨Ç¬¡°Ê´N­n¦³¾A·íªº¨­¥÷¡A
>¤@­Óª«¥ó¯à¤Á´«­þ¨Ç¨­¥÷¨M©w¤F¯à°Ñ¥[­þ¨Ç¬¡°Ê¡A³o¼Ë§A¯à¤F¸ÑÅܧΩMÂà§Î·N¸qªº¤£¦P¶Ü
§A­n¥sstatic_cast¬OÂ૬ÁÙ¬OÅܧΡAÅ]ªkÁÙ¬O¸ÀÅÜ¡A§Ú³£¨S·N¨£¡A­«ÂФF¦h¦¸¡AÁÙ¤£¯à¤F§Ú¨S¦bª§¦Wµü¶Ü?
¤£ºÞÅܧÎÁÙ¬O¸ÀÅÜ¡A³£¬O¨­¥÷¤v¸g§ïÅܤF¡A¥¦ªº·s¨­¥÷¥i¥H°Ñ¥[¨º¨Ç¬¡°Ê¡A¥¦´N¬O¥H¾A·íªº¨­¥÷¦b°Ñ¥[¡C
­Y¬O¤£¯à¡A´Nºâ½sͮɍS¯à¾×¤U¡A°õ¦æ¤]·|¥X¿ù¡C
§@ªÌ : sunyear(coco) VC++¨ô¶V±M®aC++³»¦y°ª¤â¶K¤å¶W¹L2000«h
[ ¶K¤å 2421 | ¤H®ð 1485 | µû»ù 6060 | µû»ù/¶K¤å 2.5 | °e¥Xµû»ù 5 ¦¸ ] 
[ µ¹­ÓÆg ]  [ µ¹­ÓÆg ]  [ ¦^À³¥»¤å ]  [ µoªí·s¤å ]  [ ¦^¤W­¶ ] [ ¦^°Q½×°Ï¦Cªí ] [ ¦^ª¾ÃѤJ¤f ]
2017/12/11 ¤W¤È 10:41:47
>³oºâ¬O¤£¿ùªº¥D·N¡A©Ò¥H§â®y¼Ð¸ê®Æ°µ¦¨¤@­Ó¸ê®Æª«¥ó¡A¦Ó¾Þ§@ªº¨ç¦¡¸s²Õ´N¤ÀÃþ¦¨¯Â¾Þ§@Ãþ§O?
(­n°O±o¥u¦³¾Þ§@¨ç¦¡ªºÃþ§O¡A¬Ostatic ¾Þ§@©Ê½è¡Aª«¥ó¨S¦³·N¸q)
>µM«á´N¥i¥H§â®y¼Ðª«¥ó©M¾Þ§@¨ç¦¡¡A°ÊºAµ²¦X¦¨©Ò­nªºÃþ§Oª«¥ó¡C¦p®y¼Ð¹Ï§ÎÅã¥Üª«¥ó¡A®y¼Ð¤T¨¤¨ç¦¡ª«¥óµ¥µ¥¡C
>­Y¥H«e­±³Jªº·Î¡Aª£¡AµNªº°ÊºAµ²¦X´N¬O·Î³J¡Aª£³J©M³Jªá´ö¡C
³á¡A¦­¤W¦A·Q¤F¤@¤U¡A§A³o»ò¤¶·N¦Wµü¡C
§Ú«e­±Á¿ªº¡A¾Þ§@¨ç¦¡¨Ã¤£·|¼vÅTª«¥óªº½×­z¡A­Y§A¯à¦P·N¡C
¨º»ò¬Û¦Pªºª«¥ó¡A­n³Q¤£¦Pªº¯Â¾Þ§@Ãþ§O(¥u¦³¨ç¦¡ªºÃþ§O)¡A¬Û·í©óname spaceªºusing¡C
¥i±¤¡AC++»y¨¥¡A³oºØÃþname spaceªºusingªº»yªk¨Ã¤£¬Ousing¡A¥¦ÁÙ¬O¥Hcast¥h¹ê²{¡C
§Ú§â«e­±coordinate¥[¤Wµù¸Ñ(¥u¦³mainªºµ{¦¡)¡A³o¼Ë§A¬O§_¯àÄÀÃh?
class Coordinate
{
protected:
double m_X;
double m_Y;
public:
Coordinate(double x, double y) { {m_X = x, m_Y = y; } }
virtual ~Coordinate() {}
};

class CPoint : public Coordinate
{
public:
void ShowPoint() { cout << "Point at (" << m_X <<','<< m_Y<<')' << endl; }
};

class CTan : public Coordinate
{
public:
void ShowTangent() {
cout << "Tangent is " << (m_Y / m_X) << endl;}
};

class CDrawPoint : public CPoint
{
public:
void DrawPoint() {
ShowPoint();
//Draw the point...
}
};


int main()
{
Coordinate Pt(12.0, 22.8);
CPoint *pPoint = static_cast<CPoint *>(& Pt);//use CPoint to operate Pt
pPoint->ShowPoint();
CTan *pTangent = static_cast< CTan *>(&Pt);//use CTan to operate Pt
pTangent->ShowTangent();
CDrawPoint *pDrawPoint = static_cast< CDrawPoint *>(&Pt);//use CDrawPointto operate Pt
pDrawPoint->DrawPoint();
return 0;
}
©Î§AÁÙ¬O¤ñ¸û³ßÅwÅܧΦWµü¡A¤]§âµù°O§ïÅܧΡA­Y¯à¥O¥ëº¡·N¡A§Ú¤]¨S·N¨£:
nt main()
{
Coordinate Pt(12.0, 22.8);
CPoint *pPoint = static_cast<CPoint *>(& Pt);//ÅܧΦ¨CPoint¥H¾Þ§@Pt
pPoint->ShowPoint();
CTan *pTangent = static_cast< CTan *>(&Pt);//ÅܧΦ¨pTangent¥H¾Þ§@Pt
pTangent->ShowTangent();
CDrawPoint *pDrawPoint = static_cast< CDrawPoint *>(&Pt);//ÅܧΦ¨CDrawPoint ¥H¾Þ§@Pt
pDrawPoint->DrawPoint();
return 0;
}
§@ªÌ : cxxlman(CxxlMan) C++Àu¨q¦n¤â¶K¤å¶W¹L1000«h
[ ¶K¤å 1036 | ¤H®ð 3227 | µû»ù 1260 | µû»ù/¶K¤å 1.22 | °e¥Xµû»ù 27 ¦¸ ] 
[ µ¹­ÓÆg ]  [ µ¹­ÓÆg ]  [ ¦^À³¥»¤å ]  [ µoªí·s¤å ]  [ ¦^¤W­¶ ] [ ¦^°Q½×°Ï¦Cªí ] [ ¦^ª¾ÃѤJ¤f ]
2017/12/11 ¤W¤È 11:48:28
°_¦]¬O§Ú¥Î dynamic_cast ¨ÓÀËÅç Clone() ²£¥Íªº¤À¨­¬O¤£¬O¤À¨­¡A
¦Ó§A»{¬°§Y¨Ï dynamic_cast ÀËÅ礣¹LÁÙ¬O¦³¥i¯à¤´¬°¤À¨­¡A
²z¥Ñ³ºµM¬O¥Î static_cast ¤´µM¥i "Â૬" ¬°¤À¨­¡A
¦]¦¹¤Þ¼É¹ïÂà§Îªºª§Ä³¡A©Ò¥H§Ú¤£±o¤£¥Î "ÅÜ«¬" ¨Ó©w¸q§A©Ò¿×ªºÂ૬
¦pªG¦b³o³¡¥÷¨S¿ìªk¨ú±o¦@ÃÑ¡A¨ä¥L³£¬O¦U»¡¦U¸Ü¨S¦³·N¸q
§@ªÌ : sunyear(coco) VC++¨ô¶V±M®aC++³»¦y°ª¤â¶K¤å¶W¹L2000«h
[ ¶K¤å 2421 | ¤H®ð 1485 | µû»ù 6060 | µû»ù/¶K¤å 2.5 | °e¥Xµû»ù 5 ¦¸ ] 
[ µ¹­ÓÆg ]  [ µ¹­ÓÆg ]  [ ¦^À³¥»¤å ]  [ µoªí·s¤å ]  [ ¦^¤W­¶ ] [ ¦^°Q½×°Ï¦Cªí ] [ ¦^ª¾ÃѤJ¤f ]
2017/12/11 ¤U¤È 01:22:27
>¦Ó§A»{¬°§Y¨Ï dynamic_cast ÀËÅ礣¹LÁÙ¬O¦³¥i¯à¤´¬°¤À¨­¡A
>²z¥Ñ³ºµM¬O¥Î static_cast ¤´µM¥i "Â૬" ¬°¤À¨­¡A
§Ú±q¨Ó¨S¦³¥Î¤À¨­³o¦r²´¡A¨º¬O§A¦Û¤v¹ïcast©ÎÀRºAÂ૬ªº¸ÑŪ¡C
 static_cast¦bC++¤¤¤å½Ķ´N¬OÀRºAÂ૬¡A¤£µM§A­n§Ú¥Î¤°»ò¦Wµü¡A§Ú¤]¤£¤¶·N¡C
´Nºâ¤@¶}©l§A¤£ª¾§Ú¥Î¤°»ò¦Wµü¡A§Ú³£Án©ú¨º»ò¦h¦¸§Ú¤£¤¶·N¥Î¤°»ò¦Wµü¤F¡AÁÙ¤£¤F¸Ñ¶Ü?
­«ÂI¤£¬O¦Wµü¡A¦Ó¬O§Ú¨ºstatic_castªºµ{¦¡¬O¬O¥i¥H¹B§@µL»~¡A¤]¦³¥¦ÅÞ¿è§t·N(¤£¬O´c·d)¡A³o¼ËÁÙ¦³¤°»ò°ÝÃD?
±q2017/11/22 ¤W¤È 01:20:31¶K¤å¶}©l
<coco>
¦Ó§Ú«e­±´£¥Xªº°ÝÃD¬O¡A­Y¤lÃþ§O¨S¼W¥[¸òclone ¦³ÃöªºªF¦è¡A¬°¤°»ò­n³Q±j­¢¹ê§@?

µM«á§A´N¶}©l¡A¤°»ò¥u½Æ»s¤@¥b¡A½Æ»s¤£§¹¥þ¡C
±µ¤U¨Óªº°Q½×¡A´X¥G§Ú¤@ª½¦A¸ò§A¸ÑÄÀ¡A­l¦ùÃþ§O­Y¨S¼W¥[¸òª«¥ó(¸ê®Æ)¦³ÃöªºªF¦è¡A²£¥Íªºª«¥ó´N¬O¸ò°òÃþ§Oª«¥ó¬O¤@¼Ëªº¡C
³o®É«áªº°òÃþª«¥ó==­l¥Íª«¥ó¡A½Æ»s¬O§¹¥þªº¡A¨S¤°»ò¥u½Æ»s¤@¥bªº°ÝÃD¡C
¦A³oºØ±¡ªp¡A²£¥Íªº°òÃþ§Oª«¥ó(Â૬)µ¹­l¥ÍÃþ§O¾Þ§@¬O¨S¦³°ÝÃDªº¡C
±µ¤U¨Óªº¤@¾ã¦ê°Q½×´X¥G¬O¡A§A¤@ª½¦b±j½Õdynamic_cast¤£¹L´N¬O¿ùªº¡C
§Ú¤@ª½¸ÑÄÀ¡Adynamic_cast¤£¹L¡A¥u¬Otype information¤ñ¹ï¤£¹L¡A½s;¹¤£«OÃÒ¦w¥þ¡Aµ{¦¡­û­n¦Û¦æ­t³d¡C
§A¥i¥H¦A±q2017/11/22 ¤W¤È 01:20:31¶}©l¬Ý¡A¬O¤£¬O³£¦b³oÂI¤W¶¡C
§@ªÌ : cxxlman(CxxlMan) C++Àu¨q¦n¤â¶K¤å¶W¹L1000«h
[ ¶K¤å 1036 | ¤H®ð 3227 | µû»ù 1260 | µû»ù/¶K¤å 1.22 | °e¥Xµû»ù 27 ¦¸ ] 
[ µ¹­ÓÆg ]  [ µ¹­ÓÆg ]  [ ¦^À³¥»¤å ]  [ µoªí·s¤å ]  [ ¦^¤W­¶ ] [ ¦^°Q½×°Ï¦Cªí ] [ ¦^ª¾ÃѤJ¤f ]
2017/12/11 ¤U¤È 01:56:47

>>¦Ó§A»{¬°§Y¨Ï dynamic_cast ÀËÅ礣¹LÁÙ¬O¦³¥i¯à¤´¬°¤À¨­¡A
>>²z¥Ñ³ºµM¬O¥Î static_cast ¤´µM¥i 'Â૬' ¬°¤À¨­¡A
>§Ú±q¨Ó¨S¦³¥Î¤À¨­³o¦r²´¡A¨º¬O§A¦Û¤v¹ïcast©ÎÀRºAÂ૬ªº¸ÑŪ¡C

¤À¨­¬O Clone() ¥\¯à¡A³o³¡¥÷¦³°ÝÃD¶Ü

> static_cast¦bC++¤¤¤å½Ķ´N¬OÀRºAÂ૬¡A¤£µM§A­n§Ú¥Î¤°»ò¦Wµü¡A§Ú¤]¤£¤¶·N¡C
>´Nºâ¤@¶}©l§A¤£ª¾§Ú¥Î¤°»ò¦Wµü¡A§Ú³£Án©ú¨º»ò¦h¦¸§Ú¤£¤¶·N¥Î¤°»ò¦Wµü¤F¡AÁÙ¤£¤F¸Ñ¶Ü?

§Ú¤£¬O¦b©M§Aª§¦Wµü¡A¥u¬O§A©M oo ªºÂ૬·§©À²V¦b¤@°_¤F¡A§Ú¥u¬O­n§â¥¦¤À³Î²M·¡

>­«ÂI¤£¬O¦Wµü¡A¦Ó¬O§Ú¨ºstatic_castªºµ{¦¡¬O¬O¥i¥H¹B§@µL»~¡A¤]¦³¥¦ÅÞ¿è§t·N(¤£¬O´c·d)¡A³o¼ËÁÙ¦³¤°»ò°ÝÃD?

­«ÂI´N¦b³o¤F¡A§A¯u§â¥¦²V¦b¤@°_¤F

>±q2017/11/22 ¤W¤È 01:20:31¶K¤å¶}©l
><coco>
>¦Ó§Ú«e­±´£¥Xªº°ÝÃD¬O¡A­Y¤lÃþ§O¨S¼W¥[¸òclone ¦³ÃöªºªF¦è¡A¬°¤°»ò­n³Q±j­¢¹ê§@?

C ¥i¥H C++ ´N¬O¤£¦æ

>µM«á§A´N¶}©l¡A¤°»ò¥u½Æ»s¤@¥b¡A½Æ»s¤£§¹¥þ¡C
>±µ¤U¨Óªº°Q½×¡A´X¥G§Ú¤@ª½¦A¸ò§A¸ÑÄÀ¡A­l¦ùÃþ§O­Y¨S¼W¥[¸òª«¥ó(¸ê®Æ)¦³ÃöªºªF¦è¡A²£¥Íªºª«¥ó´N¬O¸ò°òÃþ§Oª«¥ó¬O¤@¼Ëªº¡C

¦A©ú½T§i¶D§A¡A¤£¯à³o¼Ë·d

>³o®É«áªº°òÃþª«¥ó==­l¥Íª«¥ó¡A½Æ»s¬O§¹¥þªº¡A¨S¤°»ò¥u½Æ»s¤@¥bªº°ÝÃD¡C
>¦A³oºØ±¡ªp¡A²£¥Íªº°òÃþ§Oª«¥ó(Â૬)µ¹­l¥ÍÃþ§O¾Þ§@¬O¨S¦³°ÝÃDªº¡C
>±µ¤U¨Óªº¤@¾ã¦ê°Q½×´X¥G¬O¡A§A¤@ª½¦b±j½Õdynamic_cast¤£¹L´N¬O¿ùªº¡C
>§Ú¤@ª½¸ÑÄÀ¡Adynamic_cast¤£¹L¡A¥u¬Otype information¤ñ¹ï¤£¹L¡A½s;¹¤£«OÃÒ¦w¥þ¡Aµ{¦¡­û­n¦Û¦æ­t³d¡C
>§A¥i¥H¦A±q2017/11/22 ¤W¤È 01:20:31¶}©l¬Ý¡A¬O¤£¬O³£¦b³oÂI¤W¶¡C

³o«Ü­«­n©Ò¥H­n»¡¤T¦¸¡Aµ´¹ï¤£¯à³o¼Ë·d

oo Á¿¨s«Ê¸Ë¡A¹ï¶Â½c¸ÌªºªF¦è¤£¦b¥G¡A¤]¤£¸Ó¥h¦b¥G¡A
©Ò¥H¨â­Ó class ¤º®e³£¤@¼Ò¤@¼Ë¡Aoo ÁÙ¬O­nµø¬°¤£¦P¡A
©Ò¥H§A¥Î static_cast ªº¤âªk¡A°µ¬° "§Y¨Ï dynamic_cast ÀËÅ礣¹LÁÙ¬O¦³¥i¯à¤´¬°¤À¨­" ªº²z¥Ñ¡A
oo ¬O¤£¯à±µ¨üªº

§@ªÌ : cxxlman(CxxlMan) C++Àu¨q¦n¤â¶K¤å¶W¹L1000«h
[ ¶K¤å 1036 | ¤H®ð 3227 | µû»ù 1260 | µû»ù/¶K¤å 1.22 | °e¥Xµû»ù 27 ¦¸ ] 
[ µ¹­ÓÆg ]  [ µ¹­ÓÆg ]  [ ¦^À³¥»¤å ]  [ µoªí·s¤å ]  [ ¦^¤W­¶ ] [ ¦^°Q½×°Ï¦Cªí ] [ ¦^ª¾ÃѤJ¤f ]
2017/12/11 ¤U¤È 02:17:35

>>±q2017/11/22 ¤W¤È 01:20:31¶K¤å¶}©l
>><coco>
>>¦Ó§Ú«e­±´£¥Xªº°ÝÃD¬O¡A­Y¤lÃþ§O¨S¼W¥[¸òclone ¦³ÃöªºªF¦è¡A¬°¤°»ò­n³Q±j­¢¹ê§@?
>
>C ¥i¥H C++ ´N¬O¤£¦æ
>

³o¬q§Ú¦^¤Ó§Ö

¥²¶·±j­¢ clone() ¹ê§@ªº­ì¦]¬O¦]¦³·s©µ¦ùªºÃþ§O¡A´N¥²¶·­nÅý¤À¨­¤]­n¦³¬Û¦PªºÃþ§O¡A
¤]´N¬O type ¶·¤@­P¡A¤£¬O¤º®e­n¤@¼Ë
§@ªÌ : cxxlman(CxxlMan) C++Àu¨q¦n¤â¶K¤å¶W¹L1000«h
[ ¶K¤å 1036 | ¤H®ð 3227 | µû»ù 1260 | µû»ù/¶K¤å 1.22 | °e¥Xµû»ù 27 ¦¸ ] 
[ µ¹­ÓÆg ]  [ µ¹­ÓÆg ]  [ ¦^À³¥»¤å ]  [ µoªí·s¤å ]  [ ¦^¤W­¶ ] [ ¦^°Q½×°Ï¦Cªí ] [ ¦^ª¾ÃѤJ¤f ]
2017/12/11 ¤U¤È 02:22:11

>
>>>±q2017/11/22 ¤W¤È 01:20:31¶K¤å¶}©l
>>><coco>
>>>¦Ó§Ú«e­±´£¥Xªº°ÝÃD¬O¡A­Y¤lÃþ§O¨S¼W¥[¸òclone ¦³ÃöªºªF¦è¡A¬°¤°»ò­n³Q±j­¢¹ê§@?
>>
>>C ¥i¥H C++ ´N¬O¤£¦æ
>>
>
>³o¬q§Ú¦^¤Ó§Ö
>
>¥²¶·±j­¢ clone() ¹ê§@ªº­ì¦]¬O¦]¦³·s©µ¦ùªºÃþ§O¡A´N¥²¶·­nÅý¤À¨­¤]­n¦³¬Û¦PªºÃþ§O¡A
>¤]´N¬O type ¶·¤@­P¡A¤£¬O¤º®e­n¤@¼Ë
>
³o¼ËÁ¿¤]¤£¹ï¡A­n§ï¤@¤U
¤º®e¤@¼Ë¥~¡Atype ¤]­n¤@­P¡A¤£µM«ç»ò·|¥s clone ^^
§@ªÌ : sunyear(coco) VC++¨ô¶V±M®aC++³»¦y°ª¤â¶K¤å¶W¹L2000«h
[ ¶K¤å 2421 | ¤H®ð 1485 | µû»ù 6060 | µû»ù/¶K¤å 2.5 | °e¥Xµû»ù 5 ¦¸ ] 
[ µ¹­ÓÆg ]  [ µ¹­ÓÆg ]  [ ¦^À³¥»¤å ]  [ µoªí·s¤å ]  [ ¦^¤W­¶ ] [ ¦^°Q½×°Ï¦Cªí ] [ ¦^ª¾ÃѤJ¤f ]
2017/12/11 ¤U¤È 03:34:51
>¤À¨­¬O Clone() ¥\¯à¡A³o³¡¥÷¦³°ÝÃD¶Ü
¥u­n¤£µw¶ë"¤À¨­"¬O§Ú»¡ªº¡A´N¨S°ÝÃD¡C
«D¥²­n¡A§Ú¤£³ßÅw³Ð³y¦Wµü¡A¥Î¤v©w¸q©ú½Tªº¡A¤j®aºD¥Î³£À´ªº¤ñ¸û¦n¡C
¦ý§A­n¥Î¡A§Ú¤£¤¶·N¡A¥u­n"ÅܧÎ"¦¨¬O§Ú»¡ªº´N¦n¡C
¹ï§Ú¨Ó»¡cloneÀ³¬O½Æ»s¡A½Æ»s¤°»ò?·íµM¬O½Æ»sª«¥ó¹êÅé¡A¹ï§a?
¦b§Ú2017/11/22 ¤W¤È 01:20:31¶Kªº
Derived3 ªºª«¥ó¹êÅé©M Base¬O¤@¼Ò¤@¼Ëªº¡A©Ò¥H½Æ»s¤@­ÓBase¹êÅéµ¹Derived3¡A¦³¤°»ò°ÝÃD¶Ü?
¦Ü©óBase¹êÅé­n¦p¦óÂনµ¹Derived3¾Þ§@¡A¨º¬O»yªkªº°ÝÃD¡AµLÃöOO¡C

>§Ú¤£¬O¦b©M§Aª§¦Wµü¡A¥u¬O§A©M oo ªºÂ૬·§©À²V¦b¤@°_¤F¡A§Ú¥u¬O­n§â¥¦¤À³Î²M·¡
OOÂ૬³W«h´N¬OA¹êÅ骺¶°¦X¥]§t©Îµ¥©óB¹êÅé¶°¦X¡A´N¥i¥HÂà¡C
Derived3 ªº¹êÅ骺¶°¦X©M BaseÅé¶°¦X¬O¤@¼Ëªº¡A¬°¤°»ò¤£¯àÂà?
¬O§A¤@ª½¨S¯à§âª«¥ó¹êÅé(¸ê®Æ)©M¨ç¦¡(¾Þ§@)¦¨­û¤À³Î²M·¡§a¡C

>>­«ÂI¤£¬O¦Wµü¡A¦Ó¬O§Ú¨ºstatic_castªºµ{¦¡¬O¬O¥i¥H¹B§@µL»~¡A¤]¦³¥¦ÅÞ¿è§t·N(¤£¬O´c·d)¡A³o¼ËÁÙ¦³¤°»ò°ÝÃD?
>­«ÂI´N¦b³o¤F¡A§A¯u§â¥¦²V¦b¤@°_¤F
¸ò½Ö²V¦b¤@°_¤F?µ{¦¡µ²ºc©MÅÞ¿è³£¤ÀªRµ¹§A¤F¡A¦³¨S¦³¹H­IOO¬O¬Ýµ{¦¡µ²ºc©MÅÞ¿è¡A¤£¬O¬Ý¦³¨S¦³¨Ï¥Îstatic_cast¡C
static_cast¥u¬O¤â¬q¡A¤]¥i¥H¹B§@¡C´Nºâ¸ò¤°»ò²V¦b¤@°_¤]¥Ñ±o§A»¡(·d¤£²M¸ò¤°»ò²V¦b¤@°_)¡A¥u­n¤£»¡¥¦¬O¿ùªº¤£¯à¨Ï¥Î´N¦n¡C

>¦A©ú½T§i¶D§A¡A¤£¯à³o¼Ë·d
¤£¦n·N«ä¡A­Y¤£¯à³o¼Ë·d¡A¥H«e¼gªº³q°Tµ{¦¡¡A¤j·§³£Ãø²£¤F¡I
¤@­Ó¦¬¨ú¸g³q°T¶Ç¨Óªº©R¥O(©Î«H®§)¡A©³¼h¥uºÞ«Ê¥]¦¬¨ú¡A¤£ºÞ¤º®e¬O¤°»ò©R¥O(©Î«H®§)¡C
³o¼Ëªº«Ê¥]°ò¥»¤W´N¬OUINT_8°}¦Cªº«ü¼Ð¡C¶Ç¨ì¤W¼h¡A·|¥ý§â¥¦±j¨îÂ૬¦¨raw data type¨Ò¦p:
struct RawCmdData
{
UINT_8 m_Cmd://command identify
UINT_8 m_Para[MAX_CMDLEN];
};
¶Ç¨ì³Ì¤W¼h©R¥O¥O³B²zµ{§Ç®É­n¨Ìm_u8Cmd¬O¨º¤@ºØ©R¥O¡A¦A±j¨îÂ૬¦¨¬Û¹ïÀ³ªº©R¥O¦C§O¡A¨Ò¦p:
struct CMD_Copy
{
UINT_8 m_Cmd://copy command id
UINT_32 m_SrcAddr;
UINT_32 m_DstAddr;
UINT_32 m_DataLength;
}
©Î
struct CMD_Write
{
UINT_8 m_Cmd://write command id
UINT_32 m_DstAddr;
UINT_32 m_DataLength;
UINT_8 m_Data[MAX_CMDLEN];
}
©Î
:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
½Ð°Ý¡A¦pªG¤£±j¨îÂ૬¡A§Ú«ç»ò¼gÃþ¦ü³o¼Ëªºµ{¦¡?
³q°T¶Ç¹L¨Óªº¸ê®Æ³£¤£¬O­ì¥Í¦ÛRawCmdData¡A CMD_Copy©ÎCMD_Write¡C
dynamic_cast³q¤£¹L(³s½sͳ£¹L¤£¤F)¡A¤£±j¨îÂ૬¡A¥Î§AªºOOPÆ[©À¡A¬O­n«ç»ò¼g?
³oºØª¬ªp³£¬O¸g¥Ñ³q°T¨óij¡Aµ{¦¡§PÂ_¶Ç¹L¨Óªº«Ê¥]¸ê®Æ¬OÄݩ󨺤@ºØ¸ê®Æµ²ºc¡A´N±j¨îÂ૬¡C
¦óªp§Ú«e­±ªº¨Ò¤l¡A³£¬O¼gµ{¦¡®É´Nª¾ Derived3©MBase¬O¦P¤@­Ó¸ê®Æµ²ºc¡A«ç·|¤£¯àÂà?

>³o«Ü­«­n©Ò¥H­n»¡¤T¦¸¡Aµ´¹ï¤£¯à³o¼Ë·d
¦n§a¡A§Ú¦P·NÁÙ¨Sªø¤ú¾¦¡A´N¤£­n°Ù¥Ì½©¡C§Ú¥u¯à¦P·N¨ì³o¸Ì¤F¡C
¦ý«Ü©êºp¡A§Ú¼gªºµ{¦¡¦³¤@¥b¥H¤W©M³q°T¦³Ãö¡A¤£³o¼Ë¼Ë·d¡AÀ³¸Ó¦­¨SÀY¸ô¤F ^^

>©Ò¥H¨â­Ó class ¤º®e³£¤@¼Ò¤@¼Ë¡Aoo ÁÙ¬O­nµø¬°¤£¦P¡A
¤£¬O¨â­Óclass¤º®e³£¤@¼Ò¤@¼Ë¡A¦Ó¬O¨â­Óclassªº¹êÅé¬O¦P¤@­ÓÃþ§Oª«¥ó¡C
¦A¬Ý¤@¦¸§Úªº¨Ò¤l¡I

>©Ò¥H§A¥Î static_cast ªº¤âªk¡A°µ¬° "§Y¨Ï dynamic_cast ÀËÅ礣¹LÁÙ¬O¦³¥i¯à¤´¬°¤À¨­" ªº²z¥Ñ¡A
>oo ¬O¤£¯à±µ¨üªº
§Ú¤£¬O³o¼Ë»¡¡A¤£­n¤S§á¦±§O¤Hªº·N«ä¡C
§Ú»¡ªº¬Oµ{¦¡­û½T»{¨â­ÓÃþ§Oªºª«¥ó(¸ê®Æ¹êÅé)¬O¤@¼Ëªº¡A´N¥i¥H¤¬Âà¡C
OOP¥¿½Tªº»¡ªkÀ³¬O:A¹êÅ骺¶°¦X¥]§t©Îµ¥©óB¹êÅé¶°¦X¡A´N¥i¥HAÂà§Î¦¨B¨Ó¨Ï¥Î¡C
°òÃþ©M­l¥ÍÃþª«¥óªºÂ૬³W«h¡A¬O²Å¦X¤W¤@¥y³W«h¥B¬O½s;¹¥i¥HÀˬdªº¨Ò¤l¡C
¶W¥X½s;¹¥i¥HÀˬdªº½d³ò¡A¦ý¤´²Å¦X¥i¥HÂ૬ªºcase¡A´N¬Oµ{¦¡­û¦Û¦æ­t³d¡C
¤£µM¦³ªºµ{¦¡¯uªº¼g¤£¥X¨Ó¡C
§@ªÌ : sunyear(coco) VC++¨ô¶V±M®aC++³»¦y°ª¤â¶K¤å¶W¹L2000«h
[ ¶K¤å 2421 | ¤H®ð 1485 | µû»ù 6060 | µû»ù/¶K¤å 2.5 | °e¥Xµû»ù 5 ¦¸ ] 
[ µ¹­ÓÆg ]  [ µ¹­ÓÆg ]  [ ¦^À³¥»¤å ]  [ µoªí·s¤å ]  [ ¦^¤W­¶ ] [ ¦^°Q½×°Ï¦Cªí ] [ ¦^ª¾ÃѤJ¤f ]
2017/12/11 ¤U¤È 03:50:22
>¥²¶·±j­¢ clone() ¹ê§@ªº­ì¦]¬O¦]¦³·s©µ¦ùªºÃþ§O¡A´N¥²¶·­nÅý¤À¨­¤]­n¦³¬Û¦PªºÃþ§O¡A
¦pªG©µ伷Ãþ§O¹êÅé©M°òÃþ¤@¼Ë©O¡A¥i¤£¥iÅý°òÃþclone´N¦n?
cloneÀ³¸Ó¬O½Æ»s¸ê®Æªº­È¤£¬O«Ø¥ßª«¥ó¡A§A¨º­Óclone¦b²{¹ê¤¤¡AÀ³¸Ó¬O­n¥~³¡«Ø¥ßª«¥ó¡A¦A¥á¶iclone¥h½Æ»s¸ê®Æ¡C
·Q·Q¬Ý¡A¹ê»ÚÀ³¥Î¡A­l¥ÍÃþclone¤£¯à©I¥s°òÃþªºclone¥h§¹¦¨¸ê®Æ½Æ»s¡A¨º¬O¤£¬O­n¥Ñ­l¥ÍÃþcloneÀ°°òÃþclone°µ½Æ»sªº¤u§@?
³o¦X²z¶Ü?­Y°òÃþ¦³¸ê®Æ¬Oprivateªº¡A¨º­l¥ÍÃþ«ç»ò°µ°òÃþ¸Ó°µªº¤u§@¡C
³o¥»¨Ó´N¤£¬O¦X©óOOPºë¯«ªºªF¦è¡C¥u¬Oµw§Ë¤@­Ó¦n¹³©Ò¦³ªº­l¥ÍÃþ§O³£­n¦Û¦æ¼¶¼gcloneªº¨Ò¤l¡A¦ý¹ê»Ú¤£¤Ó¥i¦æ¡A¤]¤£À³¸Ó³o¼Ë¼g¡C






§@ªÌ : cxxlman(CxxlMan) C++Àu¨q¦n¤â¶K¤å¶W¹L1000«h
[ ¶K¤å 1036 | ¤H®ð 3227 | µû»ù 1260 | µû»ù/¶K¤å 1.22 | °e¥Xµû»ù 27 ¦¸ ] 
[ µ¹­ÓÆg ]  [ µ¹­ÓÆg ]  [ ¦^À³¥»¤å ]  [ µoªí·s¤å ]  [ ¦^¤W­¶ ] [ ¦^°Q½×°Ï¦Cªí ] [ ¦^ª¾ÃѤJ¤f ]
2017/12/11 ¤U¤È 03:51:51
¤£½Í¤Ó¦h¡A´N­«ÂI°Q½×

>>§Ú¤£¬O¦b©M§Aª§¦Wµü¡A¥u¬O§A©M oo ªºÂ૬·§©À²V¦b¤@°_¤F¡A§Ú¥u¬O­n§â¥¦¤À³Î²M·¡
>OOÂ૬³W«h´N¬OA¹êÅ骺¶°¦X¥]§t©Îµ¥©óB¹êÅé¶°¦X¡A´N¥i¥HÂà¡C

oo ªºÂ૬ªº·N«ä¬O¡AA ©Ò¥Nªíªºª«¥ó¥]§t¦³ B ³o­Ó type ´N¥i¥H"¤Á´«"¹L¥h¡A§Ú¤£¬O­n³Ð³y¦Wµü¡A¥u¬O­nªí¹F²M°£

>Derived3 ªº¹êÅ骺¶°¦X©M BaseÅé¶°¦X¬O¤@¼Ëªº¡A¬°¤°»ò¤£¯àÂà?
>¬O§A¤@ª½¨S¯à§âª«¥ó¹êÅé(¸ê®Æ)©M¨ç¦¡(¾Þ§@)¦¨­û¤À³Î²M·¡§a¡C

´NÂ૬¦Ó¨¥¡Aoo ¤£·|¥hºÞ¹êÅé(¸ê®Æ)©M¨ç¦¡(¾Þ§@)¡A¥u­nª«¥ó§t¦³·Q­n type ´N¥i¥H"¤Á´«"¹L¥h
§@ªÌ : cxxlman(CxxlMan) C++Àu¨q¦n¤â¶K¤å¶W¹L1000«h
[ ¶K¤å 1036 | ¤H®ð 3227 | µû»ù 1260 | µû»ù/¶K¤å 1.22 | °e¥Xµû»ù 27 ¦¸ ] 
[ µ¹­ÓÆg ]  [ µ¹­ÓÆg ]  [ ¦^À³¥»¤å ]  [ µoªí·s¤å ]  [ ¦^¤W­¶ ] [ ¦^°Q½×°Ï¦Cªí ] [ ¦^ª¾ÃѤJ¤f ]
2017/12/11 ¤U¤È 03:55:29

>>¥²¶·±j­¢ clone() ¹ê§@ªº­ì¦]¬O¦]¦³·s©µ¦ùªºÃþ§O¡A´N¥²¶·­nÅý¤À¨­¤]­n¦³¬Û¦PªºÃþ§O¡A
>¦pªG©µ伷Ãþ§O¹êÅé©M°òÃþ¤@¼Ë©O¡A¥i¤£¥iÅý°òÃþclone´N¦n?

¤£¦æ¡Atype ¤]­n¤@­P
§@ªÌ : sunyear(coco) VC++¨ô¶V±M®aC++³»¦y°ª¤â¶K¤å¶W¹L2000«h
[ ¶K¤å 2421 | ¤H®ð 1485 | µû»ù 6060 | µû»ù/¶K¤å 2.5 | °e¥Xµû»ù 5 ¦¸ ] 
[ µ¹­ÓÆg ]  [ µ¹­ÓÆg ]  [ ¦^À³¥»¤å ]  [ µoªí·s¤å ]  [ ¦^¤W­¶ ] [ ¦^°Q½×°Ï¦Cªí ] [ ¦^ª¾ÃѤJ¤f ]
2017/12/11 ¤U¤È 04:19:16
>Derived3 ªºª«¥ó¹êÅé©M Base¬O¤@¼Ò¤@¼Ëªº¡A©Ò¥H½Æ»s¤@­ÓBase¹êÅéµ¹Derived3¡A¦³¤°»ò°ÝÃD¶Ü?
³o¥y¸Ü§Ú­×¥¿¬°:
Derived3 ªºª«¥ó¹êÅé´N¬O Base¡A©Ò¥H½Æ»s¤@­ÓBase¹êÅéµ¹Derived3¡A¦³¤°»ò°ÝÃD¶Ü?
§K±o§A¤S»~¸Ñ¦¨¨â­Ó¤£¦PÃþÃþ§O¡A¥u¬O¤º®e¤@¼Ë¡C
¨ä¹ê¨â­ÓÃþ§O¡A¹êÅ餺®e¤@¼Ë¡A¤¬Âà¤]¬O¥i¥H¹B§@¡C¥u¬Oµ{¦¡³o¼Ë¼g¨S¦³·N¸q¡A¤]¬O·¥«×¤£¦n¡Astatic_cast¤]¤£·|¹L¡C
¯u¦³·Q¤£¨ìªº¦X²zÀ³¥Î¡A¨º±o¥Îreinterpret_cast¤~¯àÂà±o¤F¡C
§@ªÌ : sunyear(coco) VC++¨ô¶V±M®aC++³»¦y°ª¤â¶K¤å¶W¹L2000«h
[ ¶K¤å 2421 | ¤H®ð 1485 | µû»ù 6060 | µû»ù/¶K¤å 2.5 | °e¥Xµû»ù 5 ¦¸ ] 
[ µ¹­ÓÆg ]  [ µ¹­ÓÆg ]  [ ¦^À³¥»¤å ]  [ µoªí·s¤å ]  [ ¦^¤W­¶ ] [ ¦^°Q½×°Ï¦Cªí ] [ ¦^ª¾ÃѤJ¤f ]
2017/12/11 ¤U¤È 04:23:49
>¤£¦æ¡Atype ¤]­n¤@­P
type ¤@­PÁÙ»ÝÂ૬¶Ü?
§A¬O»¡,type information­n¤@­P§a?
§A­n¯u³o»ò°í«ù¡A¨Ï¥Îreinterpret_cast¥i¥H¹F¨ì§Aªº­n¨D¡C
¹ýÀY¹ý§Àªº§ï¡A³stype information³£·|¤@­P¡C
§@ªÌ : sunyear(coco) VC++¨ô¶V±M®aC++³»¦y°ª¤â¶K¤å¶W¹L2000«h
[ ¶K¤å 2421 | ¤H®ð 1485 | µû»ù 6060 | µû»ù/¶K¤å 2.5 | °e¥Xµû»ù 5 ¦¸ ] 
[ µ¹­ÓÆg ]  [ µ¹­ÓÆg ]  [ ¦^À³¥»¤å ]  [ µoªí·s¤å ]  [ ¦^¤W­¶ ] [ ¦^°Q½×°Ï¦Cªí ] [ ¦^ª¾ÃѤJ¤f ]
2017/12/11 ¤U¤È 04:33:18
>oo ªºÂ૬ªº·N«ä¬O¡AA ©Ò¥Nªíªºª«¥ó¥]§t¦³ B ³o­Ó type ´N¥i¥H"¤Á´«"¹L¥h¡A§Ú¤£¬O­n³Ð³y¦Wµü¡A¥u¬O­nªí¹F²M°£
§Úªº¨Ò¤lBase ª«¥ó´N¬O¥]§t(µ¥©ó)Derived 3¡A¨º¦³¤°»ò°ÝÃD?
§Ú¤@ª½¸ÑÄÀª«¥ó¬O«ü¸ê®Æ¹êÅé¡A¨ç¦¡¬O¸g¥ÑÃþ§O¿ëÃÑ¥h©I¥s¡A©Mª«¥óµLÃö¡C§A¤@ª½¤£¦^À³¡A¦ýÂФå¦n¹³¤@ª½©¿²¤³o¥ó¨Æ¡C
Derived 3ªºª«¥ó¹êÅé´N¬OBase¡A¤¬Â঳¤°»ò°ÝÃD?
§âBase cast¦¨Derived3ªº®ÄÀ³¥u¬O¥i¥H¨Ï¥ÎDerived3ªº¨ç¦¡¥h¾Þ§@Baseª«¥ó½}¡C
§@ªÌ : sunyear(coco) VC++¨ô¶V±M®aC++³»¦y°ª¤â¶K¤å¶W¹L2000«h
[ ¶K¤å 2421 | ¤H®ð 1485 | µû»ù 6060 | µû»ù/¶K¤å 2.5 | °e¥Xµû»ù 5 ¦¸ ] 
[ µ¹­ÓÆg ]  [ µ¹­ÓÆg ]  [ ¦^À³¥»¤å ]  [ µoªí·s¤å ]  [ ¦^¤W­¶ ] [ ¦^°Q½×°Ï¦Cªí ] [ ¦^ª¾ÃѤJ¤f ]
2017/12/11 ¤U¤È 04:47:54
>´NÂ૬¦Ó¨¥¡Aoo ¤£·|¥hºÞ¹êÅé(¸ê®Æ)©M¨ç¦¡(¾Þ§@)¡A¥u­nª«¥ó§t¦³·Q­n type ´N¥i¥H"¤Á´«"¹L¥h
¨º¤£¬Ooo°Õ¡I
¨º¥u¬OC++ªº¦w¥þÀˬd¡A¦]¬°¥u¥Îtype information¨Ã¤£¥]¬A©Ò¦³¥i¥HÂ૬ªºª¬ªp¡A©Ò¥H¤~¦³¤À¯ÅÂ૬¡C
¥i¥HÂ૬ªºª¬ªp¡A¦ýdynamic_castÂण¹L¥h¡A´N¨Ï¥Îstatic_castÂà;
¥i¥HÂ૬ªºª¬ªp¡A¦ýstatic_castÂण¹L¥h¡A´N¨Ï¥Îreinterpret_castÂà¡C
C++Â૬³W«h´N¬O³o¼Ë¡A§Aµw­n»¡¥u¯àdynamic_cast¥hÂà¡AÂण¹L¥h´N¬O¤£¯àÂà¡C
¨ºC++ ¬°¦óÁÙ­n³]­pstatic_cast©Mreinterpret_cast?
³o­Ó§Ú¤]°Ý¤F¦h¦¸¡A§A±q¤£¦^µª¡C
§@ªÌ : cxxlman(CxxlMan) C++Àu¨q¦n¤â¶K¤å¶W¹L1000«h
[ ¶K¤å 1036 | ¤H®ð 3227 | µû»ù 1260 | µû»ù/¶K¤å 1.22 | °e¥Xµû»ù 27 ¦¸ ] 
[ µ¹­ÓÆg ]  [ µ¹­ÓÆg ]  [ ¦^À³¥»¤å ]  [ µoªí·s¤å ]  [ ¦^¤W­¶ ] [ ¦^°Q½×°Ï¦Cªí ] [ ¦^ª¾ÃѤJ¤f ]
2017/12/12 ¤W¤È 10:53:40

>>¤£¦æ¡Atype ¤]­n¤@­P
>type ¤@­PÁÙ»ÝÂ૬¶Ü?
>§A¬O»¡,type information­n¤@­P§a?
>§A­n¯u³o»ò°í«ù¡A¨Ï¥Îreinterpret_cast¥i¥H¹F¨ì§Aªº­n¨D¡C
>¹ýÀY¹ý§Àªº§ï¡A³stype information³£·|¤@­P¡C

§Ú¦^µªªº¬O clone() ªº¤À¨­©M¥»´L­n¤@­P
§@ªÌ : cxxlman(CxxlMan) C++Àu¨q¦n¤â¶K¤å¶W¹L1000«h
[ ¶K¤å 1036 | ¤H®ð 3227 | µû»ù 1260 | µû»ù/¶K¤å 1.22 | °e¥Xµû»ù 27 ¦¸ ] 
[ µ¹­ÓÆg ]  [ µ¹­ÓÆg ]  [ ¦^À³¥»¤å ]  [ µoªí·s¤å ]  [ ¦^¤W­¶ ] [ ¦^°Q½×°Ï¦Cªí ] [ ¦^ª¾ÃѤJ¤f ]
2017/12/12 ¤W¤È 10:59:16

>>oo ªºÂ૬ªº·N«ä¬O¡AA ©Ò¥Nªíªºª«¥ó¥]§t¦³ B ³o­Ó type ´N¥i¥H'¤Á´«'¹L¥h¡A§Ú¤£¬O­n³Ð³y¦Wµü¡A¥u¬O­nªí¹F²M°£
>§Úªº¨Ò¤lBase ª«¥ó´N¬O¥]§t(µ¥©ó)Derived 3¡A¨º¦³¤°»ò°ÝÃD?

§A©¿²¤¤F oo ³ÌÁ¿¨sªº type¡A¤£¬O¥u¬Ý¥]»qªº¤º®e

>§Ú¤@ª½¸ÑÄÀª«¥ó¬O«ü¸ê®Æ¹êÅé¡A¨ç¦¡¬O¸g¥ÑÃþ§O¿ëÃÑ¥h©I¥s¡A©Mª«¥óµLÃö¡C§A¤@ª½¤£¦^À³¡A¦ýÂФå¦n¹³¤@ª½©¿²¤³o¥ó¨Æ¡C
>Derived 3ªºª«¥ó¹êÅé´N¬OBase¡A¤¬Â঳¤°»ò°ÝÃD?
>§âBase cast¦¨Derived3ªº®ÄÀ³¥u¬O¥i¥H¨Ï¥ÎDerived3ªº¨ç¦¡¥h¾Þ§@Baseª«¥ó½}¡C
§@ªÌ : cxxlman(CxxlMan) C++Àu¨q¦n¤â¶K¤å¶W¹L1000«h
[ ¶K¤å 1036 | ¤H®ð 3227 | µû»ù 1260 | µû»ù/¶K¤å 1.22 | °e¥Xµû»ù 27 ¦¸ ] 
[ µ¹­ÓÆg ]  [ µ¹­ÓÆg ]  [ ¦^À³¥»¤å ]  [ µoªí·s¤å ]  [ ¦^¤W­¶ ] [ ¦^°Q½×°Ï¦Cªí ] [ ¦^ª¾ÃѤJ¤f ]
2017/12/12 ¤W¤È 11:08:09

>>´NÂ૬¦Ó¨¥¡Aoo ¤£·|¥hºÞ¹êÅé(¸ê®Æ)©M¨ç¦¡(¾Þ§@)¡A¥u­nª«¥ó§t¦³·Q­n type ´N¥i¥H'¤Á´«'¹L¥h
>¨º¤£¬Ooo°Õ¡I
>¨º¥u¬OC++ªº¦w¥þÀˬd¡A¦]¬°¥u¥Îtype information¨Ã¤£¥]¬A©Ò¦³¥i¥HÂ૬ªºª¬ªp¡A©Ò¥H¤~¦³¤À¯ÅÂ૬¡C
>¥i¥HÂ૬ªºª¬ªp¡A¦ýdynamic_castÂण¹L¥h¡A´N¨Ï¥Îstatic_castÂà;
>¥i¥HÂ૬ªºª¬ªp¡A¦ýstatic_castÂण¹L¥h¡A´N¨Ï¥Îreinterpret_castÂà¡C
>C++Â૬³W«h´N¬O³o¼Ë¡A§Aµw­n»¡¥u¯àdynamic_cast¥hÂà¡AÂण¹L¥h´N¬O¤£¯àÂà¡C
>¨ºC++ ¬°¦óÁÙ­n³]­pstatic_cast©Mreinterpret_cast?
>³o­Ó§Ú¤]°Ý¤F¦h¦¸¡A§A±q¤£¦^µª¡C

©Ò¥H§Ú¤~¥ÎÅÜ«¬©MÂ૬¨Ó°µ¤À³Î¡A¨º¬O¤£¦P»â°ì¡A¤£¦P·§©À¤U´£¨Ñ¤£¦Pªº¥\¯àµ¹§A°µ¿ï¾Ü¡A¤£¯à¤¬¬Û¨ú«Ý¡A§O·d²V¤F

·Q·Q oo ªº³Ì®Ú¥»ºë¯«¬O¤°»ò¡A·Q·Q°ª¶¥»y¨¥ªº¶D¨D¬O¤°»ò¡A¦A©M§A±Ä¥Îªº§Þ³N°µ¹ï·Ó


§@ªÌ : sunyear(coco) VC++¨ô¶V±M®aC++³»¦y°ª¤â¶K¤å¶W¹L2000«h
[ ¶K¤å 2421 | ¤H®ð 1485 | µû»ù 6060 | µû»ù/¶K¤å 2.5 | °e¥Xµû»ù 5 ¦¸ ] 
[ µ¹­ÓÆg ]  [ µ¹­ÓÆg ]  [ ¦^À³¥»¤å ]  [ µoªí·s¤å ]  [ ¦^¤W­¶ ] [ ¦^°Q½×°Ï¦Cªí ] [ ¦^ª¾ÃѤJ¤f ]
2017/12/12 ¤U¤È 05:23:19
>©Ò¥H§Ú¤~¥ÎÅÜ«¬©MÂ૬¨Ó°µ¤À³Î¡A¨º¬O¤£¦P»â°ì¡A¤£¦P·§©À¤U´£¨Ñ¤£¦Pªº¥\¯àµ¹§A°µ¿ï¾Ü¡A¤£¯à¤¬¬Û¨ú«Ý¡A§O·d²V¤F
¤@¤U³½¥Ø²V¯]¡A¤@¤U¤£¯à¤¬¬Û¨ú¥N¡C§Ú¨º¸Ì³½¥Ø²V¯]?
¤£¹L´NCoordinate¨º­Óµ{¦¡¡A§Ú»{¬°¥i¥H¥Îstatic_cast¹F¦¨¥Øªº¡A§A»{¬°¤£¯à³o¼Ë·d¡A¤£¬O¶Ü?
¦Ü©ó¤¬¬Û¨ú¥N¡A¤£ª¾¦ó©Ò«ü?
¦pªG¤@­Óupcast¡Aµ{¦¡­û»{¬°¥Îdynamic_cast¤ñstatic_cast¥Nªº¦w¥þ©Ê¦n¡A¬°¦ó¤£¯à¨ú¥N?
¦pªG¦]¬°®Ä¯à¦Ò¶q¡Aµ{¦¡­û»{¬°¥L¥i¥H¬°Âà§Î­t³d¡Astatic_cast¨ú¥Ndynamic_cast¡A¤S¦³¦ó¤£¥i?
¦pªG¦bdynamic_cast³q¤£¹L¡A¦ýµ{¦¡­û»{¬°Âà´«¨S¦³°ÝÃD¡A©Ò¥H¨Ï¥Îstatic_cast©Îreinterpret_cast¡A¬°¤°»ò¤£¦æ?(³oºØÂà´«¡A§A­n¥s¤°»ò§Ú¨S·N¨£)

>·Q·Q oo ªº³Ì®Ú¥»ºë¯«¬O¤°»ò¡A·Q·Q°ª¶¥»y¨¥ªº¶D¨D¬O¤°»ò¡A¦A©M§A±Ä¥Îªº§Þ³N°µ¹ï·Ó
§Ú­Ì«e­±½Íªº¬OC++¡A¤£¬OOO(¤v¸g´£¥Ü¹L«Ü¦h¦¸)¡AC++¬O¨ÌOOP³W«h¦Ó¨Ó¡AOOPªº°ò·¡·íµM¬OOO¡C
±qÄ~©Ó°µ¤ñ³ë¡AOOPÄ~©Ó¦ÛOO¡AC++Ä~©Ó¦ÛOOP(¤£¾å±o³o·|¤£·|¤£­Û¤£Ãþ¡A¦ýÀ³ª¾©Ò«ü)
­n±qOO½Í°_¤]¥i¥H¡A³o­Ó°Q½×¦ê¤j·§¥i¥Hªí¹F§Ú¹ïOOªºîzÂI:
http://www.programmer-club.com.tw/showSameTitleN/c/42739.html

±qOO ªºÆ[ÂI¡AÃC¦â¥i¥H¬Oª«¥ó¡A¨T¨®¤]¬Oª«¥ó¡A¨ä¤l¶°¤]¥i¥Hª«¥ó¡A¨Ãµ²¦X¦¨¥tÃþª«¥ó¡C
©Ò¥H¬õ¦â(Ä~©Ó¦ÛÃC¦â)ªº¨T¨®(Ä~©Ó¦Û¨T¨®)¬Oª«¥ó¡AÂŦ⪺¨T¨®(Ä~©Ó¦Û¨T¨®)¤]¬Oª«¥ó¡C
Âà´«1.©Ò¥H¬õ¦âªº¨T¨®A¡A»¡¥¦¬O¨T¨®A(upcast)¡A·íµM¥i¥H¡C
Âà´«2.¨º¨T¨®A¡A»¡¥¦¬O¬õ¦âªº¨T¨®A(Downcast)¡A¥i¤£¥i¥H?¥i¥H¡A¦]¬°¨T¨®A­ì¥»(­ì¥Í)´N¬O¬õ¦âªº¨®¤l¡C
Âà´«3.¤@àw¨T¨®B(¨S¤WÃC¦â)¡A¥i¤£¥i¥H»¡¥¦¬O¬õ¦âªº¨T¨®A(Downcast)?°ò¥»¤W¤£¥i¥H¡C¦ý­Y¸g¤W¬õº£«á¡A´N¥i¥H¡C
Âà´«4.¨º¬õ¦âªº¨T¨®»¡¥¦¬OÂŦâ¨T¨®¡A¥i¤£¥i¥H?¦n¹³¤£¥i¥H§a¡I¦ý¸g­«·s¯N¤W¬õº£«á¡A¥i¤£¥i¥H?
Âà´«5.¨º¬õ¦âªº¨T¨®»¡¥¦¬OÂŦ⪺¼¯¦«¨®¥i¤£¥i¥H?¤Ó§è¤F¡A¬O¤£¬O?¦ý¦pªG¬õ¦âªº¨T¨®¸g­«·s§ï³y¦¨¨â½ü¾÷°Ê¨®©M¤W¬õº£©O?
­·ÀI¶V©¹¤U¬O¶V°ª¡AOO¨S¦³»¡¨º­Ó¼h¯ÅªºÂà´«¤£¥i¥H¡COOÁ¿ªº¬Oµ²ºc¡A­ì²z¡A¤£¬O½Í­·ÀI¡C

downcast¨Ó¬ÝC++ §a¡I
¦pªG¨Ì§Aªºª«¥ó§Î§OÂà´«Æ[ÂI¡A¥u¦³Âà´«1.©MÂà´«2.¤~¬O¦Xªk¥i¦æªº¡A¨ä¥¦³£¬O´c·d§a(¦pªG§Ú¨S»~·|§Aªº·N«ä)¡C
¦ýC++ÅãµM¤£¬O¨ÌC¤jªºÆ[ÂI­q©wªº¡CC casting¦bC++¤À¦¨¥|ºØcasting¡C
castingªºÂ½Ä¶¡AÀ³Å±§Î©Î¶ì§Î¡A¦n¹³¥s¶ì§Î¤ñ¸û¦n(§Úı±o°Õ¡A¦ý¥Î¤°»ò§Ú¤£¤¶·N¡A¥H¤U¼È¥Î¶ì§Î)¡C
¦bC++³W½d¡Aª«¥ó§Î§OªºÂà´«ºÙ¤§¬°type conversion(¨£Standard for Programming Language C++)¤£¬O¥u¦³¶ì§Î¦Ó¤v¡A
¨ä°ò¥»ºë¯«¡Aª«¥ó§Î§O¥i¤£¥i¥HÂà´«¡Aµ{¦¡­û¦³¥D±±Åv¡A¨Ã¤£¨ü­­Âà´«1.©MÂà´«2.¡C
¨Æ¹ê¤W±qÂà´«1.¨ìÂà´«5.³£¬OC++¤¹³\ªº½d³ò¡C¶V©¹¤UªºÂà´«¡A­·ÀI¶V°ª¡AÂà´«ªº­·ÀI´N¬Oµ{¦¡­û¦Û­t¡C

Âà´«1.
´X¥G½T©w¨S¤°»ò°ÝÃD¡A©Ò¥H¥i¥HÁô¦¡Âà´«( µ{¦¡­û¤£¥ÎÁn©ú¡A¦Û°ÊÂà´«)¡A¨Ò¦p:
class B{};
class D:public B{};
B *pB= new D;//¤£¥ÎÁn©ú¡A´N¥i¥HÂà´«

Âà´«2.
µy¨ã­·ÀI¡A©Ò¥H»Ý­nÁn©úÂà´«(Åý½s;¹½T©w³o¬Oµ{¦¡­ûªº¥»·N)¡AÁn©úªº¤èªk´N¬Ostatic_cast
class B{};
class D:public B{};
B *pB= new D;//¤£¥ÎÁn©ú¡A´N¥i¥HÂà´«
D* pD= static_cast<D *>pB;//¦]¬°¬Odowncast¡Aµy¨ã­·ÀI¡A©Ò¥H­nstatic_castÁn©ú
¦bC++¸Ì¡Aª«¥ó¸Ì­Y¦³type information¡Aª«¥ó§Î§O¤]¥i¥H°ÊºAÀˬd¬O§_ÄÝ©óÂà´«1.Âà´«2.
class B{};
class D:public B{};
B *pB= new D;//¤£¥ÎÁn©ú¡A´N¥i¥HÂà´«
D* pD= dynamic_cast<D *>pB;// dynamic_castªº¦¨¥\¡A(¬Û¹ï¨Ó»¡)«OÃÒ¤FÂà´«¬O¦bÂà´«1.Âà´«2.ªº¬Û¹ï¦w¥þ½d³ò¤º¡C

Âà´«3.
´N¬O¥»°Q½×¦ê©MC¤jª§Ä³³Ì¤[ªº¨Ò¤l¡A¨ä¹ê¥¦¤ñÂà´«4.©MÂà´«5.¬Û¹ï¦w¥þ«Ü¦h¡A¯uªº¤£ª¾¹D¬°¤°»ò¥i¥Hª§½×¨º»ò¦h½g´T¡C
class B{};
class D:public B{};//D«OÃÒ¤£¼W¥[¸ê®Æ¦¨­û
B *pB= new B;
D* pD= static_cast<D *>pB;//¦]¬°D«OÃÒ¤£¼W¥[¸ê®Æ¦¨­û¡A³o­Óstatic_cast¥u¬O¹ï¨T¨®pB¤W¦¨DÃC¦â¡AÅܦ¨¤£§é¤£¦©¡AD¦âªº¨T¨®¦Ó¤v
¦pªG³o¼Ë¼g¤£¥i¥H¡A¨º½Ð±ÐC¤j¡A§ï¦¨¤U­±ªº¼gªk¥i¤£¥i¥H?
class B{B(B *pb){}};
class D:public B //D«OÃÒ¤£¼W¥[¸ê®Æ¦¨­û
{
D(pb *):B(pb){};
};
B *pB= new B;
D* pD= new D(pB);//Âà´««Øºc¤l
¨S¿ù¡AB::B(B *pb){}´N¥sÂà´««Øºc¤l¡A¦bC++¼Ð·Ç¸Ì¬O©ñ¦bConversionªº³¹¸`¸Ì°Q½×¡C
¤£ª¾C¤j¹ï³oÂà´««Øºc¤l¬O§_«ù¤@¼Ë¬Ýªk:¤£¥i¥H¡A¤£¦XOOPªººë¯«?
¦pªGÂà´««Øºc¤l¥i¥H¡A³o¨âºØ³£¬OC++±`¥ÎªºÂà´«¤è¦¡¡A¼Òºc¤@¼Ë¡A³£¬OÂà´«3.ªº¥\¯à¡C
¥i¥HÂà´««Øºc¤l¥i¥H¡Astatic_cast«ç·|¤£¥i¥H?¦]¬°static_cast¬Ý°_°_¨Ó¤ñ¸û§N¡A©Ò¥H·P«_? ^^
¨º§Ú§â«e­±ªºCoordinate§ï¦¨Âà´««Øºc¤l¡A¬O§_§A´N¨S¦³·N¨£¤F?
´N§Ú¨Ó»¡¡AÅÞ¿è¡A¥\¯à§¹¥þ¤@¼Ë¡A¥u¬O´Â¤T¼Ç¥|¡A¤@¼Ëªº·N«ä¡C

Âà´«4.
«e­±´£¨ìªºÂà´««Øºc¤l¡A®³¨Ó°µÂà´«3.¦³ÂI¤û¤M±þ鷄¡A¤j§÷¤p¥Î¡C
¥Î¥¦°µÂà´«¡AÂà´«3.ªº­l¥ÍÃþ§O¤v¸g¤£¨ü"«OÃÒ¤£¼W¥[¸ê®Æ¦¨­û"­­¨î¤F¡C
¦]¬°Âà´«ª«¥ó¬O­ì¥Í¦Û­l¥ÍÃþ§O¡C¦Ü©óÂà´«®É¡A¼W¥[ªº¸ê®Æ¦¨­û¥i¥H¦b«Øºc¤l¸Ì³B²z¡C
­·ÀI·íµM¤ñÂà´«3.°ª¡A¦ý´N¬O¨º¤@¥y¸Ü¡Aµ{¦¡­û¦Û­t­·ÀI¡CC¤j¦pªG¬Ý¨ì³o¸Ì­n¸õ¸}¡C½Ðµy¦w¤Å¾¸...
¤U­±ªº«¬§OÂà´«¡A¥i¯à¤~¬OÃz¦åºÞ¯Åªº¡C:D

Âà´«5.
¥ý¬Ý¤@¤U³o­Ó¨Ò¤l:
char *str="I am CxxlMan"
string ps= new string(str);
³o¬OC++¼Ð·Çµ{¦¡À]ªºÂà´««Øºc¤l¨Ò¤l¡C
¬O±qchar *«¬§OÂà´«¦¨ class string¡A§¹¥þ¨S¦å½tÃö«YªºÂà´«¡C
¦pªG»¡¡A¨º¬O¦]¬°³£¬O¦r¦ê®e¾¹ªºÃö«Y¡A©Ò¥H¤~¥iÂà´«¡C
¦n¹³¹ï¡A¨ä¹ê¤£¹ï¡C¹ï½s;¹¨Ó»¡¡A³o¬O§¹¥þ¤£¦Pªº¨âºØ§ÎºA¡C
¬O¤£¬O¦r¦ê®e¾¹¡A¥u¦³µ{¦¡­ûª¾¹D¡AstringÂনchar *¡A¥i¤£¥i¥HÂà¡AÂà´«¦³¨S¦³·N¸q¡A¥u¦³µ{¦¡­ûª¾¹D¡C
©Ò¥H...«áªG¦Û­t¡C
¦pªG¦³¤H¤Ï»é¡A¨º¥u¬O­Ó±a°Ñ¼Æªº«Øºc¤l¡A¤£¯àºâ¬O§Î§OÂà´«¡C
¦bC++¼Ð·Ç¤å¥ó¸Ì¡A³oºØ«Øºc¤l¬O©ñ¦btype conversionªº³¹¸`¸Ì¤¶²Ðªº¡C´N¹³½Æ»s«Øºc¤l¡A¤]¬O±a°Ñ¼Æªº«Øºc¤l¡C
¥¦­Ì¦bC++ºÙ¤§¬°½Æ»s«Øºc¤l¡A©MÂà´««Øºc¤l¤@¼Ë³£¬O¯S©wªº«Øºc¤l¡C
¦ý,¦n§a... §Ú¤£ª§½×¡C¬Ý¤U­±ªº¨Ï¥ÎªÌ©w¸qÂà´«¡C
C++¹ï¶ì§Î¬O¥i¥H­«¸üªº¡A¤]´N¬O»¡¡Aű§Î¾Þ§@­n«ç»ò°µ¡A¨Ï¥ÎªÌ¥i¥H¦Û­q¸q(user define conversion)¡C
³o¤v¸g¶W¥X¶ì§Îªº½d³ò¡A¨Ï¥ÎªÌ¥i¥H¨Ï¥Î¶ì§Îªºoperator¡A¤Ñ°¨¦æªÅªºÂà´«§Î§Oª«¥ó¡C
¨Ò¦p
MFC ªºCString(Ãþ¦üstring)
CString s;
char *= (char *)s;//¥Îcasting operatorÂà´«§¹¥þ¨S¦å½tÃö«Yªºª«¥ó
¦p¦ó­«¸ücasting operator½Ð¦Û¦æ°Ñ¾\C++»y¨¥¡C
¨Ï¥ÎªÌ¦Û©w¸q¶ì§Î¡A´X¥G¥i¥H¤Ñ°¨¦æªÅ¡A·R«ç»òÂà´N«ç»òÂà¡A§¹¥þ¦Û¥Ñªº¡C
·íµM¡AÁÙ¬O«áªG¦Û­t¡C

¬Ý¨ì³o¸Ì¡AÀ³¸Ó¥i¥H½T©wC++¹ïÂà´«¬O«Ü¶}©ñªº¤F§a(©Î³\§Oªºoop¨S³o»òfree)¡C
¦pªG¡A¦³¤H­n¦]¦¹§åµû¡AC++«Ü¤£OO¡A©ÎMFC«Ü¤£OO¡C
³o¬O¥t¥~ªºÄ³ÃD¡A¦ý´N¥»¼ÓijÃD¡A´N½ÍC++¡C(¤@½ÍOO´N·|©â¶HªºªF¦è¤@¤j°ï¶]¥X¨Ó¡A¼g¨ì·|©âµ¬¡A·Ð...)
§@ªÌ : cxxlman(CxxlMan) C++Àu¨q¦n¤â¶K¤å¶W¹L1000«h
[ ¶K¤å 1036 | ¤H®ð 3227 | µû»ù 1260 | µû»ù/¶K¤å 1.22 | °e¥Xµû»ù 27 ¦¸ ] 
[ µ¹­ÓÆg ]  [ µ¹­ÓÆg ]  [ ¦^À³¥»¤å ]  [ µoªí·s¤å ]  [ ¦^¤W­¶ ] [ ¦^°Q½×°Ï¦Cªí ] [ ¦^ª¾ÃѤJ¤f ]
2017/12/12 ¤U¤È 07:29:04

>>©Ò¥H§Ú¤~¥ÎÅÜ«¬©MÂ૬¨Ó°µ¤À³Î¡A¨º¬O¤£¦P»â°ì¡A¤£¦P·§©À¤U´£¨Ñ¤£¦Pªº¥\¯àµ¹§A°µ¿ï¾Ü¡A¤£¯à¤¬¬Û¨ú«Ý¡A§O·d²V¤F
>¤@¤U³½¥Ø²V¯]¡A¤@¤U¤£¯à¤¬¬Û¨ú¥N¡C§Ú¨º¸Ì³½¥Ø²V¯]?
>¤£¹L´NCoordinate¨º­Óµ{¦¡¡A§Ú»{¬°¥i¥H¥Îstatic_cast¹F¦¨¥Øªº¡A§A»{¬°¤£¯à³o¼Ë·d¡A¤£¬O¶Ü?
>¦Ü©ó¤¬¬Û¨ú¥N¡A¤£ª¾¦ó©Ò«ü?

½Ð¥ý¦^ÀY¬Ý¡A¬O§A­n¥Î¨ÓÃÒ©ú dynamuc_cast ¤£¦w¥þ¡A
§Ú¥u¬O»{¬°³oÃÒ©úµL®Ä

>¦pªG¤@­Óupcast¡Aµ{¦¡­û»{¬°¥Îdynamic_cast¤ñstatic_cast¥Nªº¦w¥þ©Ê¦n¡A¬°¦ó¤£¯à¨ú¥N?
>¦pªG¦]¬°®Ä¯à¦Ò¶q¡Aµ{¦¡­û»{¬°¥L¥i¥H¬°Âà§Î­t³d¡Astatic_cast¨ú¥Ndynamic_cast¡A¤S¦³¦ó¤£¥i?
>¦pªG¦bdynamic_cast³q¤£¹L¡A¦ýµ{¦¡­û»{¬°Âà´«¨S¦³°ÝÃD¡A©Ò¥H¨Ï¥Îstatic_cast©Îreinterpret_cast¡A¬°¤°»ò¤£¦æ?(³oºØÂà´«¡A§A­n¥s¤°»ò§Ú¨S·N¨£)
>
>>·Q·Q oo ªº³Ì®Ú¥»ºë¯«¬O¤°»ò¡A·Q·Q°ª¶¥»y¨¥ªº¶D¨D¬O¤°»ò¡A¦A©M§A±Ä¥Îªº§Þ³N°µ¹ï·Ó
>§Ú­Ì«e­±½Íªº¬OC++¡A¤£¬OOO(¤v¸g´£¥Ü¹L«Ü¦h¦¸)¡AC++¬O¨ÌOOP³W«h¦Ó¨Ó¡AOOPªº°ò·¡·íµM¬OOO¡C
>±qÄ~©Ó°µ¤ñ³ë¡AOOPÄ~©Ó¦ÛOO¡AC++Ä~©Ó¦ÛOOP(¤£¾å±o³o·|¤£·|¤£­Û¤£Ãþ¡A¦ýÀ³ª¾©Ò«ü)
>­n±qOO½Í°_¤]¥i¥H¡A³o­Ó°Q½×¦ê¤j·§¥i¥Hªí¹F§Ú¹ïOOªºîzÂI:
>http://www.programmer-club.com.tw/showSameTitleN/c/42739.html
>
>±qOO ªºÆ[ÂI¡AÃC¦â¥i¥H¬Oª«¥ó¡A¨T¨®¤]¬Oª«¥ó¡A¨ä¤l¶°¤]¥i¥Hª«¥ó¡A¨Ãµ²¦X¦¨¥tÃþª«¥ó¡C
>©Ò¥H¬õ¦â(Ä~©Ó¦ÛÃC¦â)ªº¨T¨®(Ä~©Ó¦Û¨T¨®)¬Oª«¥ó¡AÂŦ⪺¨T¨®(Ä~©Ó¦Û¨T¨®)¤]¬Oª«¥ó¡C
>Âà´«1.©Ò¥H¬õ¦âªº¨T¨®A¡A»¡¥¦¬O¨T¨®A(upcast)¡A·íµM¥i¥H¡C
>Âà´«2.¨º¨T¨®A¡A»¡¥¦¬O¬õ¦âªº¨T¨®A(Downcast)¡A¥i¤£¥i¥H?¥i¥H¡A¦]¬°¨T¨®A­ì¥»(­ì¥Í)´N¬O¬õ¦âªº¨®¤l¡C
>Âà´«3.¤@àw¨T¨®B(¨S¤WÃC¦â)¡A¥i¤£¥i¥H»¡¥¦¬O¬õ¦âªº¨T¨®A(Downcast)?°ò¥»¤W¤£¥i¥H¡C¦ý­Y¸g¤W¬õº£«á¡A´N¥i¥H¡C
>Âà´«4.¨º¬õ¦âªº¨T¨®»¡¥¦¬OÂŦâ¨T¨®¡A¥i¤£¥i¥H?¦n¹³¤£¥i¥H§a¡I¦ý¸g­«·s¯N¤W¬õº£«á¡A¥i¤£¥i¥H?
>Âà´«5.¨º¬õ¦âªº¨T¨®»¡¥¦¬OÂŦ⪺¼¯¦«¨®¥i¤£¥i¥H?¤Ó§è¤F¡A¬O¤£¬O?¦ý¦pªG¬õ¦âªº¨T¨®¸g­«·s§ï³y¦¨¨â½ü¾÷°Ê¨®©M¤W¬õº£©O?
>­·ÀI¶V©¹¤U¬O¶V°ª¡AOO¨S¦³»¡¨º­Ó¼h¯ÅªºÂà´«¤£¥i¥H¡COOÁ¿ªº¬Oµ²ºc¡A­ì²z¡A¤£¬O½Í­·ÀI¡C
>
>downcast¨Ó¬ÝC++ §a¡I
>¦pªG¨Ì§Aªºª«¥ó§Î§OÂà´«Æ[ÂI¡A¥u¦³Âà´«1.©MÂà´«2.¤~¬O¦Xªk¥i¦æªº¡A¨ä¥¦³£¬O´c·d§a(¦pªG§Ú¨S»~·|§Aªº·N«ä)¡C
>¦ýC++ÅãµM¤£¬O¨ÌC¤jªºÆ[ÂI­q©wªº¡CC casting¦bC++¤À¦¨¥|ºØcasting¡C
>castingªºÂ½Ä¶¡AÀ³Å±§Î©Î¶ì§Î¡A¦n¹³¥s¶ì§Î¤ñ¸û¦n(§Úı±o°Õ¡A¦ý¥Î¤°»ò§Ú¤£¤¶·N¡A¥H¤U¼È¥Î¶ì§Î)¡C
>¦bC++³W½d¡Aª«¥ó§Î§OªºÂà´«ºÙ¤§¬°type conversion(¨£Standard for Programming Language C++)¤£¬O¥u¦³¶ì§Î¦Ó¤v¡A
>¨ä°ò¥»ºë¯«¡Aª«¥ó§Î§O¥i¤£¥i¥HÂà´«¡Aµ{¦¡­û¦³¥D±±Åv¡A¨Ã¤£¨ü­­Âà´«1.©MÂà´«2.¡C
>¨Æ¹ê¤W±qÂà´«1.¨ìÂà´«5.³£¬OC++¤¹³\ªº½d³ò¡C¶V©¹¤UªºÂà´«¡A­·ÀI¶V°ª¡AÂà´«ªº­·ÀI´N¬Oµ{¦¡­û¦Û­t¡C
>
>Âà´«1.
>´X¥G½T©w¨S¤°»ò°ÝÃD¡A©Ò¥H¥i¥HÁô¦¡Âà´«( µ{¦¡­û¤£¥ÎÁn©ú¡A¦Û°ÊÂà´«)¡A¨Ò¦p:
>class B{};
>class D:public B{};
>B *pB= new D;//¤£¥ÎÁn©ú¡A´N¥i¥HÂà´«
>
>Âà´«2.
>µy¨ã­·ÀI¡A©Ò¥H»Ý­nÁn©úÂà´«(Åý½s;¹½T©w³o¬Oµ{¦¡­ûªº¥»·N)¡AÁn©úªº¤èªk´N¬Ostatic_cast
>class B{};
>class D:public B{};
>B *pB= new D;//¤£¥ÎÁn©ú¡A´N¥i¥HÂà´«
>D* pD= static_cast<D *>pB;//¦]¬°¬Odowncast¡Aµy¨ã­·ÀI¡A©Ò¥H­nstatic_castÁn©ú
>¦bC++¸Ì¡Aª«¥ó¸Ì­Y¦³type information¡Aª«¥ó§Î§O¤]¥i¥H°ÊºAÀˬd¬O§_ÄÝ©óÂà´«1.Âà´«2.
>class B{};
>class D:public B{};
>B *pB= new D;//¤£¥ÎÁn©ú¡A´N¥i¥HÂà´«
>D* pD= dynamic_cast<D *>pB;// dynamic_castªº¦¨¥\¡A(¬Û¹ï¨Ó»¡)«OÃÒ¤FÂà´«¬O¦bÂà´«1.Âà´«2.ªº¬Û¹ï¦w¥þ½d³ò¤º¡C
>
>Âà´«3.
>´N¬O¥»°Q½×¦ê©MC¤jª§Ä³³Ì¤[ªº¨Ò¤l¡A¨ä¹ê¥¦¤ñÂà´«4.©MÂà´«5.¬Û¹ï¦w¥þ«Ü¦h¡A¯uªº¤£ª¾¹D¬°¤°»ò¥i¥Hª§½×¨º»ò¦h½g´T¡C
>class B{};
>class D:public B{};//D«OÃÒ¤£¼W¥[¸ê®Æ¦¨­û
>B *pB= new B;
>D* pD= static_cast<D *>pB;//¦]¬°D«OÃÒ¤£¼W¥[¸ê®Æ¦¨­û¡A³o­Óstatic_cast¥u¬O¹ï¨T¨®pB¤W¦¨DÃC¦â¡AÅܦ¨¤£§é¤£¦©¡AD¦âªº¨T¨®¦Ó¤v
>¦pªG³o¼Ë¼g¤£¥i¥H¡A¨º½Ð±ÐC¤j¡A§ï¦¨¤U­±ªº¼gªk¥i¤£¥i¥H?
>class B{B(B *pb){}};
>class D:public B //D«OÃÒ¤£¼W¥[¸ê®Æ¦¨­û
>{
>D(pb *):B(pb){};
>};
>B *pB= new B;
>D* pD= new D(pB);//Âà´««Øºc¤l
>¨S¿ù¡AB::B(B *pb){}´N¥sÂà´««Øºc¤l¡A¦bC++¼Ð·Ç¸Ì¬O©ñ¦bConversionªº³¹¸`¸Ì°Q½×¡C
>¤£ª¾C¤j¹ï³oÂà´««Øºc¤l¬O§_«ù¤@¼Ë¬Ýªk:¤£¥i¥H¡A¤£¦XOOPªººë¯«?
>¦pªGÂà´««Øºc¤l¥i¥H¡A³o¨âºØ³£¬OC++±`¥ÎªºÂà´«¤è¦¡¡A¼Òºc¤@¼Ë¡A³£¬OÂà´«3.ªº¥\¯à¡C
>¥i¥HÂà´««Øºc¤l¥i¥H¡Astatic_cast«ç·|¤£¥i¥H?¦]¬°static_cast¬Ý°_°_¨Ó¤ñ¸û§N¡A©Ò¥H·P«_? ^^
>¨º§Ú§â«e­±ªºCoordinate§ï¦¨Âà´««Øºc¤l¡A¬O§_§A´N¨S¦³·N¨£¤F?
>´N§Ú¨Ó»¡¡AÅÞ¿è¡A¥\¯à§¹¥þ¤@¼Ë¡A¥u¬O´Â¤T¼Ç¥|¡A¤@¼Ëªº·N«ä¡C
>
>Âà´«4.
>«e­±´£¨ìªºÂà´««Øºc¤l¡A®³¨Ó°µÂà´«3.¦³ÂI¤û¤M±þ鷄¡A¤j§÷¤p¥Î¡C
>¥Î¥¦°µÂà´«¡AÂà´«3.ªº­l¥ÍÃþ§O¤v¸g¤£¨ü'«OÃÒ¤£¼W¥[¸ê®Æ¦¨­û'­­¨î¤F¡C
>¦]¬°Âà´«ª«¥ó¬O­ì¥Í¦Û­l¥ÍÃþ§O¡C¦Ü©óÂà´«®É¡A¼W¥[ªº¸ê®Æ¦¨­û¥i¥H¦b«Øºc¤l¸Ì³B²z¡C
>­·ÀI·íµM¤ñÂà´«3.°ª¡A¦ý´N¬O¨º¤@¥y¸Ü¡Aµ{¦¡­û¦Û­t­·ÀI¡CC¤j¦pªG¬Ý¨ì³o¸Ì­n¸õ¸}¡C½Ðµy¦w¤Å¾¸...
>¤U­±ªº«¬§OÂà´«¡A¥i¯à¤~¬OÃz¦åºÞ¯Åªº¡C:D
>
>Âà´«5.
>¥ý¬Ý¤@¤U³o­Ó¨Ò¤l:
>char *str='I am CxxlMan'
>string ps= new string(str);
>³o¬OC++¼Ð·Çµ{¦¡À]ªºÂà´««Øºc¤l¨Ò¤l¡C
>¬O±qchar *«¬§OÂà´«¦¨ class string¡A§¹¥þ¨S¦å½tÃö«YªºÂà´«¡C
>¦pªG»¡¡A¨º¬O¦]¬°³£¬O¦r¦ê®e¾¹ªºÃö«Y¡A©Ò¥H¤~¥iÂà´«¡C
>¦n¹³¹ï¡A¨ä¹ê¤£¹ï¡C¹ï½s;¹¨Ó»¡¡A³o¬O§¹¥þ¤£¦Pªº¨âºØ§ÎºA¡C
>¬O¤£¬O¦r¦ê®e¾¹¡A¥u¦³µ{¦¡­ûª¾¹D¡AstringÂনchar *¡A¥i¤£¥i¥HÂà¡AÂà´«¦³¨S¦³·N¸q¡A¥u¦³µ{¦¡­ûª¾¹D¡C
>©Ò¥H...«áªG¦Û­t¡C
>¦pªG¦³¤H¤Ï»é¡A¨º¥u¬O­Ó±a°Ñ¼Æªº«Øºc¤l¡A¤£¯àºâ¬O§Î§OÂà´«¡C
>¦bC++¼Ð·Ç¤å¥ó¸Ì¡A³oºØ«Øºc¤l¬O©ñ¦btype conversionªº³¹¸`¸Ì¤¶²Ðªº¡C´N¹³½Æ»s«Øºc¤l¡A¤]¬O±a°Ñ¼Æªº«Øºc¤l¡C
>¥¦­Ì¦bC++ºÙ¤§¬°½Æ»s«Øºc¤l¡A©MÂà´««Øºc¤l¤@¼Ë³£¬O¯S©wªº«Øºc¤l¡C
>¦ý,¦n§a... §Ú¤£ª§½×¡C¬Ý¤U­±ªº¨Ï¥ÎªÌ©w¸qÂà´«¡C
>C++¹ï¶ì§Î¬O¥i¥H­«¸üªº¡A¤]´N¬O»¡¡Aű§Î¾Þ§@­n«ç»ò°µ¡A¨Ï¥ÎªÌ¥i¥H¦Û­q¸q(user define conversion)¡C
>³o¤v¸g¶W¥X¶ì§Îªº½d³ò¡A¨Ï¥ÎªÌ¥i¥H¨Ï¥Î¶ì§Îªºoperator¡A¤Ñ°¨¦æªÅªºÂà´«§Î§Oª«¥ó¡C
>¨Ò¦p
>MFC ªºCString(Ãþ¦üstring)
>CString s;
>char *= (char *)s;//¥Îcasting operatorÂà´«§¹¥þ¨S¦å½tÃö«Yªºª«¥ó
>¦p¦ó­«¸ücasting operator½Ð¦Û¦æ°Ñ¾\C++»y¨¥¡C
>¨Ï¥ÎªÌ¦Û©w¸q¶ì§Î¡A´X¥G¥i¥H¤Ñ°¨¦æªÅ¡A·R«ç»òÂà´N«ç»òÂà¡A§¹¥þ¦Û¥Ñªº¡C
>·íµM¡AÁÙ¬O«áªG¦Û­t¡C
>
>¬Ý¨ì³o¸Ì¡AÀ³¸Ó¥i¥H½T©wC++¹ïÂà´«¬O«Ü¶}©ñªº¤F§a(©Î³\§Oªºoop¨S³o»òfree)¡C
>¦pªG¡A¦³¤H­n¦]¦¹§åµû¡AC++«Ü¤£OO¡A©ÎMFC«Ü¤£OO¡C
>³o¬O¥t¥~ªºÄ³ÃD¡A¦ý´N¥»¼ÓijÃD¡A´N½ÍC++¡C(¤@½ÍOO´N·|©â¶HªºªF¦è¤@¤j°ï¶]¥X¨Ó¡A¼g¨ì·|©âµ¬¡A·Ð...)
>

¦nªø¤@¬q¡A¥Î¤â¾÷¬Ý¦³ÂIµh­W¡A©Ò¥H¨S¬Ý§¹¡A¥H§Aªº¤ô¥­À³¸Ó¤£·|¦³¿ù¡A¥u­n¤£¥Î¿ù¦a¤è
§@ªÌ : sunyear(coco) VC++¨ô¶V±M®aC++³»¦y°ª¤â¶K¤å¶W¹L2000«h
[ ¶K¤å 2421 | ¤H®ð 1485 | µû»ù 6060 | µû»ù/¶K¤å 2.5 | °e¥Xµû»ù 5 ¦¸ ] 
[ µ¹­ÓÆg ]  [ µ¹­ÓÆg ]  [ ¦^À³¥»¤å ]  [ µoªí·s¤å ]  [ ¦^¤W­¶ ] [ ¦^°Q½×°Ï¦Cªí ] [ ¦^ª¾ÃѤJ¤f ]
2017/12/12 ¤U¤È 09:45:37
>½Ð¥ý¦^ÀY¬Ý¡A¬O§A­n¥Î¨ÓÃÒ©ú dynamuc_cast ¤£¦w¥þ¡A
>§Ú¥u¬O»{¬°³oÃÒ©úµL®Ä
µð¡I¡H¨º¸Ì?
§A¤£¬O¤@ª½°í«ù¡Adynamic_cast³q¤£¹L´N¤£¯à¥Îstatic_cast¨ú¥N¡A¥Îstatic_cast´N¬O¶Ã·d¶Ü?
¤°»ò®É­ÔÅܦ¨§Ú»¡dynamic_cast¤£¦w¥þ?§Ú»¡ªº¬O:dynamic_cast ¥i¥H³q¹Lªí¥Ü( ¬Û¹ï¨Ó»¡)¬O¦w¥þªº¡A¦ý¤£ªí¥Ü¤£³q¹L´N¬O¦³¿ù¡C

>¦nªø¤@¬q¡A¥Î¤â¾÷¬Ý¦³ÂIµh­W¡A©Ò¥H¨S¬Ý§¹¡A¥H§Aªº¤ô¥­À³¸Ó¤£·|¦³¿ù¡A¥u­n¤£¥Î¿ù¦a¤è
STD lib©MMFCªº¨Ò¤l¡A¦pªG¦³¿ù¡A¤£­n§ä§Ú:D
§@ªÌ : cxxlman(CxxlMan) C++Àu¨q¦n¤â¶K¤å¶W¹L1000«h
[ ¶K¤å 1036 | ¤H®ð 3227 | µû»ù 1260 | µû»ù/¶K¤å 1.22 | °e¥Xµû»ù 27 ¦¸ ] 
[ µ¹­ÓÆg ]  [ µ¹­ÓÆg ]  [ ¦^À³¥»¤å ]  [ µoªí·s¤å ]  [ ¦^¤W­¶ ] [ ¦^°Q½×°Ï¦Cªí ] [ ¦^ª¾ÃѤJ¤f ]
2017/12/13 ¤U¤È 12:23:44

>>½Ð¥ý¦^ÀY¬Ý¡A¬O§A­n¥Î¨ÓÃÒ©ú dynamuc_cast ¤£¦w¥þ¡A
>>§Ú¥u¬O»{¬°³oÃÒ©úµL®Ä
>µð¡I¡H¨º¸Ì?
>§A¤£¬O¤@ª½°í«ù¡Adynamic_cast³q¤£¹L´N¤£¯à¥Îstatic_cast¨ú¥N¡A¥Îstatic_cast´N¬O¶Ã·d¶Ü?

¥¿¸Ñ

>¤°»ò®É­ÔÅܦ¨§Ú»¡dynamic_cast¤£¦w¥þ?
>

§A¸ÑÄÀ¥H¤U§a

>2017/11/27 ¤U¤È 10:27:01
>¦n§a¡A§Ú§ï¼g¤@¤Uµ{¦¡¡A©Î³\¸û¯à¼á²M
>if (dynamic_cast<Derived4*>(clone_pBase4))
>¡@cout << '¦w¥þÂ૬' << endl;
>else
>¡@cout << '¤£¦w¥þÂ૬' << endl;
>
>ª`·N: '(¤£)¦w¥þ' ¤£¬O '(¤£)§¹¥þ'
>©Ò¿×'¤£¦w¥þ'¥u¬O¨S¿ìªk«OÃÒ¦w¥þ¡A¨Ã¤£¬O»¡Â૬¤@©w¬O¿ùªº¡C
>¦pªGµ{¦¡­û½T©wÂ૬¬O¹ïªº¡A¥i¥H¥Îstatic_cast¨Ó±j¨îÂ૬¡C

>§Ú»¡ªº¬O:dynamic_cast ¥i¥H³q¹Lªí¥Ü( ¬Û¹ï¨Ó»¡)¬O¦w¥þªº¡A¦ý¤£ªí¥Ü¤£³q¹L´N¬O¦³¿ù¡C

RTTI ·§©À«Ü𥶆³æ¤]«Ü½T¹ê¡A¦³´N¬O¦³¡A¨S¦³´N¬O¨S¦³¡A¹ï´N¬O¹ï¡A¿ù´N¬O¿ù
¤£³q¹L´N¬O¨S¦³¡A¤£³q¹L´N¬O¿ù¡A¤£¯à¥Î static_cast ¨ÓÃÒ©ú "¤£ªí¥Ü¤£³q¹L´N¬O¦³¿ù"

¬°¤°»ò§A§Ú»{ª¾·|¦³®t²§¡A¦]𠉎¨S²z¸Ñ oo ­«µøªº¬O type¡A¤£¬O¤º®e¡A
¦Ó§A¤@ª½§â¤º®e¤@¼Ëªº class µø¬°¥i¤¬Â઺
§@ªÌ : sunyear(coco) VC++¨ô¶V±M®aC++³»¦y°ª¤â¶K¤å¶W¹L2000«h
[ ¶K¤å 2421 | ¤H®ð 1485 | µû»ù 6060 | µû»ù/¶K¤å 2.5 | °e¥Xµû»ù 5 ¦¸ ] 
[ µ¹­ÓÆg ]  [ µ¹­ÓÆg ]  [ ¦^À³¥»¤å ]  [ µoªí·s¤å ]  [ ¦^¤W­¶ ] [ ¦^°Q½×°Ï¦Cªí ] [ ¦^ª¾ÃѤJ¤f ]
2017/12/13 ¤U¤È 01:43:13
C>§A¸ÑÄÀ¥H¤U§a
S>>2017/11/27 ¤U¤È 10:27:01
S>>¦n§a¡A§Ú§ï¼g¤@¤Uµ{¦¡¡A©Î³\¸û¯à¼á²M
S>>if (dynamic_cast<Derived4*>(clone_pBase4))
S>>¡@cout << '¦w¥þÂ૬' << endl;
S>>else
S>>¡@cout << '¤£¦w¥þÂ૬' << endl;
S>>
S>>ª`·N: '(¤£)¦w¥þ' ¤£¬O '(¤£)§¹¥þ'
S>>©Ò¿×'¤£¦w¥þ'¥u¬O¨S¿ìªk«OÃÒ¦w¥þ¡A¨Ã¤£¬O»¡Â૬¤@©w¬O¿ùªº¡C
S>>¦pªGµ{¦¡­û½T©wÂ૬¬O¹ïªº¡A¥i¥H¥Îstatic_cast¨Ó±j¨îÂ૬¡C
­n¸ÑÄÀ¤°»ò?³o¬q¸Ü¦p¦ó¯à²z¸Ñ¦¨§Ú¥Î¨Ó"ÃÒ©ú dynamuc_cast ¤£¦w¥þ"?
¥u¬O»¡©ú¤£¦w¥þ¤£ªí¥Ü¿ùªº¡A¥u¬Orttiªº¾÷¨îµLªk½T»{¦w¥þ¡C
³o©M§Ú³o¥y¸Ü¦³¤°»ò¤£¦P?
S>>§Ú»¡ªº¬O:dynamic_cast ¥i¥H³q¹Lªí¥Ü( ¬Û¹ï¨Ó»¡)¬O¦w¥þªº¡A¦ý¤£ªí¥Ü¤£³q¹L´N¬O¦³¿ù¡C
µ{¦¡­û­n°í«ùÂ૬¡A´N¬O¾a¦Û¤v§PÂ_¡CC++µ{¦¡¦w¤£¦w¥þ¹J¥D­nÁÙ¬O­n¾a¦Û¤v¡A¤£­n¥þ¿àµ¹½s;¹¡C³o¤~¬OC++ºë¯«¡C


>RTTI ·§©À«Ü𥶆³æ¤]«Ü½T¹ê¡A¦³´N¬O¦³¡A¨S¦³´N¬O¨S¦³¡A¹ï´N¬O¹ï¡A¿ù´N¬O¿ù
¤å¥óÁ¿ªº¬O"¤£¦w¥þ"ÁÙ¬O"¿ù"?¨â­Óªº®t²§¡A§A¤F¸Ñ¶Ü?
¦pªG·Ó§A³o»ò¸ÑÄÀ¡A2017/12/12 ¤U¤È 05:23:19§Ú¶KªºÂà´«3.~Âà´«5.³£¤£¥i¯à¦b dynamuc_cast ³q¹L¡C
std lib©MMFC class³£¦³«Ü¦h¨Ò¤l¡A§A»{¬°¥¦­Ì³£¬O¶Ã·d?

>¤£³q¹L´N¬O¨S¦³¡A¤£³q¹L´N¬O¿ù¡A¤£¯à¥Î static_cast ¨ÓÃÒ©ú "¤£ªí¥Ü¤£³q¹L´N¬O¦³¿ù"
ÁÙ¬O­J¶Ã¸ÑÄÀ§Úªº¸Ü¤F¡I§Ú»¡ªº¬O¨Ï¥Îstatic_castÂ૬¡A¹ï¿ù¥Ñµ{¦¡­û¦Û¤v­t³d¡A¨S¦³­nÃÒ©údynamuc_cast¤°»ò¡C
¦Ü©ódynamuc_cast¤£³q¹L´Nªí¥Ü½s͵Lªk½T»{Â૬¬O¦w¥þ¦Ó¤v¡A¤£ªí¥Ü¤£³q¹L´N¬O¦³¿ù¡C³o¬O¹ï¦w¤£¦w¥þªº¸ÑÄÀ¡A¤zstatic_cast¦ó¨Æ?

>¬°¤°»ò§A§Ú»{ª¾·|¦³®t²§¡A¦]𠉎¨S²z¸Ñ oo ­«µøªº¬O type¡A¤£¬O¤º®e¡A
type¬OOOPªºªF¦è¡A¤£¬OOO(´£¥Ü«Ü¦h¦¸)¡COO¥u½Íª«¥ó(´Nºâ´£¨ìtype³o­Ó¦r¤]¥u¬O·íª«¥ó¦b³B²z)¡AOOP ¸Ìªºtype¦bOO¸Ì¬Oª«¥ó¡A¦ý¦bOOP¸Ì°ò¥»¤W¤£§âtypeµø¬°ª«¥ó¡C

>¦Ó§A¤@ª½§â¤º®e¤@¼Ëªº class µø¬°¥i¤¬Âà
¤£¥u¬O¤º®e¤@¼Ëªº class¤¬Âà¡C
¥u­nµ{¦¡­û»{¥iªº¡A³£¥i¥HÂà(C++´£¨Ñ³Ì¤jªº¦Û¥Ñ«×Åýµ{­û¥i¥HÂà´«)¡C¹ï¿ù´N¬Oµ{¦¡­û­t³d¡C
³o¤~¬OC++ªººë¯«¡C

­nÄ~Äò°Q½×¡A½Ð»{¯u¦^2017/12/12 ¤U¤È 05:23:19 ©M 2017/12/11 ¤U¤È 03:34:51
¤×¨ä¬O2017/12/11 ¤U¤È 03:34:51¦³¤@¬q³q°Tªº¨Ò¤l¡A¤£¯à¥Îdynamuc_cast(¥Î¤F¤]¤£·|¹L)¡A¨º­n¦p¦ó¼¶¼g³oºØ»Ý¨Dªºµ{¦¡?
¤£­n¸I¨ì­«ÂI´N¬n¨ì§OªºÄ³ÃD¡A¤×¨ä¬O®³§á¦±§O¤Hªº¸Ü¨Óª§½×¡C
¦pªG¡A¥u¬O³o¼Ë¡AµL»Ý¦A°Q½×¤U¥h¡C§Ú¤£¬O¨Ó§n¬[ªº¡C
§@ªÌ : cxxlman(CxxlMan) C++Àu¨q¦n¤â¶K¤å¶W¹L1000«h
[ ¶K¤å 1036 | ¤H®ð 3227 | µû»ù 1260 | µû»ù/¶K¤å 1.22 | °e¥Xµû»ù 27 ¦¸ ] 
[ µ¹­ÓÆg ]  [ µ¹­ÓÆg ]  [ ¦^À³¥»¤å ]  [ µoªí·s¤å ]  [ ¦^¤W­¶ ] [ ¦^°Q½×°Ï¦Cªí ] [ ¦^ª¾ÃѤJ¤f ]
2017/12/13 ¤U¤È 03:16:45
¦n§a¡A§ï¨ì§Aº¡·N

>>½Ð¥ý¦^ÀY¬Ý¡A¬O§A­n¥Î¨ÓÃÒ©ú dynamuc_cast ¤£¦w¥þ¡A
>>§Ú¥u¬O»{¬°³oÃÒ©úµL®Ä
>µð¡I¡H¨º¸Ì?
>§A¤£¬O¤@ª½°í«ù¡Adynamic_cast³q¤£¹L´N¤£¯à¥Îstatic_cast¨ú¥N¡A¥Îstatic_cast´N¬O¶Ã·d¶Ü?

¥¿¸Ñ

>¤°»ò®É­ÔÅܦ¨§Ú»¡dynamic_cast¤£¦w¥þ?
>

§Aµ´¹ï¦³»¡¡A¤Þµ¹§A¬Ý

>2017/11/27 ¤U¤È 10:27:01
>¦n§a¡A§Ú§ï¼g¤@¤Uµ{¦¡¡A©Î³\¸û¯à¼á²M
>if (dynamic_cast<Derived4*>(clone_pBase4))
>¡@cout << '¦w¥þÂ૬' << endl;
>else
>¡@cout << '¤£¦w¥þÂ૬' << endl;
>
>ª`·N: '(¤£)¦w¥þ' ¤£¬O '(¤£)§¹¥þ'
>©Ò¿×'¤£¦w¥þ'¥u¬O¨S¿ìªk«OÃÒ¦w¥þ¡A¨Ã¤£¬O»¡Â૬¤@©w¬O¿ùªº¡C
>¦pªGµ{¦¡­û½T©wÂ૬¬O¹ïªº¡A¥i¥H¥Îstatic_cast¨Ó±j¨îÂ૬¡C

>§Ú»¡ªº¬O:dynamic_cast ¥i¥H³q¹Lªí¥Ü( ¬Û¹ï¨Ó»¡)¬O¦w¥þªº¡A¦ý¤£ªí¥Ü¤£³q¹L´N¬O¦³¿ù¡C

RTTI ·§©À«Ü𥶆³æ¤]«Ü½T¹ê¡A¦³´N¬O¦³¡A¨S¦³´N¬O¨S¦³¡A¹ï´N¬O¹ï¡A¿ù´N¬O¿ù
¤£³q¹L´N¬O¨S¦³¡A¤£³q¹L´N¬O¿ù¡A¤£¯à¥Î static_cast ¨ÓÃÒ©ú "¤£ªí¥Ü¤£³q¹L´N¬O¦³¿ù"

¬°¤°»ò§A§Ú»{ª¾·|¦³®t²§¡A¦]𠉎¨S²z¸Ñ oop ­«µøªº¬O type¡A¤£¬O¤º®e¡A
¦Ó§A¤@ª½§â¤º®e¤@¼Ëªº class µø¬°¥i¤¬Â઺
§@ªÌ : cxxlman(CxxlMan) C++Àu¨q¦n¤â¶K¤å¶W¹L1000«h
[ ¶K¤å 1036 | ¤H®ð 3227 | µû»ù 1260 | µû»ù/¶K¤å 1.22 | °e¥Xµû»ù 27 ¦¸ ] 
[ µ¹­ÓÆg ]  [ µ¹­ÓÆg ]  [ ¦^À³¥»¤å ]  [ µoªí·s¤å ]  [ ¦^¤W­¶ ] [ ¦^°Q½×°Ï¦Cªí ] [ ¦^ª¾ÃѤJ¤f ]
2017/12/13 ¤U¤È 03:26:23

>>RTTI ·§©À«Ü𥶆³æ¤]«Ü½T¹ê¡A¦³´N¬O¦³¡A¨S¦³´N¬O¨S¦³¡A¹ï´N¬O¹ï¡A¿ù´N¬O¿ù
>¤å¥óÁ¿ªº¬O'¤£¦w¥þ'ÁÙ¬O'¿ù'?¨â­Óªº®t²§¡A§A¤F¸Ñ¶Ü?
>¦pªG·Ó§A³o»ò¸ÑÄÀ¡A2017/12/12 ¤U¤È 05:23:19§Ú¶KªºÂà´«3.~Âà´«5.³£¤£¥i¯à¦b dynamuc_cast ³q¹L¡C
>std lib©MMFC class³£¦³«Ü¦h¨Ò¤l¡A§A»{¬°¥¦­Ì³£¬O¶Ã·d?

¨ºÃö dynamuc_cast ¤°»ò¨Æ

>
>>¤£³q¹L´N¬O¨S¦³¡A¤£³q¹L´N¬O¿ù¡A¤£¯à¥Î static_cast ¨ÓÃÒ©ú '¤£ªí¥Ü¤£³q¹L´N¬O¦³¿ù'
>ÁÙ¬O­J¶Ã¸ÑÄÀ§Úªº¸Ü¤F¡I§Ú»¡ªº¬O¨Ï¥Îstatic_castÂ૬¡A¹ï¿ù¥Ñµ{¦¡­û¦Û¤v­t³d¡A¨S¦³­nÃÒ©údynamuc_cast¤°»ò¡C
>¦Ü©ódynamuc_cast¤£³q¹L´Nªí¥Ü½s͵Lªk½T»{Â૬¬O¦w¥þ¦Ó¤v¡A¤£ªí¥Ü¤£³q¹L´N¬O¦³¿ù¡C³o¬O¹ï¦w¤£¦w¥þªº¸ÑÄÀ¡A¤zstatic_cast¦ó¨Æ?

dynamuc_cast ¤£³q¹Lªí¥Üª«¥ó§t¨ä¦¨¥÷¡A¤£Ãö static_cast ªº¨Æ

>
>>¬°¤°»ò§A§Ú»{ª¾·|¦³®t²§¡A¦]𠉎¨S²z¸Ñ oo ­«µøªº¬O type¡A¤£¬O¤º®e¡A
>type¬OOOPªºªF¦è¡A¤£¬OOO(´£¥Ü«Ü¦h¦¸)¡COO¥u½Íª«¥ó(´Nºâ´£¨ìtype³o­Ó¦r¤]¥u¬O·íª«¥ó¦b³B²z)¡AOOP ¸Ìªºtype¦bOO¸Ì¬Oª«¥ó¡A¦ý¦bOOP¸Ì°ò¥»¤W¤£§âtypeµø¬°ª«¥ó¡C

¤w¶¶§A·N¤F

>
>>¦Ó§A¤@ª½§â¤º®e¤@¼Ëªº class µø¬°¥i¤¬Âà
>¤£¥u¬O¤º®e¤@¼Ëªº class¤¬Âà¡C
>¥u­nµ{¦¡­û»{¥iªº¡A³£¥i¥HÂà(C++´£¨Ñ³Ì¤jªº¦Û¥Ñ«×Åýµ{­û¥i¥HÂà´«)¡C¹ï¿ù´N¬Oµ{¦¡­û­t³d¡C
>³o¤~¬OC++ªººë¯«¡C

¨º¬O C ªºÙί«¡A§A¤@©w·|»¡ CPP §A¯à³o¼Ë°µ¡A©Ò¥H§Ú¤~¥Î oo ¦Ó¤£¥Î oop

>
>­nÄ~Äò°Q½×¡A½Ð»{¯u¦^2017/12/12 ¤U¤È 05:23:19 ©M 2017/12/11 ¤U¤È 03:34:51
>¤×¨ä¬O2017/12/11 ¤U¤È 03:34:51¦³¤@¬q³q°Tªº¨Ò¤l¡A¤£¯à¥Îdynamuc_cast(¥Î¤F¤]¤£·|¹L)¡A¨º­n¦p¦ó¼¶¼g³oºØ»Ý¨Dªºµ{¦¡?
>¤£­n¸I¨ì­«ÂI´N¬n¨ì§OªºÄ³ÃD¡A¤×¨ä¬O®³§á¦±§O¤Hªº¸Ü¨Óª§½×¡C
>¦pªG¡A¥u¬O³o¼Ë¡AµL»Ý¦A°Q½×¤U¥h¡C§Ú¤£¬O¨Ó§n¬[ªº¡C

¨º®Ú¥»¤£Ãö dynamuc_cast ªº¨Æ¡Adynamuc_cast ·F¹À¥hºÞ³q°Tªº¨Æ±¡
§@ªÌ : cxxlman(CxxlMan) C++Àu¨q¦n¤â¶K¤å¶W¹L1000«h
[ ¶K¤å 1036 | ¤H®ð 3227 | µû»ù 1260 | µû»ù/¶K¤å 1.22 | °e¥Xµû»ù 27 ¦¸ ] 
[ µ¹­ÓÆg ]  [ µ¹­ÓÆg ]  [ ¦^À³¥»¤å ]  [ µoªí·s¤å ]  [ ¦^¤W­¶ ] [ ¦^°Q½×°Ï¦Cªí ] [ ¦^ª¾ÃѤJ¤f ]
2017/12/13 ¤U¤È 03:28:20

>>
>>>¤£³q¹L´N¬O¨S¦³¡A¤£³q¹L´N¬O¿ù¡A¤£¯à¥Î static_cast ¨ÓÃÒ©ú '¤£ªí¥Ü¤£³q¹L´N¬O¦³¿ù'
>>ÁÙ¬O­J¶Ã¸ÑÄÀ§Úªº¸Ü¤F¡I§Ú»¡ªº¬O¨Ï¥Îstatic_castÂ૬¡A¹ï¿ù¥Ñµ{¦¡­û¦Û¤v­t³d¡A¨S¦³­nÃÒ©údynamuc_cast¤°»ò¡C
>>¦Ü©ódynamuc_cast¤£³q¹L´Nªí¥Ü½s͵Lªk½T»{Â૬¬O¦w¥þ¦Ó¤v¡A¤£ªí¥Ü¤£³q¹L´N¬O¦³¿ù¡C³o¬O¹ï¦w¤£¦w¥þªº¸ÑÄÀ¡A¤zstatic_cast¦ó¨Æ?
>
>dynamuc_cast ¤£³q¹Lªí¥Üª«¥ó§t¨ä¦¨¥÷¡A¤£Ãö static_cast ªº¨Æ
>

³o¸Ì¤Ö¥´¤@­Ó¦r

dynamuc_cast ¤£³q¹Lªí¥Üª«¥ó¤£§t¨ä¦¨¥÷¡A¤£Ãö static_cast ªº¨Æ
§@ªÌ : cxxlman(CxxlMan) C++Àu¨q¦n¤â¶K¤å¶W¹L1000«h
[ ¶K¤å 1036 | ¤H®ð 3227 | µû»ù 1260 | µû»ù/¶K¤å 1.22 | °e¥Xµû»ù 27 ¦¸ ] 
[ µ¹­ÓÆg ]  [ µ¹­ÓÆg ]  [ ¦^À³¥»¤å ]  [ µoªí·s¤å ]  [ ¦^¤W­¶ ] [ ¦^°Q½×°Ï¦Cªí ] [ ¦^ª¾ÃѤJ¤f ]
2017/12/13 ¤U¤È 03:36:13

>
>>
>>>¦Ó§A¤@ª½§â¤º®e¤@¼Ëªº class µø¬°¥i¤¬Âà
>>¤£¥u¬O¤º®e¤@¼Ëªº class¤¬Âà¡C
>>¥u­nµ{¦¡­û»{¥iªº¡A³£¥i¥HÂà(C++´£¨Ñ³Ì¤jªº¦Û¥Ñ«×Åýµ{­û¥i¥HÂà´«)¡C¹ï¿ù´N¬Oµ{¦¡­û­t³d¡C
>>³o¤~¬OC++ªººë¯«¡C
>
>¨º¬O C ªºÙί«¡A§A¤@©w·|»¡ CPP §A¯à³o¼Ë°µ¡A©Ò¥H§Ú¤~¥Î oo ¦Ó¤£¥Î oop

¨º¬O C ªºÙί«¡A§A¤@©w·|»¡ CPP ¤]¯à³o¼Ë°µ¡A©Ò¥H§Ú¤~¥Î oo ¦Ó¤£¥Î oop
§@ªÌ : sunyear(coco) VC++¨ô¶V±M®aC++³»¦y°ª¤â¶K¤å¶W¹L2000«h
[ ¶K¤å 2421 | ¤H®ð 1485 | µû»ù 6060 | µû»ù/¶K¤å 2.5 | °e¥Xµû»ù 5 ¦¸ ] 
[ µ¹­ÓÆg ]  [ µ¹­ÓÆg ]  [ ¦^À³¥»¤å ]  [ µoªí·s¤å ]  [ ¦^¤W­¶ ] [ ¦^°Q½×°Ï¦Cªí ] [ ¦^ª¾ÃѤJ¤f ]
2017/12/13 ¤U¤È 03:39:42
S>¤°»ò®É­ÔÅܦ¨§Ú»¡dynamic_cast¤£¦w¥þ?
C>§Aµ´¹ï¦³»¡¡A¤Þµ¹§A¬Ý

>2017/11/27 ¤U¤È 10:27:01
S>¦n§a¡A§Ú§ï¼g¤@¤Uµ{¦¡¡A©Î³\¸û¯à¼á²M
S>if (dynamic_cast<Derived4*>(clone_pBase4))
S>¡@cout << '¦w¥þÂ૬' << endl;
S>else
S>¡@cout << '¤£¦w¥þÂ૬' << endl;
S>
S>ª`·N: '(¤£)¦w¥þ' ¤£¬O '(¤£)§¹¥þ'
S>©Ò¿×'¤£¦w¥þ'¥u¬O¨S¿ìªk«OÃÒ¦w¥þ¡A¨Ã¤£¬O»¡Â૬¤@©w¬O¿ùªº¡C
S>¦pªGµ{¦¡­û½T©wÂ૬¬O¹ïªº¡A¥i¥H¥Îstatic_cast¨Ó±j¨îÂ૬¡C
ÁÙ¬O¬Ý¤£¥X§Ú¦³»¡"dynamic_cast¤£¦w¥þ"¡C
¥æ³q³¡(dynamic_cast)»¡°¨¸ô¦pªê¤f (¤£¦w¥þÂ૬¡A¦]¬°¤£½T©w¥i¥HÂà)¡C¨Ã¤£¬O»¡¦æ¤H¤£¯à¤W°¨¸ô(¤£¬O¤£¯àÂà)¡C¦æ¤H¤W°¨¸ô´N¬O¦Û¨­¦w¥þ¦Û¤vÅU(­nÂà´N¦Û­t¦w¥þ)¡C
²×¨s§A­n§â '¤£¦w¥þÂ૬'µ¥¦P©ó"¿ùªº" ±À¦V¤@©w¤£¯àÂ૬¡Aµø¬°©w«ß¡A¨º§Ú¨S¿ìªk¡A¦ý¤£­n¤@ª½§á¦±§O¤Hªº·N«ä¡C
¤£­n¦A¬n¨ìµL¿×ªº¤å·N¤§ª§§a¡C
­«ÂI¦A¶K¤@¦¸:
­nÄ~Äò°Q½×¡A½Ð»{¯u¦^2017/12/12 ¤U¤È 05:23:19 ©M 2017/12/11 ¤U¤È 03:34:51
¤×¨ä¬O2017/12/11 ¤U¤È 03:34:51¦³¤@¬q³q°Tªº¨Ò¤l¡A¤£¯à¥Îdynamuc_cast(¥Î¤F¤]¤£·|¹L)¡A¨º­n¦p¦ó¼¶¼g³oºØ»Ý¨Dªºµ{¦¡?

§@ªÌ : cxxlman(CxxlMan) C++Àu¨q¦n¤â¶K¤å¶W¹L1000«h
[ ¶K¤å 1036 | ¤H®ð 3227 | µû»ù 1260 | µû»ù/¶K¤å 1.22 | °e¥Xµû»ù 27 ¦¸ ] 
[ µ¹­ÓÆg ]  [ µ¹­ÓÆg ]  [ ¦^À³¥»¤å ]  [ µoªí·s¤å ]  [ ¦^¤W­¶ ] [ ¦^°Q½×°Ï¦Cªí ] [ ¦^ª¾ÃѤJ¤f ]
2017/12/13 ¤U¤È 03:59:31

>S>¤°»ò®É­ÔÅܦ¨§Ú»¡dynamic_cast¤£¦w¥þ?
>C>§Aµ´¹ï¦³»¡¡A¤Þµ¹§A¬Ý
>
>>2017/11/27 ¤U¤È 10:27:01
>S>¦n§a¡A§Ú§ï¼g¤@¤Uµ{¦¡¡A©Î³\¸û¯à¼á²M
>S>if (dynamic_cast<Derived4*>(clone_pBase4))
>S>¡@cout << '¦w¥þÂ૬' << endl;
>S>else
>S>¡@cout << '¤£¦w¥þÂ૬' << endl;
>S>
>S>ª`·N: '(¤£)¦w¥þ' ¤£¬O '(¤£)§¹¥þ'
>S>©Ò¿×'¤£¦w¥þ'¥u¬O¨S¿ìªk«OÃÒ¦w¥þ¡A¨Ã¤£¬O»¡Â૬¤@©w¬O¿ùªº¡C
>S>¦pªGµ{¦¡­û½T©wÂ૬¬O¹ïªº¡A¥i¥H¥Îstatic_cast¨Ó±j¨îÂ૬¡C
>ÁÙ¬O¬Ý¤£¥X§Ú¦³»¡'dynamic_cast¤£¦w¥þ'¡C
>¥æ³q³¡(dynamic_cast)»¡°¨¸ô¦pªê¤f (¤£¦w¥þÂ૬¡A¦]¬°¤£½T©w¥i¥HÂà)¡C¨Ã¤£¬O»¡¦æ¤H¤£¯à¤W°¨¸ô(¤£¬O¤£¯àÂà)¡C¦æ¤H¤W°¨¸ô´N¬O¦Û¨­¦w¥þ¦Û¤vÅU(­nÂà´N¦Û­t¦w¥þ)¡C
>²×¨s§A­n§â '¤£¦w¥þÂ૬'µ¥¦P©ó'¿ùªº' ±À¦V¤@©w¤£¯àÂ૬¡Aµø¬°©w«ß¡A¨º§Ú¨S¿ìªk¡A¦ý¤£­n¤@ª½§á¦±§O¤Hªº·N«ä¡C
>¤£­n¦A¬n¨ìµL¿×ªº¤å·N¤§ª§§a¡C
>­«ÂI¦A¶K¤@¦¸:
>­nÄ~Äò°Q½×¡A½Ð»{¯u¦^2017/12/12 ¤U¤È 05:23:19 ©M 2017/12/11 ¤U¤È 03:34:51
>¤×¨ä¬O2017/12/11 ¤U¤È 03:34:51¦³¤@¬q³q°Tªº¨Ò¤l¡A¤£¯à¥Îdynamuc_cast(¥Î¤F¤]¤£·|¹L)¡A¨º­n¦p¦ó¼¶¼g³oºØ»Ý¨Dªºµ{¦¡?

dynamic_cast ¤£¯à³q¹L¬O dynamic_cast ªº¨Æ¡A static_cast ¥i¥H³q¹L¬O static_cast ªº¨Æ¡A¤£¯à¦] static_cast ¥i¥H³q¹L´N»¡ dynamic_cast ¤£¯à³q¹L¬O"¤£¦w¥þ" ¡Adynamic_cast ¤£¯à³q¹L´N¬O¤£¯à³q¹L¡A¨S¦³¥i½èºÃªº
§@ªÌ : sunyear(coco) VC++¨ô¶V±M®aC++³»¦y°ª¤â¶K¤å¶W¹L2000«h
[ ¶K¤å 2421 | ¤H®ð 1485 | µû»ù 6060 | µû»ù/¶K¤å 2.5 | °e¥Xµû»ù 5 ¦¸ ] 
[ µ¹­ÓÆg ]  [ µ¹­ÓÆg ]  [ ¦^À³¥»¤å ]  [ µoªí·s¤å ]  [ ¦^¤W­¶ ] [ ¦^°Q½×°Ï¦Cªí ] [ ¦^ª¾ÃѤJ¤f ]
2017/12/13 ¤U¤È 05:38:51
>dynamic_cast ¤£¯à³q¹L¬O dynamic_cast ªº¨Æ¡A static_cast ¥i¥H³q¹L¬O static_cast ªº¨Æ¡A
¥¿½T¡I¤£¬O¤@ª½¸ò§A»¡dynamic_cast ¤£³q¹L¬O¥¦ªº¨Æ¡A¤£¯à¦]¬°dynamic_cast ¤£³q¹L´N»¡static_cast ¤]¤£¯à¥Î¶Ü?

>¤£¯à¦] static_cast ¥i¥H³q¹L´N»¡ dynamic_cast ¤£¯à³q¹L¬O"¤£¦w¥þ" ¡A
±q¨Ó¨S¦³³oºØ»¡ªk¡I¦pªG¤£¯à¥¿½T¸ÑŪ§O¤Hªº·N«ä¡A´Nª½±µ¤Þ¤å´N¦n¡A¤£­n¶Ã¸àÄÀ¡C
©Ò¿×"¤£¦w¥þ"¬O´Ndynamic_castªºÀˬd±ø¥ó¡A»{¬°¤£¦w¥þ(¥¼¥²¬O¤£¯àÂà)¡A³o¤zstatic_cast ¦ó¨Æ?
¦P¼Ëªº¡Aµ{¦¡­û»{¬°¥i¥H¦Û­tµ{¦¡¹ï¿ù¡A¨Ï¥Îstatic_cast¤S¤zdynamic_cast¦ó¨Æ?

­nÄ~Äò°Q½×¡A½Ð»{¯u¦^2017/12/12 ¤U¤È 05:23:19 ©M 2017/12/11 ¤U¤È 03:34:51
¤×¨ä¬O2017/12/11 ¤U¤È 03:34:51¦³¤@¬q³q°Tªº¨Ò¤l¡A¤£¯à¥Îdynamuc_cast(¥Î¤F¤]¤£·|¹L)¡A¨º­n¦p¦ó¼¶¼g³oºØ»Ý¨Dªºµ{¦¡?

¨º¨â½g¶K¤å§Úªá¤F¨Ç®É¶¡¼gªº¡A¥Øªº¬O­n°Q½×°ÝÃD¥»½è¡A¤£¬O­n§A¤@ª½¦±¸Ñ¤å¦r¡AµM«á§Ú©é©R¦b¼á²M¡C©Ò¥H
­nÄ~Äò°Q½×¡A½Ð»{¯u¦^2017/12/12 ¤U¤È 05:23:19 ©M 2017/12/11 ¤U¤È 03:34:51
¤×¨ä¬O2017/12/11 ¤U¤È 03:34:51¦³¤@¬q³q°Tªº¨Ò¤l¡A¤£¯à¥Îdynamuc_cast(¥Î¤F¤]¤£·|¹L)¡A¨º­n¦p¦ó¼¶¼g³oºØ»Ý¨Dªºµ{¦¡?
§@ªÌ : cxxlman(CxxlMan) C++Àu¨q¦n¤â¶K¤å¶W¹L1000«h
[ ¶K¤å 1036 | ¤H®ð 3227 | µû»ù 1260 | µû»ù/¶K¤å 1.22 | °e¥Xµû»ù 27 ¦¸ ] 
[ µ¹­ÓÆg ]  [ µ¹­ÓÆg ]  [ ¦^À³¥»¤å ]  [ µoªí·s¤å ]  [ ¦^¤W­¶ ] [ ¦^°Q½×°Ï¦Cªí ] [ ¦^ª¾ÃѤJ¤f ]
2017/12/13 ¤U¤È 06:27:34

>>¤£¯à¦] static_cast ¥i¥H³q¹L´N»¡ dynamic_cast ¤£¯à³q¹L¬O'¤£¦w¥þ' ¡A
>±q¨Ó¨S¦³³oºØ»¡ªk¡I¦pªG¤£¯à¥¿½T¸ÑŪ§O¤Hªº·N«ä¡A´Nª½±µ¤Þ¤å´N¦n¡A¤£­n¶Ã¸àÄÀ¡C
>©Ò¿×'¤£¦w¥þ'¬O´Ndynamic_castªºÀˬd±ø¥ó¡A»{¬°¤£¦w¥þ(¥¼¥²¬O¤£¯àÂà)¡A³o¤zstatic_cast ¦ó¨Æ?
>¦P¼Ëªº¡Aµ{¦¡­û»{¬°¥i¥H¦Û­tµ{¦¡¹ï¿ù¡A¨Ï¥Îstatic_cast¤S¤zdynamic_cast¦ó¨Æ?

§A¬O»¡ clone() ±o¨ìªº¤À¨­¡Adynamic_cast Àˬd¤£¦X®æ¡A¥u­n¤º®e¤£ÅÜ´N¥i¥H¥Î static_cast ±j»sÂ૬???
§Ú¥uÅ¥»¡ typeid Àˬd³q¹L¡A¤~¯à¥Î static_cast Â૬

¤º®e¤@¼Ë¥i¥H¥Î static_cast ¬O C ªº·§©À¡A¤£¯à¥Î¦b C++



§@ªÌ : sunyear(coco) VC++¨ô¶V±M®aC++³»¦y°ª¤â¶K¤å¶W¹L2000«h
[ ¶K¤å 2421 | ¤H®ð 1485 | µû»ù 6060 | µû»ù/¶K¤å 2.5 | °e¥Xµû»ù 5 ¦¸ ] 
[ µ¹­ÓÆg ]  [ µ¹­ÓÆg ]  [ ¦^À³¥»¤å ]  [ µoªí·s¤å ]  [ ¦^¤W­¶ ] [ ¦^°Q½×°Ï¦Cªí ] [ ¦^ª¾ÃѤJ¤f ]
2017/12/13 ¤U¤È 07:08:18
>§Ú¥uÅ¥»¡ typeid Àˬd³q¹L¡A¤~¯à¥Î static_cast Â૬
¨º¸ÌÅ¥»¡ªº?
¯à¤£¯àÂ૬¡Aµ{¦¡­û¤~¦³¥D±±Åv¡C«ç»òÂà¡AC++´£¨Ñ¤Ó¦hºÞ¹D©M¤è¦¡(©Î»yªk)¡C
¦Ü©óÂà¤F¡Aµo¥Í¤°»ò¨Æ¡A¨º¬Oµ{¦¡­ûªº³d¥ô¡C

>¤º®e¤@¼Ë¥i¥H¥Î static_cast ¬O C ªº·§©À¡A¤£¯à¥Î¦b C++
static_cast¬OC++¤~¦³ªº¡A¥Øªº¤]¤£¬O¬°¤F©MC¬Û®e(C++«O¯dC ­ì¥»ªºcasting operator¤~¬O¬°¤F¬Û®e)
static_cast¬O¦³Ãþ§OÄ~©Ó(¦å½tÃö«Y)Àˬdªº¡A³o¤]¬OC¨S¦³ªº¡C
¤@¼Ëªºª«¥ó¥i¥H¦b¤£¦Pªº¾Þ§@Ãþ§OÂà´«¡A¬Oµ{¦¡­û»{¬°¨S°ÝÃD«á¥hÂà´«ªº(¦Û­t³d¥ô)¡C¤£¬O¤å¥ó³o»ò»¡¡C
¦Ü©ó«ç»òÂà(¥ÎC++´£¨Ñªº¨º¤@ºØÂà´«¤è¦¡)¡A¨º¤]¬Oµ{¦¡­ûªº¿ï¾Ü¡C
¤°»ò«¬ºAªºª«¥ó¥i¥HÂर»ò«¬ºA¡A¥u¦³µ{¦¡­û¥i¥H´x´¤¡CC++¥u¯à´£¨Ñ¦³­­ªº¦w¥þÀˬd¡A¤£¯à§i¶D§A"¤@©w¤£¯àÂà"
static_castªº¾A¥Î®É¾÷¡A¤@¯ëªº»¡ªk´N¬O:°òÃþ§Oª«¥óÂà´«¦Ü­l¥ÍÃþ§Oª«¥ó¡C(³o¦X©óstatic_castªºÀˬd±ø¥ó)
C++¥»¨Ó´N¤£¬O¦w¥þ¾É¦Vªº»y¨¥¡A¤@­Ó¥i¥Hª½±µ杂¨ú°O¾ÐÅ骺»y¨¥¡A¦p¦ó¦w¥þªk?
C++¥¦¬O´£¨Ñ¼u©Ê¾É¦V(­­¨î³Ì¤Ö)ªº»y¨¥¡C³o¬O¥¦ªºÀuÂI¤]¬O¥¦ªº¯ÊÂI¡C

½Ð»{¯u¦^2017/12/12 ¤U¤È 05:23:19 ©M 2017/12/11 ¤U¤È 03:34:51
¤×¨ä¬O2017/12/11 ¤U¤È 03:34:51¦³¤@¬q³q°Tªº¨Ò¤l¡A¤£¯à¥Îdynamuc_cast(¥Î¤F¤]¤£·|¹L)¡A¨º­n¦p¦ó¼¶¼g³oºØ»Ý¨Dªºµ{¦¡?
§@ªÌ : cxxlman(CxxlMan) C++Àu¨q¦n¤â¶K¤å¶W¹L1000«h
[ ¶K¤å 1036 | ¤H®ð 3227 | µû»ù 1260 | µû»ù/¶K¤å 1.22 | °e¥Xµû»ù 27 ¦¸ ] 
[ µ¹­ÓÆg ]  [ µ¹­ÓÆg ]  [ ¦^À³¥»¤å ]  [ µoªí·s¤å ]  [ ¦^¤W­¶ ] [ ¦^°Q½×°Ï¦Cªí ] [ ¦^ª¾ÃѤJ¤f ]
2017/12/13 ¤U¤È 07:49:31

>>§Ú¥uÅ¥»¡ typeid Àˬd³q¹L¡A¤~¯à¥Î static_cast Â૬
>¨º¸ÌÅ¥»¡ªº?
>¯à¤£¯àÂ૬¡Aµ{¦¡­û¤~¦³¥D±±Åv¡C«ç»òÂà¡AC++´£¨Ñ¤Ó¦hºÞ¹D©M¤è¦¡(©Î»yªk)¡C
>¦Ü©óÂà¤F¡Aµo¥Í¤°»ò¨Æ¡A¨º¬Oµ{¦¡­ûªº³d¥ô¡C

¦]¬°¥u¦³ Base¡A¥¦¥i¥H¬O¥ô¦ó Derived ªº Base¡Aµ{¦¡­û­n«ç»ò­t³d¥ô¡A­Y¤£¥Î dynamic_cast Âà¡A
´N¥u¥i¦b Base ³o­Ó¼h­±°µ¥æ¬y

>>¤º®e¤@¼Ë¥i¥H¥Î static_cast ¬O C ªº·§©À¡A¤£¯à¥Î¦b C++
>static_cast¬OC++¤~¦³ªº¡A¥Øªº¤]¤£¬O¬°¤F©MC¬Û®e(C++«O¯dC ­ì¥»ªºcasting operator¤~¬O¬°¤F¬Û®e)

§Ú¬O»¡¤º®e¤@¼Ë¥Î¤£¦Pªº¼Ë»ª¥h¨Ï¥Î³o­Ó·§©À

>static_cast¬O¦³Ãþ§OÄ~©Ó(¦å½tÃö«Y)Àˬdªº¡A³o¤]¬OC¨S¦³ªº¡C
>¤@¼Ëªºª«¥ó¥i¥H¦b¤£¦Pªº¾Þ§@Ãþ§OÂà´«¡A¬Oµ{¦¡­û»{¬°¨S°ÝÃD«á¥hÂà´«ªº(¦Û­t³d¥ô)¡C¤£¬O¤å¥ó³o»ò»¡¡C

¦pªG¤£°µ classid Àˬd°µ¥¿½Tªº downcast Â૬¡A´N¥u¯à°µ°²Â૬¡A¦]¤£ª¾ Derived ¬O½Ö¡A¦Ó³o
­Ó°²Â૬´N¥u¯à¾Þ§@¨ì Base ³o­Ó¼h¯Åªº¸ê®Æ¡A¨º´N¥Î Base ´N¦n¤F¡A¤£µM°ß¤@ªº²z¥Ñ´N¬O¬° Base ¼W¥[¾Þ§@¥\¯à¨ç¼Æ

>¦Ü©ó«ç»òÂà(¥ÎC++´£¨Ñªº¨º¤@ºØÂà´«¤è¦¡)¡A¨º¤]¬Oµ{¦¡­ûªº¿ï¾Ü¡C
>¤°»ò«¬ºAªºª«¥ó¥i¥HÂर»ò«¬ºA¡A¥u¦³µ{¦¡­û¥i¥H´x´¤¡CC++¥u¯à´£¨Ñ¦³­­ªº¦w¥þÀˬd¡A¤£¯à§i¶D§A'¤@©w¤£¯àÂà'


>static_castªº¾A¥Î®É¾÷¡A¤@¯ëªº»¡ªk´N¬O:°òÃþ§Oª«¥óÂà´«¦Ü­l¥ÍÃþ§Oª«¥ó¡C(³o¦X©óstatic_castªºÀˬd±ø¥ó)
>C++¥»¨Ó´N¤£¬O¦w¥þ¾É¦Vªº»y¨¥¡A¤@­Ó¥i¥Hª½±µ杂¨ú°O¾ÐÅ骺»y¨¥¡A¦p¦ó¦w¥þªk?
>C++¥¦¬O´£¨Ñ¼u©Ê¾É¦V(­­¨î³Ì¤Ö)ªº»y¨¥¡C³o¬O¥¦ªºÀuÂI¤]¬O¥¦ªº¯ÊÂI¡C
>
>½Ð»{¯u¦^2017/12/12 ¤U¤È 05:23:19 ©M 2017/12/11 ¤U¤È 03:34:51
>¤×¨ä¬O2017/12/11 ¤U¤È 03:34:51¦³¤@¬q³q°Tªº¨Ò¤l¡A¤£¯à¥Îdynamuc_cast(¥Î¤F¤]¤£·|¹L)¡A¨º­n¦p¦ó¼¶¼g³oºØ»Ý¨Dªºµ{¦¡?

dynamuc_cast ¥u°µ¤@­Óª«¥ó§t¦³ªº class ªºÂ૬¡A¤£­t³d»Ý¨D³]­p¡AÃö dynamuc_cast §¾¨Æ

¦Ó¥B§Ú¬O¥Î dynamuc_cast ¨ÓÀˬd clone() ªº¤À¨­¡A¬O§_§t¦³©M¥»´Lªº¤@¼Ëªº¦¨¥÷¡A¥H§PÂ_ clone() ªº³]­p¬O§_¦³°ÝÃD¡A
¸ò§Ú§è¤°»ò¦w¥þ¤£¦w¥þ
§@ªÌ : sunyear(coco) VC++¨ô¶V±M®aC++³»¦y°ª¤â¶K¤å¶W¹L2000«h
[ ¶K¤å 2421 | ¤H®ð 1485 | µû»ù 6060 | µû»ù/¶K¤å 2.5 | °e¥Xµû»ù 5 ¦¸ ] 
[ µ¹­ÓÆg ]  [ µ¹­ÓÆg ]  [ ¦^À³¥»¤å ]  [ µoªí·s¤å ]  [ ¦^¤W­¶ ] [ ¦^°Q½×°Ï¦Cªí ] [ ¦^ª¾ÃѤJ¤f ]
2017/12/13 ¤U¤È 10:48:43
>¦]¬°¥u¦³ Base¡A¥¦¥i¥H¬O¥ô¦ó Derived ªº Base¡Aµ{¦¡­û­n«ç»ò­t³d¥ô¡A
>­Y¤£¥Î dynamic_cast Âà¡A´N¥u¥i¦b Base ³o­Ó¼h­±°µ¥æ¬y
C++¦³¨º»ò¦hªºconversion¤è¦¡¡A«ç»ò·|¥u¯à¦b Base ³o­Ó¼h­±¨Ï¥Î?
µ{¦¡¹ï¿ù¡A¥»¨Ó´N¬Oµ{¦¡­û­n­t³d¡A¤£µM­n¥s½Ö­t³d?

>§Ú¬O»¡¤º®e¤@¼Ë¥Î¤£¦Pªº¼Ë»ª¥h¨Ï¥Î³o­Ó·§©À
§A¦³¬Ý¤F2017/12/12 ¤U¤È 05:23:19ªº¶K¤å¤F¶Ü?
¤£¦P¤j¤p¡A¨S¦å½t«¬ºAªºª«¥ó³£¥i¥HÂà¤F¡A¬Û¦PªºÃþ§Oª«¥ó´«¤£¦Pªº¾Þ§@¬°¤°»ò¤£¯àÂà?
¦Ñ¤ý¶}¤F¤@®a¤p¤½¥q¡A¶R¤F¤@½øAltis·í·~°Èªº¥æ³q¨®(¥æ³q¨®Ä~©ÓAltis)¡F
«á¨Ó¦Ñ¤ý¦Ñ±C»¡¡A·Q¶R½øAltis·í®a¥Î¨®(®a¥Î¨®Ä~©ÓAltis)¥X¹C¨Ï¥Î¡C
¦Ñ¤ý·Q»¡¡A¥æ³q¨®¤Ö¥Î¡A¦Ó¥B®a¥Îªº®É¶¡´X¥G³£¦b«D¤W¯Z®É¶¡¡C
´N¸ò¦Ñ±C»¡¡A´N§â¤½¥q°µ¥æ³q¨®ªº¨º½øAltis¡A¦b¤U¯Z«á·í®a¥Î¨®¥i¥H¤@Á|¨â±o¡A¤S¬Ù¿ú¡C
¦Ñ±C°í«ù¤£¥«¡A»¡§Ú­n¬O®a¥Î¨®¡A¤½¥q¨º½ø¥s¥æ³q¨®¡A«ç»ò¥i¥H¡C¸£µ¬¤@©w­n³o»ò¦º¶Ü?

>¦pªG¤£°µ classid Àˬd°µ¥¿½Tªº downcast Â૬¡A´N¥u¯à°µ°²Â૬¡A¦]¤£ª¾ Derived ¬O½Ö¡A
¤°»ò¥s°²Â૬?
¦³¬Ý¹L«e­±ªº¨Ò¤l¶Ü?
CString Ãþ§Oª«¥ó³£¥i¥HÂ૬¦¨char *¡A¥¦­Ì¤§¶¡¦³Ä~©ÓÃö«Y¶Ü?
int ³£¥i¥HÂ૬¦¨float¡A¥L­Ì«¬§O¤£¦P¡A¤]¨S¦å½tÃö«Y¡A¬°¤°»ò¥i¥HÂà?
§AÁ¿ªº¨ººØDowncast¬O¶°¦XÆ[¤§¤U¡A½s;¹¥i¥H§PÂ_Â૬¨S°ÝÃD¡C
¨ä¥¦½s;¹µLªk§PÂ_¡A­nÂà´N¬Oµ{¦¡­û­nª¾¹D¦Û¤v¦b°µ¤°»ò¡C¤£ª¾¹D¶ÃÂà´N¬O«áªG¦Û­t¡C
¹³int©Mfloat¦]¬O¤º«Ø«¬§O¡A©Ò¥H½s;¹ª¾¹D¥¦­Ì¬O¤°»òªF¦è¡A­n¤¬Âà­n¨Ì¤°»ò³W«h¥hÂà¡C
¦pªG§ï¦¨¦Û­qÃþ§Oªºint©Mfloat¡A½s;¹´N¤£ª¾¥¦­Ì¬O¤°»òªFªFªF¤F¡Cdynamic_cast Àˬd¤]¤@©w¤£·|¹L¡C
¦ý¯uªº¤£¯àÂà¶Ü?­nÂà´N¥u¦³µ{¦¡­ûª¾¹D«ç»òÂà¡Aµ²ªG¦Û­t¡C
©³¤U¼g¤@­Ó¼ÒÀÀint©Mfloat¤¬Â઺¨Ò¤l¡ACIntª«¥óÂনCFloat¡A¨S¦å½t(Ä~©Ó)Ãö«Y¡AÂà´«ºtºâ©M¤º«Ø«¬§OintÂàfloat¤@¼Ë¡A¦³¤°»ò¤£¥i¥H¶Ü?
struct CFloat;
struct CInt
{
int m_iInt;
CInt(int i):m_iInt(i){}
operator float() {return (float)m_iInt;}
const CInt& operator =(int i) {
m_iint = i;
return *this;
}
virtual ~CInt() {}
};

struct CFloat
{
float m_fFloat;
CFloat(float f) :m_fFloat(f){}
operator int() {return (int)m_fFloat;}
const CFloat& operator =(float f) {
m_ffloat = f;
return *this;
}
virtual ~CFloat() {}
};


int main()
{
Cint iObj(5);
Cfloat fObj((float)1.23);

Cint *piObj= dynamic_cast<Cint *>(&fObj);//dynamic_cast±onull, ¥¢±Ñ!
fObj = (float)iObj;//Â૬OK

Cfloat *pfObj = dynamic_cast<Cfloat *>(&iObj);//dynamic_cast±onull, ¥¢±Ñ!
iObj = (int)fObj;//Â૬OK
return 0;
}


>¦Ó¥B§Ú¬O¥Î dynamuc_cast ¨ÓÀˬd clone() ªº¤À¨­¡A¬O§_§t¦³©M¥»´Lªº¤@¼Ëªº¦¨¥÷¡A
>¥H§PÂ_ clone() ªº³]­p¬O§_¦³°ÝÃD¡A¸ò§Ú§è¤°»ò¦w¥þ¤£¦w¥þ
¨S¤°»ò°ÝÃD¡A´N¬O¥Î¦b§Ú§ïªºµ{¦¡¤£¶]¦Ó¤v¡Cµ{¦¡­û¸Óµw°_¨Ó¦Û¤vºÞÂ૬®É¡Aµw¤£¤g¨Ó¦Ó¤v¡C
§@ªÌ : sunyear(coco) VC++¨ô¶V±M®aC++³»¦y°ª¤â¶K¤å¶W¹L2000«h
[ ¶K¤å 2421 | ¤H®ð 1485 | µû»ù 6060 | µû»ù/¶K¤å 2.5 | °e¥Xµû»ù 5 ¦¸ ] 
[ µ¹­ÓÆg ]  [ µ¹­ÓÆg ]  [ ¦^À³¥»¤å ]  [ µoªí·s¤å ]  [ ¦^¤W­¶ ] [ ¦^°Q½×°Ï¦Cªí ] [ ¦^ª¾ÃѤJ¤f ]
2017/12/13 ¤U¤È 10:59:56
CInt©MCFloat¥[¤W¤U­±³o¨â­Óoperator´N¥i¥Hª½±µ¤¬Âà:
struct CInt{
operator CFloat() {}
};

struct CFloat{
operator CInt() {}
};

>¦Ó¥B§Ú¬O¥Î dynamuc_cast ¨ÓÀˬd clone() ªº¤À¨­¡A¬O§_§t¦³©M¥»´Lªº¤@¼Ëªº¦¨¥÷¡A
>¥H§PÂ_ clone() ªº³]­p¬O§_¦³°ÝÃD¡A¸ò§Ú§è¤°»ò¦w¥þ¤£¦w¥þ
¤£¬O¥»´L¤£¤@©w´N¤£¯àÂà¡Aµ{¦¡­ûª¾¹D«ç»òÂà´N¦n¡C
¦w¤£¦w¥þ¦^À³§A»{¬°dynamic_castªð¦^null´N¬O½Æ»s¤£§¹¥þ¡C
dynamic_castªð¦^null¬Oªí¥Ü¤£¦w¥þ(¤£¥Nªí¤£¯àÂà)¡C¤£¬O½Æ»s¤£§¹¥þ¡C
§@ªÌ : cxxlman(CxxlMan) C++Àu¨q¦n¤â¶K¤å¶W¹L1000«h
[ ¶K¤å 1036 | ¤H®ð 3227 | µû»ù 1260 | µû»ù/¶K¤å 1.22 | °e¥Xµû»ù 27 ¦¸ ] 
[ µ¹­ÓÆg ]  [ µ¹­ÓÆg ]  [ ¦^À³¥»¤å ]  [ µoªí·s¤å ]  [ ¦^¤W­¶ ] [ ¦^°Q½×°Ï¦Cªí ] [ ¦^ª¾ÃѤJ¤f ]
2017/12/14 ¤W¤È 11:25:10

>>¦Ó¥B§Ú¬O¥Î dynamuc_cast ¨ÓÀˬd clone() ªº¤À¨­¡A¬O§_§t¦³©M¥»´Lªº¤@¼Ëªº¦¨¥÷¡A
>>¥H§PÂ_ clone() ªº³]­p¬O§_¦³°ÝÃD¡A¸ò§Ú§è¤°»ò¦w¥þ¤£¦w¥þ
>¤£¬O¥»´L¤£¤@©w´N¤£¯àÂà¡Aµ{¦¡­ûª¾¹D«ç»òÂà´N¦n¡C
>¦w¤£¦w¥þ¦^À³§A»{¬°dynamic_castªð¦^null´N¬O½Æ»s¤£§¹¥þ¡C
>dynamic_castªð¦^null¬Oªí¥Ü¤£¦w¥þ(¤£¥Nªí¤£¯àÂà)¡C¤£¬O½Æ»s¤£§¹¥þ¡C

§Ú¬O¥Î dynamic_cast ¨ÓÀËÅç clone() ²£¥Íªº¤À¨­©M¥»´L¬O§_¤@­P¡A¥H§PÂ_ clone() ¬O¤£¬O³]­p¥¿½T¡A
§A¸ò§Ú§è¤F¦Ñ¥b¤Ñ¤]·d¤£²M·¡§A¹ï³o¼ËªºÀËÅç¤è¦¡¬O«ù¤°»òºA«×¡A©Ò¥H§Ú²{¦b©ú½T°Ý§A¡A§A¥u­n¦^µª¥H
¤U­«¶KªºÀËÅç¤è¦¡¦³¨S¦³®Ä¡A¬O§_¨¬¥i§PÂ_ clone() ªº¥¿½T©Ê¡A³o¼Ë´N¦n

#include <iostream>
#include <string>

using namespace std;

class Base
{
public:
¡@virtual Base *Clone()
¡@{
¡@¡@return new Base(*this);
¡@}
};

class Derived3 :public Base
{
public:
¡@virtual Base *Clone() override¡@
¡@{
¡@¡@return new Derived3(*this);
¡@}
};

class Derived4 :public Base
{
public:
};

int main()
{
¡@Base *pBase3 = new Derived3; // ¥»´L
¡@Base *clone_pBase3 = pBase3->Clone(); // ¤À¨­

¡@cout << "Derived3 ¥»´L¡G";
¡@if (dynamic_cast<Derived3*>(pBase3))
¡@¡@cout << "§¹¥þ" << endl;
¡@else
¡@¡@cout << "¤£§¹¥þ" << endl;

¡@cout << "Derived3 ¤À¨­¡G";
¡@if (dynamic_cast<Derived3*>(clone_pBase3))
¡@¡@cout << "§¹¥þ" << endl;
¡@else
¡@¡@cout << "¤£§¹¥þ" << endl;

¡@cout << endl;

¡@Base *pBase4 = new Derived4; // ¥»´L
¡@Base *clone_pBase4 = pBase4->Clone(); // ¤À¨­

¡@cout << "Derived4 ¥»´L¡G";
¡@if (dynamic_cast<Derived4*>(pBase4))
¡@¡@cout << "§¹¥þ" << endl;
¡@else
¡@¡@cout << "¤£§¹¥þ" << endl;

¡@cout << "Derived4 ¤À¨­¡G";
¡@if (dynamic_cast<Derived4*>(clone_pBase4))
¡@¡@cout << "§¹¥þ" << endl;
¡@else
¡@¡@cout << "¤£§¹¥þ" << endl;

¡@return 0;
}

°õ¦æµ²ªG¡G
Derived3 ¥»´L¡G§¹¥þ
Derived3 ¤À¨­¡G§¹¥þ

Derived4 ¥»´L¡G§¹¥þ
Derived4 ¤À¨­¡G¤£§¹¥þ
½Ð«ö¥ô·NÁäÄ~Äò . . .



§@ªÌ : sunyear(coco) VC++¨ô¶V±M®aC++³»¦y°ª¤â¶K¤å¶W¹L2000«h
[ ¶K¤å 2421 | ¤H®ð 1485 | µû»ù 6060 | µû»ù/¶K¤å 2.5 | °e¥Xµû»ù 5 ¦¸ ] 
[ µ¹­ÓÆg ]  [ µ¹­ÓÆg ]  [ ¦^À³¥»¤å ]  [ µoªí·s¤å ]  [ ¦^¤W­¶ ] [ ¦^°Q½×°Ï¦Cªí ] [ ¦^ª¾ÃѤJ¤f ]
2017/12/14 ¤U¤È 02:19:44
>§Ú¬O¥Î dynamic_cast ¨ÓÀËÅç clone() ²£¥Íªº¤À¨­©M¥»´L¬O§_¤@­P¡A¥H§PÂ_ clone() ¬O¤£¬O³]­p¥¿½T¡A
>§A¸ò§Ú§è¤F¦Ñ¥b¤Ñ¤]·d¤£²M·¡§A¹ï³o¼ËªºÀËÅç¤è¦¡¬O«ù¤°»òºA«×¡A©Ò¥H§Ú²{¦b©ú½T°Ý§A¡A§A¥u­n¦^µª¥H
>¤U­«¶KªºÀËÅç¤è¦¡¦³¨S¦³®Ä¡A¬O§_¨¬¥i§PÂ_ clone() ªº¥¿½T©Ê¡A³o¼Ë´N¦n
¦P¼Ëªº°ÝÃD³£¤£ª¾¦^¦h¤Ö¦¸¤F¡A¦A¦^¦³¤°»ò·N¸q¶Ü?
dynamic_cast¥u¬OÀËÅçÄ~©ÓÃö«Y¡A©Î»¡Âà´«¥Ø¼Ð©M¨Ó·½ªº­ì¥ÍÃþ§OÃö«Y¡C©M¥»´L©Î½Æ»s¬O§_§¹¥þ®Ú¥»¨SÃö«Y¡C
§A­n¥Îdynamic_cast¨S¤H¸T¤î§A¡A¦ý¥Îdynamic_cast¤£¯à¤u§@¡A§A­n°í«ù¥Î¤£¯àworkªº¤è¦¡¡A¥Ñ§A¡C
¦ý¤H®a§i¶D§A¥i¥Hstatic_cast¸Ñ¨M¡A§A»¡§O¤H¤£¯à¥Îstatic_cast¤~¬O­ìª§Ä³©Ò¦b§a?
ÁÙ¬O­«ÂЪºµ{¦¡¡AÁٻݦ^µª¶Ü?
OOPªºÄ~©Ó¥D­n´N¬O¯à©µ¥Î°òÃþ§O¡A§A¨ºµ{¦¡¥»¨­¦bOOPÆ[ÂI´N¦³«Ü¤jªº°ÝÃD¡A«o­n¤H®a¸Ñ¨Mªº¤èªk­n¦hOOP¡C
§O¤H¸Ñ¨M¤è¦¡¥»¨Ó´N¬OOOP¤¹­pªºÂà´«¡A¦Ñ¥Î¤°»òºë¯«¡A§¹¤£§¹¥þ¡AÅ¥»¡¡A¨Ó·e¶ë¡C

½Ð»{¯u¦^2017/12/12 ¤U¤È 05:23:19 ©M 2017/12/11 ¤U¤È 03:34:51
¤×¨ä¬O2017/12/11 ¤U¤È 03:34:51¦³¤@¬q³q°Tªº¨Ò¤l¡A¤£¯à¥Îdynamuc_cast(¥Î¤F¤]¤£·|¹L)¡A¨º­n¦p¦ó¼¶¼g³oºØ»Ý¨Dªºµ{¦¡?

¤£¯à²z¸Ñ³o¨â­Ó¶K¤å¡A´NµLªk¯}°£§A¨ºdynamic_cast¦Ü¤WÅv«Âªº°g«ä¡C©Ò¥H¥ý»{¯u¦^¡C

§@ªÌ : sunyear(coco) VC++¨ô¶V±M®aC++³»¦y°ª¤â¶K¤å¶W¹L2000«h
[ ¶K¤å 2421 | ¤H®ð 1485 | µû»ù 6060 | µû»ù/¶K¤å 2.5 | °e¥Xµû»ù 5 ¦¸ ] 
[ µ¹­ÓÆg ]  [ µ¹­ÓÆg ]  [ ¦^À³¥»¤å ]  [ µoªí·s¤å ]  [ ¦^¤W­¶ ] [ ¦^°Q½×°Ï¦Cªí ] [ ¦^ª¾ÃѤJ¤f ]
2017/12/14 ¤U¤È 03:10:20
¬Ý³o¬qmsdn¹ïstatic_castªº»¡©ú¡F
https://msdn.microsoft.com/zh-tw/library/c36yw7x9.aspx
static_cast ¥i¥H¶i¦æ¤Ï¦VÁô§tÂà´«¡A¦Ó¨äµ²ªG·|¬O¥¼©w¸q¡C µ{¦¡³]­p¤H­û¥²¶·½T»{ static_cast Âà´«ªºµ²ªG¬O§_¦w¥þ¡C
¦¹¦æ¬°¤]¾A¥Î©óÃþ§OÃþ«¬¥H¥~ªºÃþ«¬¡C ¨Ò¦p¡A±z¥i¥H¨Ï¥Î static_cast ±N int Âà´«¬° char¡C ¤£¹L¡A²£¥Íªº char ªº¦ì¤¸¥i¯à¤£¨¬¥Hªí¥Ü¾ã­Ó int ­È¡C ¦P¼Ë¦a¡Aµ{¦¡³]­p¤H­û¥²¶·½T»{ static_cast Âà´«ªºµ²ªG¬O§_¦w¥þ¡C
static_cast ¹Bºâ¤l¤]¥i¥Î©ó°õ¦æ©Ò¦³Áô§tÂà´«¡A¥]¬A¼Ð·ÇÂà´«©M¨Ï¥ÎªÌ©w¸qªºÂà´«¡C

ª`·N«á¤@¥y:¥]¬A...¨Ï¥ÎªÌ©w¸qªºÂà´«¡C
·Q·Q¤°»ò¬O¨Ï¥ÎªÌ©w¸qªºÂà´«¡A¨ºµ´¹ï¤£¬O§A¨º¥»´LÂà´«ªº½d³ò§a¡I
Á٧ˤ£²Mµ{¦¡­û¦p¦ó­t³d¡A³o¤@¬q¸Ü¤]¬O¤@ª½´£¥Ü¡C
µ²½×´N¬O¡Aª«¥ó«¬§OÂà´«¡A¨S¤°»òµ´¹ï¤£¥i¥H¡A´N¬Oµ{¦¡­û¥D±±¡Aµ{¦¡¦w¥þ¦Û¤v­t³d¡C


½Ð»{¯u¦^2017/12/12 ¤U¤È 05:23:19 ©M 2017/12/11 ¤U¤È 03:34:51
¤×¨ä¬O2017/12/11 ¤U¤È 03:34:51¦³¤@¬q³q°Tªº¨Ò¤l¡A¤£¯à¥Îdynamuc_cast(¥Î¤F¤]¤£·|¹L)¡A¨º­n¦p¦ó¼¶¼g³oºØ»Ý¨Dªºµ{¦¡?
§@ªÌ : cxxlman(CxxlMan) C++Àu¨q¦n¤â¶K¤å¶W¹L1000«h
[ ¶K¤å 1036 | ¤H®ð 3227 | µû»ù 1260 | µû»ù/¶K¤å 1.22 | °e¥Xµû»ù 27 ¦¸ ] 
[ µ¹­ÓÆg ]  [ µ¹­ÓÆg ]  [ ¦^À³¥»¤å ]  [ µoªí·s¤å ]  [ ¦^¤W­¶ ] [ ¦^°Q½×°Ï¦Cªí ] [ ¦^ª¾ÃѤJ¤f ]
2017/12/15 ¤U¤È 12:24:22

>>§Ú¬O¥Î dynamic_cast ¨ÓÀËÅç clone() ²£¥Íªº¤À¨­©M¥»´L¬O§_¤@­P¡A¥H§PÂ_ clone() ¬O¤£¬O³]­p¥¿½T¡A
>>§A¸ò§Ú§è¤F¦Ñ¥b¤Ñ¤]·d¤£²M·¡§A¹ï³o¼ËªºÀËÅç¤è¦¡¬O«ù¤°»òºA«×¡A©Ò¥H§Ú²{¦b©ú½T°Ý§A¡A§A¥u­n¦^µª¥H
>>¤U­«¶KªºÀËÅç¤è¦¡¦³¨S¦³®Ä¡A¬O§_¨¬¥i§PÂ_ clone() ªº¥¿½T©Ê¡A³o¼Ë´N¦n
>¦P¼Ëªº°ÝÃD³£¤£ª¾¦^¦h¤Ö¦¸¤F¡A¦A¦^¦³¤°»ò·N¸q¶Ü?

¨º§A¦A¦^µª§Ú¡A§A»¡ªº¨º¨Ç¬O¥Î¨ÓÃÒ©ú¥Îªº¶Ü¡A­Y¤£¬O¥Î¨ÓÃÒ©ú¡A¨º»ò¦³Ãö«Y¶Ü¡A­Y¤£¬O¥Î¨ÓÃÒ©ú¤S¨SÃö«Y¡A´N¤£¥Î¦b³oªO°Q½×¤F

¥H¤U­Y§A½T©w©M¥»ªOµLÃö¡A«ØÄ³§A¥t¶}¤@­ÓªO°Q½×

#include <iostream>
using namespace std;

class Base
{
public:
¡@double m_doubleValue;
¡@virtual ~Base(){}
};

class Derived1:public Base
{
¡@long m_Value;
public:
};

class Fake1 :public Base
{
public:
¡@void Set(double V)
¡@{
¡@¡@m_doubleValue = V;
¡@}
};

void Set(Base *pBase, double V)
{
¡@pBase->m_doubleValue = V;
}

int main()
{
¡@Base *pBase = new Derived1;

¡@// ³o¼ËÁٺⱡ¦³¥i­ì¡A·í§@¬O¬° Base ¾÷°Êªº¼W¥[¥\¯à¨ç¼Æ
¡@Fake1 *pFake1 = static_cast<Fake1 *>(pBase);
¡@// ³o¨â­Óµ¥»ù
¡@pFake1->Set(12);
¡@Set(pBase, 12);

¡@// ³o¬O pBase ©Ò­nªº¡A¦]¦P¤@­Óª«¥óªº¤¶­±
¡@Derived1 *pDerived1 = dynamic_cast<Derived1*>(pBase);

¡@return 0;
}

·í§Ú®³¨ì pBase ®É¡A§Ú¬O§â¥¦·í§@¬O pDerived1¡A®³¨ì¤@­Ó Base ¥u·í¥¦¬O¤@­Ó Derived¡A¦]¬O¦P¤@­Óª«¥ó

¦Ó¤@­Ó pBase ¥i¥H¦³µL¼Æ­Ó pFake1¡A¦]¤@­Ó Base ¥i¥HÂàÅܦ¨µL¼ÆºØ Fake¡A
¤]¥i¥H¥áµ¹µL¼ÆºØªº¨ç¼Æ¡A¥u­n³o¨Ç¨ç¼Æ±µ¨ü Base¡A
Fake ´N©M¨º¨Ç¨ç¼Æ¤@¼Ë¡A¥u¬O¤@ºØ¥\¯àÀ³¥Î³]­p¡A¤£¬Oª«¥óªº¤@³¡¥÷

§@ªÌ : sunyear(coco) VC++¨ô¶V±M®aC++³»¦y°ª¤â¶K¤å¶W¹L2000«h
[ ¶K¤å 2421 | ¤H®ð 1485 | µû»ù 6060 | µû»ù/¶K¤å 2.5 | °e¥Xµû»ù 5 ¦¸ ] 
[ µ¹­ÓÆg ]  [ µ¹­ÓÆg ]  [ ¦^À³¥»¤å ]  [ µoªí·s¤å ]  [ ¦^¤W­¶ ] [ ¦^°Q½×°Ï¦Cªí ] [ ¦^ª¾ÃѤJ¤f ]
2017/12/15 ¤U¤È 05:52:56
>¨º§A¦A¦^µª§Ú¡A§A»¡ªº¨º¨Ç¬O¥Î¨ÓÃÒ©ú¥Îªº¶Ü¡A­Y¤£¬O¥Î¨ÓÃÒ©ú¡A¨º»ò¦³Ãö«Y¶Ü
§A¤@ª½¦b¼Ò½k­«ÂI¡C
ª§Ä³¬O±q2017/11/7 ¤U¤È 09:49:30¶}©lªº¡A½Ð¦^ÀY¬Ý¬Ýª§Ä³ÂI¬O¤°»ò¡C
§Ú2017/12/12 ¤U¤È 05:23:19 ©M 2017/12/11 ¤U¤È 03:34:51¨â½g¶K¤å¡A´N¬O¦b»¡©ústatic_cast¨Ï¥Îªº®É¾÷©M¦Xªk©Ê¡C

§A¥u­n²z¸Ñ§ÚCoordinate¬O¥i¥H³o¼Ë¼g¡A¨º»ò2017/11/22 ¤W¤È 01:20:31¶K¤å¸ÌªºDerived3¡ADerived4´N¥i¥H¨º¼Ë¼g¡C
Derived3¡ADerived4 OK¨º´N¯}¸Ñ:¤@©w­nÂмgclonªº¥²­n©Ê¡C
©Ò¥H´N´N¦^¨ì­ì°ÝÃD:¦pªG­l¥ÍÃþ§Oı±o¨S¥²­nÂмg¨ç¦¡¡A¬°¦ó¤@©w­n³Q±j­¢Âмg¨ç¦¡¡C(³o¹H¤ÏOOP Ä~©Ó½Æ¥Îªº­ì«h)

­YÁÙ¦³°ÝÃD¡A½Ð¦A¥J²Ó°Ñ¦Ò2017/12/12 ¤U¤È 05:23:19 ©M 2017/12/11 ¤U¤È 03:34:51¨â½g¶K¤å©MMSDN¹ïstatic_castªº»¡©ú¡C
­Y¨S°ÝÃD´N¦^¨ì"¦pªG­l¥ÍÃþ§Oı±o¨S¥²­nÂмg¨ç¦¡¡A¬°¦ó¤@©w­n³Q±j­¢Âмg¨ç¦¡¡C"³o­ÓÄpµ²ÂI¤W¨Ó¡C
¨ä¥¦¤@ª½§á¦±§O¤H·N«ä¡A¦AÅý§O¤@½a©ó¼á²Mªº°Q½×¡A´N¥i§K¤F¡C



§@ªÌ : cxxlman(CxxlMan) C++Àu¨q¦n¤â¶K¤å¶W¹L1000«h
[ ¶K¤å 1036 | ¤H®ð 3227 | µû»ù 1260 | µû»ù/¶K¤å 1.22 | °e¥Xµû»ù 27 ¦¸ ] 
[ µ¹­ÓÆg ]  [ µ¹­ÓÆg ]  [ ¦^À³¥»¤å ]  [ µoªí·s¤å ]  [ ¦^¤W­¶ ] [ ¦^°Q½×°Ï¦Cªí ] [ ¦^ª¾ÃѤJ¤f ]
2017/12/16 ¤W¤È 11:06:02

>>¨º§A¦A¦^µª§Ú¡A§A»¡ªº¨º¨Ç¬O¥Î¨ÓÃÒ©ú¥Îªº¶Ü¡A­Y¤£¬O¥Î¨ÓÃÒ©ú¡A¨º»ò¦³Ãö«Y¶Ü
>§A¤@ª½¦b¼Ò½k­«ÂI¡C
>ª§Ä³¬O±q2017/11/7 ¤U¤È 09:49:30¶}©lªº¡A½Ð¦^ÀY¬Ý¬Ýª§Ä³ÂI¬O¤°»ò¡C
>§Ú2017/12/12 ¤U¤È 05:23:19 ©M 2017/12/11 ¤U¤È 03:34:51¨â½g¶K¤å¡A´N¬O¦b»¡©ústatic_cast¨Ï¥Îªº®É¾÷©M¦Xªk©Ê¡C
>
>§A¥u­n²z¸Ñ§ÚCoordinate¬O¥i¥H³o¼Ë¼g¡A¨º»ò2017/11/22 ¤W¤È 01:20:31¶K¤å¸ÌªºDerived3¡ADerived4´N¥i¥H¨º¼Ë¼g¡C
>Derived3¡ADerived4 OK¨º´N¯}¸Ñ:¤@©w­nÂмgclonªº¥²­n©Ê¡C
>©Ò¥H´N´N¦^¨ì­ì°ÝÃD:¦pªG­l¥ÍÃþ§Oı±o¨S¥²­nÂмg¨ç¦¡¡A¬°¦ó¤@©w­n³Q±j­¢Âмg¨ç¦¡¡C(³o¹H¤ÏOOP Ä~©Ó½Æ¥Îªº­ì«h)
>
>­YÁÙ¦³°ÝÃD¡A½Ð¦A¥J²Ó°Ñ¦Ò2017/12/12 ¤U¤È 05:23:19 ©M 2017/12/11 ¤U¤È 03:34:51¨â½g¶K¤å©MMSDN¹ïstatic_castªº»¡©ú¡C
>­Y¨S°ÝÃD´N¦^¨ì'¦pªG­l¥ÍÃþ§Oı±o¨S¥²­nÂмg¨ç¦¡¡A¬°¦ó¤@©w­n³Q±j­¢Âмg¨ç¦¡¡C'³o­ÓÄpµ²ÂI¤W¨Ó¡C
>¨ä¥¦¤@ª½§á¦±§O¤H·N«ä¡A¦AÅý§O¤@½a©ó¼á²Mªº°Q½×¡A´N¥i§K¤F¡C

­Y¤£¹ê§@ Clone()¡A·í§A®³¨ì Base *pBase¡A³o­Ó pBase ¬OµL¼ÆºØ Derived ªº Base¡A§A«ç»òª¾¹D­n«ç»ò clone



§@ªÌ : sunyear(coco) VC++¨ô¶V±M®aC++³»¦y°ª¤â¶K¤å¶W¹L2000«h
[ ¶K¤å 2421 | ¤H®ð 1485 | µû»ù 6060 | µû»ù/¶K¤å 2.5 | °e¥Xµû»ù 5 ¦¸ ] 
[ µ¹­ÓÆg ]  [ µ¹­ÓÆg ]  [ ¦^À³¥»¤å ]  [ µoªí·s¤å ]  [ ¦^¤W­¶ ] [ ¦^°Q½×°Ï¦Cªí ] [ ¦^ª¾ÃѤJ¤f ]
2017/12/16 ¤U¤È 01:58:08
>­Y¤£¹ê§@ Clone()¡A·í§A®³¨ì Base *pBase¡A³o­Ó pBase ¬OµL¼ÆºØ Derived ªº Base¡A§A«ç»òª¾¹D­n«ç»ò clone
·íDerived3¨M©w§âclone¥æµ¹Base®É¡A´Nªí¥Ü¥þÅv¥æµ¹Base clone(µ{¦¡­ûª¾¹D¦b°µ¤°»ò);
­YDerivedX»{¬°詃¦³¦Û¤vªºclone´N·|¹ê°µ¦Û¤vªºclone¡C
µ²ªGµL¼ÆºØDerivedªºBase³£·|©I¥s¦U¦ÛDerived©Ò³]·Qªºclone(¤£½×¬O¦Û¤v¹ê§@譞¬O¥æµ¹Base)¡C
§@ªÌ : cxxlman(CxxlMan) C++Àu¨q¦n¤â¶K¤å¶W¹L1000«h
[ ¶K¤å 1036 | ¤H®ð 3227 | µû»ù 1260 | µû»ù/¶K¤å 1.22 | °e¥Xµû»ù 27 ¦¸ ] 
[ µ¹­ÓÆg ]  [ µ¹­ÓÆg ]  [ ¦^À³¥»¤å ]  [ µoªí·s¤å ]  [ ¦^¤W­¶ ] [ ¦^°Q½×°Ï¦Cªí ] [ ¦^ª¾ÃѤJ¤f ]
2017/12/16 ¤U¤È 02:59:23

>>­Y¤£¹ê§@ Clone()¡A·í§A®³¨ì Base *pBase¡A³o­Ó pBase ¬OµL¼ÆºØ Derived ªº Base¡A§A«ç»òª¾¹D­n«ç»ò clone
>·íDerived3¨M©w§âclone¥æµ¹Base®É¡A´Nªí¥Ü¥þÅv¥æµ¹Base clone(µ{¦¡­ûª¾¹D¦b°µ¤°»ò);
>­YDerivedX»{¬°詃¦³¦Û¤vªºclone´N·|¹ê°µ¦Û¤vªºclone¡C
>µ²ªGµL¼ÆºØDerivedªºBase³£·|©I¥s¦U¦ÛDerived©Ò³]·Qªºclone(¤£½×¬O¦Û¤v¹ê§@譞¬O¥æµ¹Base)¡C

¥i¬O³o¼Ë¦³¨â­Ó°ÝÃD

1. ­Y Derived ¨S¹ê§@ Clone()¡A¥»´L©M¤À¨­·|¦³¤£¦P¦¨¥÷¡A§Y most derived ·|¤£¦P¡A³o¼Ë¬O¤£¬O¦³¹H Clone() ªº¥»·N
2. Derived ¨S¹ê§@ Clone() ¨Æ¹ê¤W¬OÀˬd¤£¥X¨Óªº¡A§Ú¥Î dynamic_cast °µÀˬd¬O¨Æ¥ý¤wª¾ pBase ªº Derived ¬O½Ö¡A­Y¨S¹ê§@¨Æ¹ê¤W¤À¨­¤]¯à¥¿±`°õ¦æ¡A¥u¬O¦b¿ù»~¤¤°õ¦æÁÙ´ýµM¤£ª¾¡A©Ò¥H±j¨î¹ê§@¬O¥²­nªº
§@ªÌ : sunyear(coco) VC++¨ô¶V±M®aC++³»¦y°ª¤â¶K¤å¶W¹L2000«h
[ ¶K¤å 2421 | ¤H®ð 1485 | µû»ù 6060 | µû»ù/¶K¤å 2.5 | °e¥Xµû»ù 5 ¦¸ ] 
[ µ¹­ÓÆg ]  [ µ¹­ÓÆg ]  [ ¦^À³¥»¤å ]  [ µoªí·s¤å ]  [ ¦^¤W­¶ ] [ ¦^°Q½×°Ï¦Cªí ] [ ¦^ª¾ÃѤJ¤f ]
2017/12/16 ¤U¤È 05:50:13
>1. ­Y Derived ¨S¹ê§@ Clone()¡A¥»´L©M¤À¨­·|¦³¤£¦P¦¨¥÷¡A§Y most derived ·|¤£¦P¡A³o¼Ë¬O¤£¬O¦³¹H Clone() ªº¥»·N
¤£·|¡Aderivedªº¦¨¸ê®Æ©MBase¤£¦P¡A¥¦´N¦Û¤v­n°µclone¡A¨S¤H­­¨î¥¦¤£¯à¹ê§@¦Û¤vªºclone(¦ý§Aªºclone½d¨Ò¤£¯à³Qderived©I¥s¡A·|¦³°ÝÃD¡A¦ý¥ý¤£½Í³o­Ó)¡C
¦ý¤Ö³¡¥÷ªºderived¸ê®Æ­Y§¹¥þ©MBase¤@¼Ë¡A§Y¨Ï¥u¦³¦Ê¤À¤§¤@¡A³o¦Ê¤À¤§¤@¬°¤°»ò­n³Q±j­¢¹ê§@clone?³o¦³¹HOOPÄ~©Ó¥»·N¡C

>2. Derived ¨S¹ê§@ Clone() ¨Æ¹ê¤W¬OÀˬd¤£¥X¨Óªº¡A§Ú¥Î dynamic_cast °µÀˬd¬O¨Æ¥ý¤wª¾ pBase ªº Derived ¬O½Ö¡A
>­Y¨S¹ê§@¨Æ¹ê¤W¤À¨­¤]¯à¥¿±`°õ¦æ¡A¥u¬O¦b¿ù»~¤¤°õ¦æÁÙ´ýµM¤£ª¾¡A©Ò¥H±j¨î¹ê§@¬O¥²­nªº
¦pªG¤£¥Î±j­¢¹ê§@¡A¯à¤£¯àÀˬd¥X¨Ó¦³¨S¦³¹ê§@´N¤£¬O­«ÂI¡C
¤£À´"¯à¥¿±`°õ¦æ¡A¥u¬O¦b¿ù»~¤¤°õ¦æÁÙ´ýµM¤£ª¾"¡A¯à¥¿±`°õ¦æªºµ{¦¡¡A´N¬O¨S¦³¿ù»~¡A¤£¬O¶Ü?
§Ú¨ºCoordinate¦X¥GC++³W½d¡A¤]¨S¦³¿ù»~¡A§A­nÀˬd¥¦¤°»ò?
ª«¥ó«¬ºAÂà´«¡A¬O§_¦³¿ù¡A­n¬Oµ{¦¡­û¦Û¤v­n­t³d¡A¤£¬O¾a½s;¹Àˬd¡A§ó¤£¬O¾a±j­¢¹ê§@clone¡C
Ãø¹D¦³¹ê§@cloneªºderived´N¤£·|¥X¿ù¶Ü?
§@ªÌ : cxxlman(CxxlMan) C++Àu¨q¦n¤â¶K¤å¶W¹L1000«h
[ ¶K¤å 1036 | ¤H®ð 3227 | µû»ù 1260 | µû»ù/¶K¤å 1.22 | °e¥Xµû»ù 27 ¦¸ ] 
[ µ¹­ÓÆg ]  [ µ¹­ÓÆg ]  [ ¦^À³¥»¤å ]  [ µoªí·s¤å ]  [ ¦^¤W­¶ ] [ ¦^°Q½×°Ï¦Cªí ] [ ¦^ª¾ÃѤJ¤f ]
2017/12/17 ¤W¤È 11:36:51
¦]¬°·|¦³¥H¤U°ÝÃD¡A©Ò¥H¶·±j¨î¹ê§@

#include <iostream>
using namespace std;

class Base
{
public:
¡@virtual ~Base() {}

¡@virtual void SayHello()
¡@{
¡@¡@cout << "I am Base" << endl;
¡@}

¡@virtual Base* Clone()
¡@{
¡@¡@return new Base;
¡@}
};

class Derived1 :public Base
{
public:
¡@virtual void SayHello()
¡@{
¡@¡@cout << "I am Derived1" << endl;
¡@}

¡@virtual Base* Clone()
¡@{
¡@¡@return new Derived1;
¡@}
};

class Derived2 :public Base
{
public:
¡@virtual void SayHello()
¡@{
¡@¡@cout << "I am Derived2" << endl;
¡@}
};

int main()
{
¡@Base *pBase = new Derived1;
¡@Base *pCloneBase = pBase->Clone();
¡@pCloneBase->SayHello(); // I am Derived1

¡@pBase = new Derived2;
¡@pCloneBase = pBase->Clone();
¡@pCloneBase->SayHello(); // I am Base

¡@return 0;
}

°ÝÃD¦b Derived2 ¨S¦³¹ê§@ Clone()
§@ªÌ : sunyear(coco) VC++¨ô¶V±M®aC++³»¦y°ª¤â¶K¤å¶W¹L2000«h
[ ¶K¤å 2421 | ¤H®ð 1485 | µû»ù 6060 | µû»ù/¶K¤å 2.5 | °e¥Xµû»ù 5 ¦¸ ] 
[ µ¹­ÓÆg ]  [ µ¹­ÓÆg ]  [ ¦^À³¥»¤å ]  [ µoªí·s¤å ]  [ ¦^¤W­¶ ] [ ¦^°Q½×°Ï¦Cªí ] [ ¦^ª¾ÃѤJ¤f ]
2017/12/17 ¤U¤È 04:53:13
>¦]¬°·|¦³¥H¤U°ÝÃD¡A©Ò¥H¶·±j¨î¹ê§@
>class Base
>{
>public:
>¡@virtual ~Base() {}
>¡@virtual void SayHello()
>¡@{
>¡@¡@cout << "I am Base" << endl;
>¡@}
>¡@virtual Base* Clone()
>¡@{
>¡@¡@return new Base;
>¡@}
>};
>
>class Derived2 :public Base
>{
>public:
>¡@virtual void SayHello()
>¡@{
>¡@¡@cout << "I am Derived2" << endl;
>¡@}
>};

>int main()
>{
>¡@pBase = new Derived2;
>¡@pCloneBase = pBase->Clone();
>¡@pCloneBase->SayHello(); // I am Base
>
>¡@return 0;
>}
>
>°ÝÃD¦b Derived2 ¨S¦³¹ê§@ Clone()

²×©ó¬O¦^¨ì±j¨î¹ê§@»Ý¨Dªº°ÝÃD¤F¡C
§A³o­Ó¨Ò¤l¡A­n¹F¨ìSayHello()¥i¥H¥¿½T¦L¥X¨­¥÷ªº¥Øªº¡A»Ý­nclone©MSayHello³£­n±j¨î¹ê§@¤~¦¨¡A¬O¤£¬O?
cloneªº°ÝÃD¡A«e­±½Í¹L¤F¡ASayHelloªº¨Ò¤l¡A¦b§Ú¨Ó¬Ý¡A¥¦¥u¬O¦b®i¥Ü­l¥ÍÃþ§O¨S¦³Âмg°òÃþ§OµêÀÀ¨ç¦¡®É¡A©I¥sªº¬O°òÃþ§OµêÀÀ¨ç¦¡¦Ó¤v¡C
­Y¬OÀˬd­l¥ÍÃþ§O¬O§_¦³Âмg¨¡­Ó¨ç¦¡¡A¨ä¹ê¥ÎrttiÀˬd´N¥i¥Hª¾¹D¡C¦ý³oÀˬdªº·N¸q¬O¤°»ò?¦Ü¤Ö¤£·|¸ò»Ý¤£»Ý­n±j¨î¹ê§@¦³Ãö«Y§a?
§ÚÁÙ¬O¥ÎDerived3¨Ó»¡©ú¡C
§AªºDerived1¨Ò¤l¦³¨Ì§A­n¨DÂмgclone©MSayHello¡A¨S°ÝÃD¡A¬O§a?
¨º§Ú¦pªG¼g¤@­ÓDerived3¡A¤@¼Ë¥u¬O¬°¤F­×¹¢Derived1¡A§Ú¨Ã¤£·Q§ïÅÜDerived1¤°»ò¡A¥]¬AÃþ§O¦WºÙ¡CDerived3¦³¨S¦³¤£Âмgclone©MSayHelloªº¿ï¾ÜÅv?
§Úªº·N«ä¬O¡A³]­pDerived3®É¡Aµ{¦¡­û»{¬°¨Ï¥Î°òÃþªºclone©MSayHello¹ïDerived3¨S¤°»ò¼vÅT¡A¤]¥´ºâ©µ¥Î¡A¬°¤°»ò¤@©w­n¦bDerived3Âмg¥¦­Ì?
¨à¤l·Q­É¦Ñª¨ªº¨®¤l¸ü¤kªB¤Í¥hª±¤@¤Ñ¡A¦Ñª¨»¡:¥i¥H¡A¦ý§A­n¥ý§â¨®¤l¹L¤áµ¹¦Û¤v¡A¥Î§¹¦A¹L¤á¦^¨ÓÁÙµ¹§Ú¡C
¨à¤l¤lı±o¦n³Â·Ð¡A¦^»¡:¤£¹L´N­É¥Î­Ó¤@¤Ñ¡A´N­n¿ì¹L¤á¡A¦³³o»òÄY­«¶Ü?
§@ªÌ : cxxlman(CxxlMan) C++Àu¨q¦n¤â¶K¤å¶W¹L1000«h
[ ¶K¤å 1036 | ¤H®ð 3227 | µû»ù 1260 | µû»ù/¶K¤å 1.22 | °e¥Xµû»ù 27 ¦¸ ] 
[ µ¹­ÓÆg ]  [ µ¹­ÓÆg ]  [ ¦^À³¥»¤å ]  [ µoªí·s¤å ]  [ ¦^¤W­¶ ] [ ¦^°Q½×°Ï¦Cªí ] [ ¦^ª¾ÃѤJ¤f ]
2017/12/17 ¤U¤È 05:19:23


>§Úªº·N«ä¬O¡A³]­pDerived3®É¡Aµ{¦¡­û»{¬°¨Ï¥Î°òÃþªºclone©MSayHello¹ïDerived3¨S¤°»ò¼vÅT¡A¤]¥´ºâ©µ¥Î¡A¬°¤°»ò¤@©w­n¦bDerived3Âмg¥¦­Ì?

¦]¬°¥u¯à±q Base ³o­Ó¤¶­±¶i¦æ¾Þ§@¡ADerived3 ¤£Âмg Clone()¡A¦b pCloneBase ±N¤£¦s¦b Derived3
§@ªÌ : sunyear(coco) VC++¨ô¶V±M®aC++³»¦y°ª¤â¶K¤å¶W¹L2000«h
[ ¶K¤å 2421 | ¤H®ð 1485 | µû»ù 6060 | µû»ù/¶K¤å 2.5 | °e¥Xµû»ù 5 ¦¸ ] 
[ µ¹­ÓÆg ]  [ µ¹­ÓÆg ]  [ ¦^À³¥»¤å ]  [ µoªí·s¤å ]  [ ¦^¤W­¶ ] [ ¦^°Q½×°Ï¦Cªí ] [ ¦^ª¾ÃѤJ¤f ]
2017/12/17 ¤U¤È 06:46:29
>¦]¬°¥u¯à±q Base ³o­Ó¤¶­±¶i¦æ¾Þ§@¡ADerived3 ¤£Âмg Clone()¡A¦b pCloneBase ±N¤£¦s¦b Derived3
Derived3¦pªG¤£¦b¥G©O?¦b³]­pDerived3®É´N¤£¥´ºâ¦b¥G¦Û¤v¦s¤£¦s¦b¡C¦pªGDerived3¦³¥[¤F¤@­Ó¨ç¦¡¡A»Ý¥Î®É´N¼È®Écast¦¨¦¨Derived3¡A´N¥i¥H¡C
¨à¤l­n­É¦Ñª¨ªº¨®¶}¡A´N¼È®É±aµÛ¦Ñª¨ªº¦æ·Ó´N¥i¥H¤F¡A¤£»Ý­nªk«ß±j¨î­n¹L¤á(¦æ·Ó¤@©w¬O­n¶}¨®ªÌªº¦W¤l)¡C
§@ªÌ : cxxlman(CxxlMan) C++Àu¨q¦n¤â¶K¤å¶W¹L1000«h
[ ¶K¤å 1036 | ¤H®ð 3227 | µû»ù 1260 | µû»ù/¶K¤å 1.22 | °e¥Xµû»ù 27 ¦¸ ] 
[ µ¹­ÓÆg ]  [ µ¹­ÓÆg ]  [ ¦^À³¥»¤å ]  [ µoªí·s¤å ]  [ ¦^¤W­¶ ] [ ¦^°Q½×°Ï¦Cªí ] [ ¦^ª¾ÃѤJ¤f ]
2017/12/17 ¤U¤È 06:46:58

>
>
>>§Úªº·N«ä¬O¡A³]­pDerived3®É¡Aµ{¦¡­û»{¬°¨Ï¥Î°òÃþªºclone©MSayHello¹ïDerived3¨S¤°»ò¼vÅT¡A¤]¥´ºâ©µ¥Î¡A¬°¤°»ò¤@©w­n¦bDerived3Âмg¥¦­Ì?
>
>¦]¬°¥u¯à±q Base ³o­Ó¤¶­±¶i¦æ¾Þ§@¡ADerived3 ¤£Âмg Clone()¡A¦b pCloneBase ±N¤£¦s¦b

1. §Aªº Derived3 ¨S¼vÅT¡A¤£¥Nªí§O¤Hªº Derived3 ¨S¼vÅT
2. §Aªº Derived3 ¥i¥Î©ó pBase¡A¤@¼Ë¥i¥H¥Î©ó pCloneBase

Åv¿Å±o¥¢¤@©w­n±j¨î¹ê§@ Clone()
§@ªÌ : sunyear(coco) VC++¨ô¶V±M®aC++³»¦y°ª¤â¶K¤å¶W¹L2000«h
[ ¶K¤å 2421 | ¤H®ð 1485 | µû»ù 6060 | µû»ù/¶K¤å 2.5 | °e¥Xµû»ù 5 ¦¸ ] 
[ µ¹­ÓÆg ]  [ µ¹­ÓÆg ]  [ ¦^À³¥»¤å ]  [ µoªí·s¤å ]  [ ¦^¤W­¶ ] [ ¦^°Q½×°Ï¦Cªí ] [ ¦^ª¾ÃѤJ¤f ]
2017/12/17 ¤U¤È 08:40:16
>1. §Aªº Derived3 ¨S¼vÅT¡A¤£¥Nªí§O¤Hªº Derived3 ¨S¼vÅT
¹ï°Ú¡I
¦³¼vÅTªº´N¦Û¤vÂмgClone/SayHello;¨S¼vÅTªº´N¤£¥ÎÂмg¡C
¤£¬O¤@ª½³£³o¼Ë»¡ªº¶Ü?¬°¤°»ò¦³¼vÅTªº­n±j¨î¨S¼vÅTªº­nÂмg?
­Y»¡¡A³o¼Ë¤ñ¸û¦w¥þ¡C¤£Âмg°òÃþ¨ç¦¡·|³y¦¨¿ù»~ªºµ{¦¡¡A¦h¦p¤û¤û¡C
­n·ÓÅU¤]·ÓÅU¤£§¹¡I(°ò¥»¤W¡A¥u­n¤£¬O¶Ã¼g¡C©Ò¦³Âмg¨ç¦¡¦¨­ûªºµ{¦¡¡A­Y¤£Âмg´X¥G³£¬O¦³°ÝÃDªº)
¸Ó¤£¸ÓÂмg¡A´N¬Oµ{¦¡­û¦Û¤v·Q¡A¦Û¤v¨M©w¡A¦Û¤v­t³d¡C¤£¬O¥Ñ°òÃþ§O§i¶D¥L¡Cµ²ªG³s¥i¥H¤£Âмgªº³£­n³Q±j­¢Âмg¡C

>2. §Aªº Derived3 ¥i¥Î©ó pBase¡A¤@¼Ë¥i¥H¥Î©ó pCloneBase
>Åv¿Å±o¥¢¤@©w­n±j¨î¹ê§@
¤£Âмgªºµ²ªG¡A´N¬ODerived3»{¬°¥¦¥i¥H©µ¥Î°òÃþª«¥ó©M¨­¥÷¡A¤]¥i¥HÂ૬¨ìDerived3¨Ó¾Þ§@(¤@¯ë´N¬ODerived3¨S¦Û¤vªº¸ê®Æ­û)
§@ªÌ : cxxlman(CxxlMan) C++Àu¨q¦n¤â¶K¤å¶W¹L1000«h
[ ¶K¤å 1036 | ¤H®ð 3227 | µû»ù 1260 | µû»ù/¶K¤å 1.22 | °e¥Xµû»ù 27 ¦¸ ] 
[ µ¹­ÓÆg ]  [ µ¹­ÓÆg ]  [ ¦^À³¥»¤å ]  [ µoªí·s¤å ]  [ ¦^¤W­¶ ] [ ¦^°Q½×°Ï¦Cªí ] [ ¦^ª¾ÃѤJ¤f ]
2017/12/17 ¤U¤È 10:08:48
¥\¤O´N¦b³o¤F¡Aµ´¤£·|Åý·å²««~¦³¾÷·|¥X²{¡A¶Rªº¦w¤ß¡A½æªº¤]©ñ¤ß
§@ªÌ : sunyear(coco) VC++¨ô¶V±M®aC++³»¦y°ª¤â¶K¤å¶W¹L2000«h
[ ¶K¤å 2421 | ¤H®ð 1485 | µû»ù 6060 | µû»ù/¶K¤å 2.5 | °e¥Xµû»ù 5 ¦¸ ] 
[ µ¹­ÓÆg ]  [ µ¹­ÓÆg ]  [ ¦^À³¥»¤å ]  [ µoªí·s¤å ]  [ ¦^¤W­¶ ] [ ¦^°Q½×°Ï¦Cªí ] [ ¦^ª¾ÃѤJ¤f ]
2017/12/17 ¤U¤È 10:41:04
>¥\¤O´N¦b³o¤F¡Aµ´¤£·|Åý·å²««~¦³¾÷·|¥X²{¡A¶Rªº¦w¤ß¡A½æªº¤]©ñ¤ß
¨º¬O¤£¥i¯àªº¨Æ¡I
µ{¦¡ªºÀu¦H¹ï¿ù¤­ªá¤Kªù¡C
¦pªGµ{¦¡­û³s¸Ó¤£¸ÓÂмgÄ~©Ó¤U¨Óªº¨ç¦¡³£·d¤£²M·¡¡A¼g¥X¨Óªºµ{¦¡·|Åý¤H©ñ¤ß?
Ä~©Óªººë¯«´N¬Oµ{¦¡½X¥i¥H½Æ¥Î©Î§ï¼g¡A´Nºâ§ï¼g¤j³¡ªº±¡ªp¤]·|©I¥s°òÃþ¨ç¦¡¡C
¦ý¦³«Ü¦h±¡ªp¬O¡AÃþ§O©Î¨ç¦¡¦¨­û¬O¤£§Æ±æ¦A³QÄ~©Óªº¡A³o´N¬Oc++1.1·s¼Wªºfinal¡C
¬J­n§O¤HÄ~©Ó¤S¤£µ¹Ä~©ÓªÌ©I¥s¨Ï¥Î¡A¬O¹H¤ÏÄ~©Óºë¯«ªº¡C¹³§Aªºclone¡A¤@¯ëclone¤£¬O¥u¥Î¹w³]ªº½Æ»s«Øºc¤l´N¥i¥Hªº¡C
ÁÙ­n¦Û¦æºÞ²z¤@¨ÇÃþ§O¸ê®Æ¦¨­ûªº½Æ»s¡C³o¨Ç¦¨­û­Y¬O¦b°òÃþprivate¡Aclone¤S¤£µ¹­l¥ÍÃþ§O©I¥s¡Aµ{¦¡´X¥G¬O¼g¤£¤U¥hªº¡C
´Nºâ³o¨Ç¸ê®Æ¬O¦bprotected©Îpublic¡A­n­l¥ÍÃþ§Oªºclone¥h­t³d°òÃþªºclone¤u§@¤]¬O«Ü©Çªº¡C
¼g¤@­Ó³o»ò©Çªºclone¡A¤S¹F¤£¨ì»¡ªA¤H¬°¤°»ò±j¨îÂмg¬O¥²­nªº¡C
©Î³\must¦³¤°»òcase¬O¦³»Ý­nªº(­Y¦³¡A§Ú¤]¦³¿³½ìª¾¹D)¡A¦ýcloneµ´¤£·|¬O­Ómust»Ý­nªº¦n½d¨Ò¡C
§@ªÌ : cxxlman(CxxlMan) C++Àu¨q¦n¤â¶K¤å¶W¹L1000«h
[ ¶K¤å 1036 | ¤H®ð 3227 | µû»ù 1260 | µû»ù/¶K¤å 1.22 | °e¥Xµû»ù 27 ¦¸ ] 
[ µ¹­ÓÆg ]  [ µ¹­ÓÆg ]  [ ¦^À³¥»¤å ]  [ µoªí·s¤å ]  [ ¦^¤W­¶ ] [ ¦^°Q½×°Ï¦Cªí ] [ ¦^ª¾ÃѤJ¤f ]
2017/12/17 ¤U¤È 11:02:03
cloneµ´¹ï¬Omust»Ý­nªº¦n½d¨Ò¡A¦]¬°¦³ wiki ­I®Ñ:

§J¶©¡]­^语¡GClone¡^¦b¼s¸q¤W¬O«ü§Q¥Î¥Íª«§Þ术¥ÑÆÓ©Ê¥Í´Þ产¥ÍÉO­ì个Ê^¦³§¹¥þ¬Û¦P°ò¦]组¤§¦Z¥Nªº过µ{¡C

­Y§J¶©¥X¨Óªº¤À¨­©M¥»´L¤£¤@¼Ë¡A¨º¤~·|Åý¤HºÃ´b

§@ªÌ : cheg(cheg)
[ ¶K¤å 99 | ¤H®ð 125 | µû»ù 410 | µû»ù/¶K¤å 4.14 | °e¥Xµû»ù 24 ¦¸ ] 
[ µ¹­ÓÆg ]  [ µ¹­ÓÆg ]  [ ¦^À³¥»¤å ]  [ µoªí·s¤å ]  [ ¦^¤W­¶ ] [ ¦^°Q½×°Ï¦Cªí ] [ ¦^ª¾ÃѤJ¤f ]
2017/12/18 ¤W¤È 12:14:04
§c clone ¸ò accept À³¸Ó¬O¾A¦X must ¨S¿ù°Õ
³o¯uªº¤£¥Îª§¡A¤@¶}©l°Q½×ªº´N¬O³o­Ó
¨Ï¥Î¤£¦PÄ~©Ó¬[ºc¬O¥Ø«e¤ñ¸û¦X²zªº¸Ñ¨M¤èªk
§A¥Î¦h­«Ä~©Ó¨Ó±j¨î must ¨ä¹ê¦³­Ó°ÝÃD
·í§A¼g PROTOTYPE_BASE_CRTP ªº®É­Ô
¨ä¹ê´N¬O§Aª¾¹D­n§ï¼g¨º¨Ç¨ç¼Æªº®É­Ô¤F : -)
  
§@ªÌ : cxxlman(CxxlMan) C++Àu¨q¦n¤â¶K¤å¶W¹L1000«h
[ ¶K¤å 1036 | ¤H®ð 3227 | µû»ù 1260 | µû»ù/¶K¤å 1.22 | °e¥Xµû»ù 27 ¦¸ ] 
[ µ¹­ÓÆg ]  [ µ¹­ÓÆg ]  [ ¦^À³¥»¤å ]  [ µoªí·s¤å ]  [ ¦^¤W­¶ ] [ ¦^°Q½×°Ï¦Cªí ] [ ¦^ª¾ÃѤJ¤f ]
2017/12/18 ¤U¤È 01:09:29

>·í§A¼g PROTOTYPE_BASE_CRTP ªº®É­Ô
>¨ä¹ê´N¬O§Aª¾¹D­n§ï¼g¨º¨Ç¨ç¼Æªº®É­Ô¤F : -)

PROTOTYPE_BASE_CRTP °ÝÃD«Ü¦h¡A¤]§Ñ¤F¦³­þ¨Ç°ÝÃD¤F
²{¦b¬O¥Î ¤¶­±Ä~©Ó+²Õ¦X¡A¦ý¥Î³o¤èªk­n¦³¦³¤Oªºª«¥óºÞ²z°µ«á¬Þ
©Ò¥H must ¬O³Ì²³æªº¤èªk

§@ªÌ : cheg(cheg)
[ ¶K¤å 99 | ¤H®ð 125 | µû»ù 410 | µû»ù/¶K¤å 4.14 | °e¥Xµû»ù 24 ¦¸ ] 
[ µ¹­ÓÆg ]  [ µ¹­ÓÆg ]  [ ¦^À³¥»¤å ]  [ µoªí·s¤å ]  [ ¦^¤W­¶ ] [ ¦^°Q½×°Ï¦Cªí ] [ ¦^ª¾ÃѤJ¤f ]
2017/12/18 ¤U¤È 02:43:03
>PROTOTYPE_BASE_CRTP °ÝÃD«Ü¦h¡A¤]§Ñ¤F¦³­þ¨Ç°ÝÃD¤F
>²{¦b¬O¥Î ¤¶­±Ä~©Ó+²Õ¦X¡A¦ý¥Î³o¤èªk­n¦³¦³¤Oªºª«¥óºÞ²z°µ«á¬Þ
>©Ò¥H must ¬O³Ì²³æªº¤èªk
>
>

¤£½×¯à§_¸Ñ¨M§A»¡ªº PROTOTYPE_BASE_CRTP ¨º¨Ç°ÝÃD
¥¦»P must ³Ì®Ú¥»ªº®t§O¬O¡Amust ¦b³]­p°ò¦Ãþ§Oªº®É­Ô´N¥i¥H±j¨î§ï¼g
¦Ó¥¦¬O¦b¤lÃþ§OÄ~©Óªº®É­Ô¥h¨Ï¥Î¹F¨ì±j¨î¤O¡A°ÝÃD´N¦b³o¸Ì¡A¦pªG»¡§A³£
ª¾¹D­n©I¥s³o­Ó¥¨¶°¤F¡Aµ¥©ó§Aª¾¹D¥Ø«e³o­ÓÃþ§O¦³ÃB¥~ªº³d¥ô (§ï¼g clone »P accept)
³o¸ò must ªºªì°J¨Ã¤£¬Û²Å¡A©Ò¥H¨Ã¤£¯à¨ú¥N¥¦¡A¤£¹L¨Ï¥Î¥¦ÁÙ¬O¦³´£¿ô§@¥Î
¥¦µ¥©ó¬O¥ý¥ß¤@­Ó tag¡A¦pªG§A¦³«Ü¦h¨ç¼Æ­n§ï¼g¡A¤£¥i¯à¤@¦¸¼g§¹¡A³o­Ó¥¨¶°ÁÙ¬O¥i¥H±Ò¨ì´£¿ôªº§@¥Î¡C
  
  
§@ªÌ : sunyear(coco) VC++¨ô¶V±M®aC++³»¦y°ª¤â¶K¤å¶W¹L2000«h
[ ¶K¤å 2421 | ¤H®ð 1485 | µû»ù 6060 | µû»ù/¶K¤å 2.5 | °e¥Xµû»ù 5 ¦¸ ] 
[ µ¹­ÓÆg ]  [ µ¹­ÓÆg ]  [ ¦^À³¥»¤å ]  [ µoªí·s¤å ]  [ ¦^¤W­¶ ] [ ¦^°Q½×°Ï¦Cªí ] [ ¦^ª¾ÃѤJ¤f ]
2017/12/18 ¤U¤È 07:07:36
>cloneµ´¹ï¬Omust»Ý­nªº¦n½d¨Ò¡A¦]¬°¦³ wiki ­I®Ñ:
>§J¶©¡]­^语¡GClone¡^¦b¼s¸q¤W¬O«ü§Q¥Î¥Íª«§Þ术¥ÑÆÓ©Ê¥Í´Þ产¥ÍÉO­ì个Ê^¦³§¹¥þ¬Û¦P°ò¦]组¤§¦Z¥Nªº过µ{¡C
§A©Î§Ú³£¥i¥H¥h½swiki^^¡A¥B¤£ª§wikiªºÅv«Â©Ê¡C
§AÂX¤j¸ÑÄÀ³o¥y¸Üªº·N«ä¡A¤]»~¸Ñ§Úªº·N«ä¡C§Ú±q¨S»¡clone¤£¥²½Æ»s§¹¥þ¬Û¦Pªºª«¥ó¡C
³o¥y¸Üªº·N¬O¡A½Æ»sªºµ²ªG­n©M³Q½Æ»sªÌ§¹¥þ¬Û¦P¡A¦ý­n¹F¦¨³o¥Øªº¡A¨S»¡«D±omust¤£¥i¡C
¦³must¡A¦ýµ{¦¡­û¨ScloneªºÆ[©À©Îµ{¦¡¼g¿ù¡AÁÙ¬O¥i¯à½Æ»s¤@­Ó¤£§¹¥þ¬Û¦Pªº¤À¨­¡C
must­Y°µ¬°¤@­ÓHint©ÎWarning«Ü¦n¡C¦ýÅܦ¨±j¨î´N¤£¦n¡C²z¥Ñ´N¬O§Ú«e­±¤@ª½»¡ªº:
OOP ©Î C++ªºª«¥ó¡A«üªº¬O¸ê®Æ(¥]¬AVtable)¡A¤£¬OÃþ§O¸Ì­±ªº¨ç¦¡¡C
¦pªGÄ~©ÓÃþ§O¨Ã¨S¦³¼W¥[©Î§ïÅÜ¥ô¦ó¸ê®Æ¡A¤£ºÞ¬O¤÷©Î¤lclone³£¬O¥i¥H»s°µ¬Û¦Pªºª«¥ó¡A¨º¬°¦ó¤£¯à¥æµ¹¤÷Ãþ§Oclone´N¦n?
¦P¬O½Æ»s¥X¤@¼Ò¤@¼Ëªºª«¥ó¡I¥u­nµ{¦¡­ûª¾¹D¦b°µ¤°»ò¡A¦³¦ó¤£¥i?


§@ªÌ : cxxlman(CxxlMan) C++Àu¨q¦n¤â¶K¤å¶W¹L1000«h
[ ¶K¤å 1036 | ¤H®ð 3227 | µû»ù 1260 | µû»ù/¶K¤å 1.22 | °e¥Xµû»ù 27 ¦¸ ] 
[ µ¹­ÓÆg ]  [ µ¹­ÓÆg ]  [ ¦^À³¥»¤å ]  [ µoªí·s¤å ]  [ ¦^¤W­¶ ] [ ¦^°Q½×°Ï¦Cªí ] [ ¦^ª¾ÃѤJ¤f ]
2017/12/18 ¤U¤È 07:11:44

>
>¤£½×¯à§_¸Ñ¨M§A»¡ªº PROTOTYPE_BASE_CRTP ¨º¨Ç°ÝÃD
>¥¦»P must ³Ì®Ú¥»ªº®t§O¬O¡Amust ¦b³]­p°ò¦Ãþ§Oªº®É­Ô´N¥i¥H±j¨î§ï¼g
>¦Ó¥¦¬O¦b¤lÃþ§OÄ~©Óªº®É­Ô¥h¨Ï¥Î¹F¨ì±j¨î¤O¡A°ÝÃD´N¦b³o¸Ì¡A¦pªG»¡§A³£
>ª¾¹D­n©I¥s³o­Ó¥¨¶°¤F¡Aµ¥©ó§Aª¾¹D¥Ø«e³o­ÓÃþ§O¦³ÃB¥~ªº³d¥ô (§ï¼g clone »P accept)
>³o¸ò must ªºªì°J¨Ã¤£¬Û²Å¡A©Ò¥H¨Ã¤£¯à¨ú¥N¥¦¡A¤£¹L¨Ï¥Î¥¦ÁÙ¬O¦³´£¿ô§@¥Î
>¥¦µ¥©ó¬O¥ý¥ß¤@­Ó tag¡A¦pªG§A¦³«Ü¦h¨ç¼Æ­n§ï¼g¡A¤£¥i¯à¤@¦¸¼g§¹¡A³o­Ó¥¨¶°ÁÙ¬O¥i¥H±Ò¨ì´£¿ôªº§@¥Î¡C

¦]¨S¦³ must ¥i¥Î¡A©Ò¥H·Q»¡¨S³½½¼¤]¦n¡A¥u­n¯à¦³­Ó´£¿ô»²§Uªº´N¦æ¤F

§@ªÌ : cxxlman(CxxlMan) C++Àu¨q¦n¤â¶K¤å¶W¹L1000«h
[ ¶K¤å 1036 | ¤H®ð 3227 | µû»ù 1260 | µû»ù/¶K¤å 1.22 | °e¥Xµû»ù 27 ¦¸ ] 
[ µ¹­ÓÆg ]  [ µ¹­ÓÆg ]  [ ¦^À³¥»¤å ]  [ µoªí·s¤å ]  [ ¦^¤W­¶ ] [ ¦^°Q½×°Ï¦Cªí ] [ ¦^ª¾ÃѤJ¤f ]
2017/12/18 ¤U¤È 09:31:48

>>cloneµ´¹ï¬Omust»Ý­nªº¦n½d¨Ò¡A¦]¬°¦³ wiki ­I®Ñ:
>>§J¶©¡]­^语¡GClone¡^¦b¼s¸q¤W¬O«ü§Q¥Î¥Íª«§Þ术¥ÑÆÓ©Ê¥Í´Þ产¥ÍÉO­ì个Ê^¦³§¹¥þ¬Û¦P°ò¦]组¤§¦Z¥Nªº过µ{¡C
>§A©Î§Ú³£¥i¥H¥h½swiki^^¡A¥B¤£ª§wikiªºÅv«Â©Ê¡C
>§AÂX¤j¸ÑÄÀ³o¥y¸Üªº·N«ä¡A¤]»~¸Ñ§Úªº·N«ä¡C§Ú±q¨S»¡clone¤£¥²½Æ»s§¹¥þ¬Û¦Pªºª«¥ó¡C
>³o¥y¸Üªº·N¬O¡A½Æ»sªºµ²ªG­n©M³Q½Æ»sªÌ§¹¥þ¬Û¦P¡A¦ý­n¹F¦¨³o¥Øªº¡A¨S»¡«D±omust¤£¥i¡C
>¦³must¡A¦ýµ{¦¡­û¨ScloneªºÆ[©À©Îµ{¦¡¼g¿ù¡AÁÙ¬O¥i¯à½Æ»s¤@­Ó¤£§¹¥þ¬Û¦Pªº¤À¨­¡C
>must­Y°µ¬°¤@­ÓHint©ÎWarning«Ü¦n¡C¦ýÅܦ¨±j¨î´N¤£¦n¡C²z¥Ñ´N¬O§Ú«e­±¤@ª½»¡ªº:
>OOP ©Î C++ªºª«¥ó¡A«üªº¬O¸ê®Æ(¥]¬AVtable)¡A¤£¬OÃþ§O¸Ì­±ªº¨ç¦¡¡C
>¦pªGÄ~©ÓÃþ§O¨Ã¨S¦³¼W¥[©Î§ïÅÜ¥ô¦ó¸ê®Æ¡A¤£ºÞ¬O¤÷©Î¤lclone³£¬O¥i¥H»s°µ¬Û¦Pªºª«¥ó¡A¨º¬°¦ó¤£¯à¥æµ¹¤÷Ãþ§Oclone´N¦n?
>¦P¬O½Æ»s¥X¤@¼Ò¤@¼Ëªºª«¥ó¡I¥u­nµ{¦¡­ûª¾¹D¦b°µ¤°»ò¡A¦³¦ó¤£¥i?

¤¶­±³]­p±Ä¥Î Clone() ´N­n·Q¿ìªkÅý©w¸q½T¹ê¼i¦æ¡A³o¼Ëµ¹¨Ï¥ÎºÝ¤~ºâ¦³¥æ¥N¡A­u´öÁФõ¦b©Ò¤£Ãã¡A­Y°µ¤£¨ì
´NÀ³¸Ó§â Clone() ®³±¼¡A³o¼Ë¤~¥s­t³d

©Ò¥H Clone() ¥u¯à¥Î»P¤£¥Î¡A¨S¦³§´¨óªº¾l¦a


§@ªÌ : sunyear(coco) VC++¨ô¶V±M®aC++³»¦y°ª¤â¶K¤å¶W¹L2000«h
[ ¶K¤å 2421 | ¤H®ð 1485 | µû»ù 6060 | µû»ù/¶K¤å 2.5 | °e¥Xµû»ù 5 ¦¸ ] 
[ µ¹­ÓÆg ]  [ µ¹­ÓÆg ]  [ ¦^À³¥»¤å ]  [ µoªí·s¤å ]  [ ¦^¤W­¶ ] [ ¦^°Q½×°Ï¦Cªí ] [ ¦^ª¾ÃѤJ¤f ]
¥DÃDµo°_¤Hcxxlmanµù°O¦¹½g¦^À³¬°³Ì¨Î¸Ñµª 2017/12/19 ¤U¤È 01:51:41
>¤¶­±³]­p±Ä¥Î Clone() ´N­n·Q¿ìªkÅý©w¸q½T¹ê¼i¦æ¡A³o¼Ëµ¹¨Ï¥ÎºÝ¤~ºâ¦³¥æ¥N¡A­u´öÁФõ¦b©Ò¤£Ãã¡A­Y°µ¤£¨ì
>´NÀ³¸Ó§â Clone() ®³±¼¡A³o¼Ë¤~¥s­t³d©Ò¥H Clone() ¥u¯à¥Î»P¤£¥Î¡A¨S¦³§´¨óªº¾l¦a
"­u´öÁФõ"¡A¦³³o»òÄY­«¶Ü^^
³o¥u¬O§Aªº¿ï¾Ü¡A´N§Ú¨Ó¬Ý¡A¥u­n­l¥ÍÃþ§Oª«¥ó©M°òÃþ¬O¤@¼Ëªº¡A©I¥s°òÃþ§OªºClone¬O¨S°ÝÃDªº¡C
©Ò¥H¥HClone­n»¡ªA§Úmustªº¥²­n©Ê¡A§Ú«ÜÃø»{¦P¡C
¦ý¡A¯u­n´£¿ô­l¥ÍÃþ­n¹ê§@¦Û¤vªºClone¡A¨ä¹ê¤£¥²¹³«e­±¼gªº¨º»ò½ÆÂø(±µ¤âªº¤â¥ú­n¬ÝÀ´©M¨Ï¥Î´N­n¶O¤£¤Ö¤ß¤O)¡C
¹³³o¼Ë´N¥i¥H¤F:
class Base
{
public:
virtual Base *Clone()
{
assert(strcmp("class Base", typeid(*this).name())==0);//¦bdebug¶¥¬q¡AÀˬd­l¥ÍÃþ§O¬O§_¹ê§@Clone
return new Base(*this);
}
};

class Derived1 :public Base
{
public:
virtual Base *Clone()
{
assert(strcmp("class Derived1",typeid(*this).name())==0);//¦bdebug¶¥¬q¡AÀˬd­l¥ÍÃþ§O¬O§_¹ê§@Clone
return new Derived1(*this);
}

};
§@ªÌ : cxxlman(CxxlMan) C++Àu¨q¦n¤â¶K¤å¶W¹L1000«h
[ ¶K¤å 1036 | ¤H®ð 3227 | µû»ù 1260 | µû»ù/¶K¤å 1.22 | °e¥Xµû»ù 27 ¦¸ ] 
[ µ¹­ÓÆg ]  [ µ¹­ÓÆg ]  [ ¦^À³¥»¤å ]  [ µoªí·s¤å ]  [ ¦^¤W­¶ ] [ ¦^°Q½×°Ï¦Cªí ] [ ¦^ª¾ÃѤJ¤f ]
2017/12/19 ¤U¤È 07:15:24
¥i¦æ¡A°O¤j¥\¤@¥ó¡A¤£¹L­n§ï¤@¤U

#include <string.h>
#include <assert.h>¡@¡@ /* assert */
#include <typeinfo>¡@¡@ /* assert */
#include <iostream>

using namespace std;

class Base
{
public:
¡@virtual Base *Clone()
¡@{
¡@¡@Base *p = new Base(*this);
¡@¡@assert(strcmp(typeid(*p).name(), typeid(*this).name()) == 0);//¦bdebug¶¥¬q¡AÀˬd­l¥ÍÃþ§O¬O§_¹ê§@Clone
¡@¡@return p;
¡@}
};

class Derived1 :public Base
{
public:
¡@virtual Base *Clone()
¡@{
¡@¡@Base *p = new Derived1(*this);
¡@¡@assert(strcmp(typeid(*p).name(), typeid(*this).name()) == 0);//¦bdebug¶¥¬q¡AÀˬd­l¥ÍÃþ§O¬O§_¹ê§@Clone
¡@¡@return p;
¡@}
};


int main()
{
¡@Base *pBase = new Derived1;
¡@Base *pCloneBase = pBase->Clone();

¡@return 0;
}


§@ªÌ : cxxlman(CxxlMan) C++Àu¨q¦n¤â¶K¤å¶W¹L1000«h
[ ¶K¤å 1036 | ¤H®ð 3227 | µû»ù 1260 | µû»ù/¶K¤å 1.22 | °e¥Xµû»ù 27 ¦¸ ] 
[ µ¹­ÓÆg ]  [ µ¹­ÓÆg ]  [ ¦^À³¥»¤å ]  [ µoªí·s¤å ]  [ ¦^¤W­¶ ] [ ¦^°Q½×°Ï¦Cªí ] [ ¦^ª¾ÃѤJ¤f ]
2017/12/19 ¤U¤È 07:29:25
¤£¹LÁÙ±o´£¿ô±µ¤âªÌ¨Ì¼Ëµe¸¬Äª¡AÁÙ¬O´£¨Ñ must ·|¤ñ¸û²³æ
§@ªÌ : sunyear(coco) VC++¨ô¶V±M®aC++³»¦y°ª¤â¶K¤å¶W¹L2000«h
[ ¶K¤å 2421 | ¤H®ð 1485 | µû»ù 6060 | µû»ù/¶K¤å 2.5 | °e¥Xµû»ù 5 ¦¸ ] 
[ µ¹­ÓÆg ]  [ µ¹­ÓÆg ]  [ ¦^À³¥»¤å ]  [ µoªí·s¤å ]  [ ¦^¤W­¶ ] [ ¦^°Q½×°Ï¦Cªí ] [ ¦^ª¾ÃѤJ¤f ]
2017/12/19 ¤U¤È 08:24:49
>¤£¹LÁÙ±o´£¿ô±µ¤âªÌ¨Ì¼Ëµe¸¬Äª¡AÁÙ¬O´£¨Ñ must ·|¤ñ¸û²³æ
°ò¥»¤W¡C§Ú»{¬°¤£·|´£¨Ñ¡C²Ä¤@¡A¨S»Ý­n©Ê¡A²Ä¤G¦³¹HÄ~©Ó­ì«h¡C
Ãö©ó²Ä¤GÂI¡A­ì«h¬O¡A°òÃþ¥i¥H¨M©w¥»¨­¬O§_¥i¶Ç¨ì¤U¥N¡A¦ý¤£À³­­¨î¤U¤@¥N¬O§_¤¹³\¶Çµ¹¤U¤U¤@¥N¡C
(´Nºâ§A¤£¦P·N¤U¥N¥i¥H¤Þ¥Î°òÃþªºClone¡A¦ý¦pªG¤U¥N¦³¨ä¥¦ªºClone°µªk¡A¥i¥H¶Çµ¹¤U¤U¥N¤Þ¥Î©O?)
´NºâC++À³§A­n¨Dµ¹§Amust¦n¤F¡A¤U¥N­n¤£Å¥¸Ü¡A¼g¦¨³o¼Ë¡A§Aªºmust¤S¯à­@¦ó?(¹³§Ú´N¥i¯à¤£Å¥¸Ü¡A¦]¬°§Ú»{¬°¥i¥H©µ¥Î°òÃþclone)
class Derived1 :public Base
{
public:
virtual Base *Clone()
{return Base ::Clone();}
};

¨Ï¥Îassert¤è¦¡¡A°£¤Fªí©ú¤£µ¹¤l¥NÄ~©Ó¨Ï¥Î¡A¤]¬O¤@ºØ´£¿ô¤U¥N¡A;­Y¨S¦³¨ä¥¦·Qªk¡A´NÁÙ¬O§âassert¥[¤W¥h¡C
­Y­ì©l°òÃþ³]­p¡A¬O´Á±æ(¤]¶È¯à´Á±æ)Clone³£¬O¤@¼Ëªº¼gªk¡A¨º¨Ï¥Î¦¨­û¨ç¦¡¼Òª©µ¹­l¥ÍÃþ§O¨Ï¥Î¡A¥iÁ×§Kº|¼gassert¡C
³o´N¯à¹F¨ì§Aªº¥Øªº¡C¦ýµ¸Âk¬O´Á±æ¡AµLªk±j¨î(³smust³£µLªk±j¨î)¡A¤l¥N­n¤£Å¥¸Ü¡A°µ¤÷¿Ëªº¤£­n·Q¤Ó¦h¡A¥H¬°ºÞ±o¤F(¤£Å¥¸Ü¦³¨âºØ¡A¤@ºØ¬O¶Ã·d¡A¥t¤@ºØ¬O¦³¦Û¤vªº·Qªk)¡C
¥t¥~¤@­Ó«ØÄ³¡AClone¼g¦¨³o¼Ë¡A¦b¨Ï¥Î®É¡A­Y¦³­l¥ÍÃþ§O§Ñ¤F¦Û¤vªºClone¡A¦b½sͮɴN¥iÀ˪¾:
class Base
{
public:
virtual Base *Clone(){
return new Base(*this); }
};

class Derived1 :public Base
{
public:
virtual Derived1 *Clone(){
return new Derived1(*this);}

};

class Derived2 :public Base
{
//¨S¦³¹ê§@Clone
};

int main()
{
Derived1 *pB1 = new Derived1;
Derived2 *pB2 = new Derived2;

Derived1 *pC1 = pB1->Clone();
Derived2 *pC2 = pB2->Clone();//¦b½sͶ¥¬q´N¥iÀ˪¾Derived2¨S¦³¹ê§@Clone
}

¨Ï¥ÎassertÀˬd¦A¥[¤Wcovariant return typesªºÀ°¦£¡A³Ì«á¥Îtemplate§âCloneªº¹ê§@¥]°_¨Ó¡AÀ³¸ÓÅ¥¸Üªº¤p«Ä«ÜÃø¥X­y¤F¡C
¦ý¤p«Ä­n¤£Å¥¸Ü¡A¯«¥PÃø±Ï(must¤]¨S¥Î)¡C
§@ªÌ : cxxlman(CxxlMan) C++Àu¨q¦n¤â¶K¤å¶W¹L1000«h
[ ¶K¤å 1036 | ¤H®ð 3227 | µû»ù 1260 | µû»ù/¶K¤å 1.22 | °e¥Xµû»ù 27 ¦¸ ] 
[ µ¹­ÓÆg ]  [ µ¹­ÓÆg ]  [ ¦^À³¥»¤å ]  [ µoªí·s¤å ]  [ ¦^¤W­¶ ] [ ¦^°Q½×°Ï¦Cªí ] [ ¦^ª¾ÃѤJ¤f ]
2017/12/20 ¤W¤È 09:37:27


>int main()
>{
> Derived1 *pB1 = new Derived1;
> Derived2 *pB2 = new Derived2;
>
> Derived1 *pC1 = pB1->Clone();
> Derived2 *pC2 = pB2->Clone();//¦b½sͶ¥¬q´N¥iÀ˪¾Derived2¨S¦³¹ê§@Clone
>}

¥Ñ©ó§A¥Îªk¤£·í¡A¾É­PÆ[ÂI°¾®t¡A©Ò¥H´N¤@ª½¦b¦U»¡¦Uªk
§AÀ³¸Ó¥Ñ Base ªº¨Ï¥Î¨¤«×¥h¦Ò¶q¡A¦Ó¤£¬O¥Ñ Derived

Base *Fun(Base *pBase)
{
  return pBase->Clone();
}


>
>¨Ï¥ÎassertÀˬd¦A¥[¤Wcovariant return typesªºÀ°¦£¡A³Ì«á¥Îtemplate§âCloneªº¹ê§@¥]°_¨Ó¡AÀ³¸ÓÅ¥¸Üªº¤p«Ä«ÜÃø¥X­y¤F¡C

ÀRºAÄ~©Ó§Ú¤]¥Î¦Ò¼{¹L¡A¤£¹L¨º©M PROTOTYPE_BASE_CRTP °µªkªº®ÄªG¬Û·í

>¦ý¤p«Ä­n¤£Å¥¸Ü¡A¯«¥PÃø±Ï(must¤]¨S¥Î)¡C

assert ¥u¦b Clone() ®ÄªG¸û¦n¡A­Y¥Î¦b Visitor ªº Accept() ¤¤¤]­n²£¥Í¤@­Ó¥Î¤£¨ì¥u§@¬° assert Àˬdªºª«¥ó¡A§A¬O§_¯à±µ¨ü
§@ªÌ : cxxlman(CxxlMan) C++Àu¨q¦n¤â¶K¤å¶W¹L1000«h
[ ¶K¤å 1036 | ¤H®ð 3227 | µû»ù 1260 | µû»ù/¶K¤å 1.22 | °e¥Xµû»ù 27 ¦¸ ] 
[ µ¹­ÓÆg ]  [ µ¹­ÓÆg ]  [ ¦^À³¥»¤å ]  [ µoªí·s¤å ]  [ ¦^¤W­¶ ] [ ¦^°Q½×°Ï¦Cªí ] [ ¦^ª¾ÃѤJ¤f ]
2017/12/20 ¤U¤È 01:59:02

>
>>¦ý¤p«Ä­n¤£Å¥¸Ü¡A¯«¥PÃø±Ï(must¤]¨S¥Î)¡C
>
>assert ¥u¦b Clone() ®ÄªG¸û¦n¡A­Y¥Î¦b Visitor ªº Accept() ¤¤¤]­n²£¥Í¤@­Ó¥Î¤£¨ì¥u§@¬° assert Àˬdªºª«¥ó¡A§A¬O§_¯à±µ¨ü

¤£¶·²£¥Íª«¥ó¡A³o¼Ë¤]¥i¥H

assert(strcmp(typeid(Base).name(), typeid(*this).name()) == 0);//¦bdebug¶¥¬q¡AÀˬd­l¥ÍÃþ§O¬O§_¹ê§@Clone

§@ªÌ : sunyear(coco) VC++¨ô¶V±M®aC++³»¦y°ª¤â¶K¤å¶W¹L2000«h
[ ¶K¤å 2421 | ¤H®ð 1485 | µû»ù 6060 | µû»ù/¶K¤å 2.5 | °e¥Xµû»ù 5 ¦¸ ] 
[ µ¹­ÓÆg ]  [ µ¹­ÓÆg ]  [ ¦^À³¥»¤å ]  [ µoªí·s¤å ]  [ ¦^¤W­¶ ] [ ¦^°Q½×°Ï¦Cªí ] [ ¦^ª¾ÃѤJ¤f ]
2017/12/20 ¤U¤È 04:36:46
>int main()
>>{
>> Derived1 *pB1 = new Derived1;
>> Derived2 *pB2 = new Derived2;
>>
>> Derived1 *pC1 = pB1->Clone();
>> Derived2 *pC2 = pB2->Clone();//¦b½sͶ¥¬q´N¥iÀ˪¾Derived2¨S¦³¹ê§@Clone
>>}
>
>¥Ñ©ó§A¥Îªk¤£·í¡A¾É­PÆ[ÂI°¾®t¡A©Ò¥H´N¤@ª½¦b¦U»¡¦Uªk
>§AÀ³¸Ó¥Ñ Base ªº¨Ï¥Î¨¤«×¥h¦Ò¶q¡A¦Ó¤£¬O¥Ñ Derived
³o¥u¬O´£¨Ñ¤@­Ó¥i¥H¦b½sͶ¥¬q¥i¥HÀ˪¾¦³¨S¦³¹ê§@Cloneªº¤èªk¡C
Clone¨Ï¥Îcovariant return types¬O¼Ð·Çªº¥Îªk¡A
PC2§A§â¥¦·í§@Base¨Ï¥Î¤]§¹¥þ¨S°ÝÃD¡CÃö¤°»ò¥Îªk¤£·í?
¦³Ãömust©MÂ૬ªº°Q½×°÷¦h¤F¡A§Ú´£¥X¤F«Ü¦h¦U­Ó¨¤«×ªºÆ[ÂI(ÁÙ¦³¥¿¦¡¤å¥ó)¡A½Ð°Ý§A´£¥X¤F¤°»ò?
´Nª½±µ¤Uµ²½×¬O§O¤HªºÆ[ÂIüW®t?
¤Ï¥¿must¯u¥¿ªº»Ý¨D§Ú¬O·P¨ü¤£¨ì¡Aclone¤]¤£¬O¦nªF¦è(§Ú­Ì³£¬O¥HlayerºÞ²z¶¥¼hª«¥ó«Ø¥ß©M¦æ¬°³\¥i)¡A¨º­Óassert¤]¬O«d¨¬¾A¼i¡C
¡A¬JµL¦@ÃÑ¡A°Q½×´N¨ì¦¹§a¡C

Base *Fun(Base *pBase)
{
  return pBase->Clone();
}
§@ªÌ : cxxlman(CxxlMan) C++Àu¨q¦n¤â¶K¤å¶W¹L1000«h
[ ¶K¤å 1036 | ¤H®ð 3227 | µû»ù 1260 | µû»ù/¶K¤å 1.22 | °e¥Xµû»ù 27 ¦¸ ] 
[ µ¹­ÓÆg ]  [ µ¹­ÓÆg ]  [ ¦^À³¥»¤å ]  [ µoªí·s¤å ]  [ ¦^¤W­¶ ] [ ¦^°Q½×°Ï¦Cªí ] [ ¦^ª¾ÃѤJ¤f ]
2017/12/20 ¤U¤È 04:44:41

>>int main()
>>>{
>>> Derived1 *pB1 = new Derived1;
>>> Derived2 *pB2 = new Derived2;
>>>
>>> Derived1 *pC1 = pB1->Clone();
>>> Derived2 *pC2 = pB2->Clone();//¦b½sͶ¥¬q´N¥iÀ˪¾Derived2¨S¦³¹ê§@Clone
>>>}
>>
>>¥Ñ©ó§A¥Îªk¤£·í¡A¾É­PÆ[ÂI°¾®t¡A©Ò¥H´N¤@ª½¦b¦U»¡¦Uªk
>>§AÀ³¸Ó¥Ñ Base ªº¨Ï¥Î¨¤«×¥h¦Ò¶q¡A¦Ó¤£¬O¥Ñ Derived
>³o¥u¬O´£¨Ñ¤@­Ó¥i¥H¦b½sͶ¥¬q¥i¥HÀ˪¾¦³¨S¦³¹ê§@Cloneªº¤èªk¡C
>Clone¨Ï¥Îcovariant return types¬O¼Ð·Çªº¥Îªk¡A
>PC2§A§â¥¦·í§@Base¨Ï¥Î¤]§¹¥þ¨S°ÝÃD¡CÃö¤°»ò¥Îªk¤£·í?
>¦³Ãömust©MÂ૬ªº°Q½×°÷¦h¤F¡A§Ú´£¥X¤F«Ü¦h¦U­Ó¨¤«×ªºÆ[ÂI(ÁÙ¦³¥¿¦¡¤å¥ó)¡A½Ð°Ý§A´£¥X¤F¤°»ò?
>´Nª½±µ¤Uµ²½×¬O§O¤HªºÆ[ÂIüW®t?
>¤Ï¥¿must¯u¥¿ªº»Ý¨D§Ú¬O·P¨ü¤£¨ì¡Aclone¤]¤£¬O¦nªF¦è(§Ú­Ì³£¬O¥HlayerºÞ²z¶¥¼hª«¥ó«Ø¥ß©M¦æ¬°³\¥i)¡A¨º­Óassert¤]¬O«d¨¬¾A¼i¡C
>¡A¬JµL¦@ÃÑ¡A°Q½×´N¨ì¦¹§a¡C
>
>Base *Fun(Base *pBase)
>{
> return pBase->Clone();
>}

Clone() ¬O Prototype pattern ªº¥D­n¥\¯à¡A¥»¨Ó´N¬O¥Ñ Base ªº¨¤«×¨Ó³B²z¡A§A¥i¥H¥ý¥h¤F¸Ñ¤@¤U Prototype pattern
§@ªÌ : sunyear(coco) VC++¨ô¶V±M®aC++³»¦y°ª¤â¶K¤å¶W¹L2000«h
[ ¶K¤å 2421 | ¤H®ð 1485 | µû»ù 6060 | µû»ù/¶K¤å 2.5 | °e¥Xµû»ù 5 ¦¸ ] 
[ µ¹­ÓÆg ]  [ µ¹­ÓÆg ]  [ ¦^À³¥»¤å ]  [ µoªí·s¤å ]  [ ¦^¤W­¶ ] [ ¦^°Q½×°Ï¦Cªí ] [ ¦^ª¾ÃѤJ¤f ]
2017/12/20 ¤U¤È 10:08:16
>Clone() ¬O Prototype pattern ªº¥D­n¥\¯à¡A¥»¨Ó´N¬O¥Ñ Base ªº¨¤«×¨Ó³B²z¡A§A¥i¥H¥ý¥h¤F¸Ñ¤@¤U Prototype pattern
±qOO(P)¨ìÂ૬¡A³£ÀH«K¥á­Ó¦Wµü¡AÅý§Ú©é©R¸Ñ»¡¡C­n§O¤HÀ°§AŪ®Ñ¡A¤]¤£¥Î¦Ñ¬O¨Ó³o¤@©Û¡A¦n¶Ü?
covariant return type ±`¦bPrototype pattern¤@°_½Íªº¡Aclone return variant type ´N¤£¬OPrototype pattern¤F¶Ü?
¨º¤]¬O¼Ð·Ç¥Î¼gªk(¤§¤@)
return base(interface)¡A¾Þ§@°ò¥»¤W¥þ¥Ñbase(interface)¶i¦æ¡A³o¬O¤ñ¸û²z·QªºPrototype pattern¡A§Úª¾¹D°Ú¡I
«e­±¤£¬O»¡¤F¶Ü¨Ï¥Îcovariant type¥Øªº¥u¦b©óÀ³§A¤£±¡¤§½Ð¡A¦h­ÓÀˬdDerived¬O§_¦³¹ê§@Clone¦Ó¤v¡C
µ{¦¡­n¥þ³¡¨Ï¥Îbase(interface)¥h¾Þ§@¡A¨S¤Hµ¹§A­­¨î¡C³o¹H¤Ï¤F¤°»ò Base ªº¨¤«×?
¤£­n§A¦Û¤v§âBaseÂ૬¦^¨ÓDerived°µ¨Ò¤l¡A«ÜOK¡A§O¤HClone¦^¨ÓDerived´N§ì¨g¡C
¨âªÌ¥Øªº³£¬O¤@¼Ëªº¦bÀˬd­l¥ÍÃþ§O¬O§_¦³¹ê§@clone¡A¥u¬O¤@­Ó¬O°ÊºAÀˬd¡A¤@­Ó¬OÀRºAÀˬd¡C
¦Ü©ó³oºØÀˬd¡A§Aıªº«Ü­«­n¡A§Úı±o¨S·N¸q¦Ó¤v¡C
§@ªÌ : cxxlman(CxxlMan) C++Àu¨q¦n¤â¶K¤å¶W¹L1000«h
[ ¶K¤å 1036 | ¤H®ð 3227 | µû»ù 1260 | µû»ù/¶K¤å 1.22 | °e¥Xµû»ù 27 ¦¸ ] 
[ µ¹­ÓÆg ]  [ µ¹­ÓÆg ]  [ ¦^À³¥»¤å ]  [ µoªí·s¤å ]  [ ¦^¤W­¶ ] [ ¦^°Q½×°Ï¦Cªí ] [ ¦^ª¾ÃѤJ¤f ]
2017/12/21 ¤W¤È 10:16:13
ÁÙ¬O¥h¬Ý¬Ý§a¡A§_«h¯Ê¥F·¾³q°ò¦¡A¤@ª½Âû¦PÀnÁ¿¦U»¡¦U¸Ü¤]¤£¬O¿ìªk
§@ªÌ : cxxlman(CxxlMan) C++Àu¨q¦n¤â¶K¤å¶W¹L1000«h
[ ¶K¤å 1036 | ¤H®ð 3227 | µû»ù 1260 | µû»ù/¶K¤å 1.22 | °e¥Xµû»ù 27 ¦¸ ] 
[ µ¹­ÓÆg ]  [ µ¹­ÓÆg ]  [ ¦^À³¥»¤å ]  [ µoªí·s¤å ]  [ ¦^¤W­¶ ] [ ¦^°Q½×°Ï¦Cªí ] [ ¦^ª¾ÃѤJ¤f ]
2017/12/22 ¤U¤È 07:13:29
¥Î¤@­Ó½d¨Ò°µ­ÓÁ`µ²¡A¤]·PÁ coco ´£¨Ñªº assert¡A¦b C++ ¨S¦³´£¨Ñ must ¤§¤U¡AÁٯవ¨ìÃþ¦üªº®ÄªG¡A
Åýµ{¦¡Â²¼ä¤£¤Ö¡A¤]¥Ñ¦¹¬Ý¥X must ªº¶·­n©Ê

½d¨Ò¥D­n®i¥Ü prototype pattern ¤Î visitor pattern ªº¬[ºc¡A¤£¹L visitor pattern °µ¤F§ï¨}¡A¥i¥H
±Ä¥Î ClassID °µ°t¹ï¡A¥i¥H¦b°õ¦æ®É´Á°µ¸û¾÷°Êªº³B²z¡A¦ý¬°¤F´î¤Ö½g´T©MÃø«×¡AÁÙ¬O¼g¦º¥¼°µ¸û¾÷°Êªº
³B²z

class C ¬O¬°¤Fªí²{¥¼±j¨î¹ê§@ªº«áªG¡A¦³´X³B°µ¤F remark¡A§â remark ªº¦a¤è«ì´_¡A´N¥i¥¿±`°õ¦æ

#include <map>
#include <memory>
#include <string>
#include <assert.h>¡@¡@ /* assert */
#include <typeinfo>¡@¡@ /* assert */
#include <iostream>

using namespace std;

// ´¡¥óªºÃѧO½X
#define Base_ClassID u8"14432A2FAECE4DA7A33CDA7472FB61DE"
#define A_ClassID u8"9EED77B5BD97404B85A390E2806FE435"
#define B_ClassID u8"11B5DCB493744F9B9A7C14343CF609A6"
#define C_ClassID u8"20DB108E78284B8390D258A4626523AC"

class Visitor;
class Base;

class Prototype
{
¡@virtual Prototype *Clone() const = 0;
public:
};

class Acceptor
{
¡@virtual string GetClassID() const = 0;
public:

¡@virtual void Accept(Visitor *v) = 0;

¡@friend class Visitor;
};

class Visitor
{
protected:
¡@string GetClassID(Acceptor *pAcceptor) const
¡@{
¡@¡@return pAcceptor->GetClassID();
¡@}

¡@virtual void Visit(Acceptor *pAcceptor) = 0;
public:
¡@
¡@friend class Base;
};

class Base:public Prototype, public Acceptor
{
¡@virtual string GetClassID() const override
¡@{
¡@¡@// ¤£­ã³\ Base ³QÄ~©Ó¡A«o¨S¦³Âмg GetClassID()
¡@¡@assert(strcmp(typeid(Base).name(), typeid(*this).name()) == 0);
¡@¡@return Base_ClassID;
¡@}
¡@virtual void Accept(Visitor *v) override final
¡@{
¡@¡@v->Visit(this);
¡@}

public:
¡@virtual Base *Clone() const override
¡@{
¡@¡@// ¤£­ã³\ Base ¨S¦³³QÄ~©Ó¡AÁÙ°õ¦æ Clone()
¡@¡@assert(strcmp(typeid(Base).name(), typeid(*this).name()) != 0);
¡@¡@return new Base(*this);
¡@}
};
§@ªÌ : cxxlman(CxxlMan) C++Àu¨q¦n¤â¶K¤å¶W¹L1000«h
[ ¶K¤å 1036 | ¤H®ð 3227 | µû»ù 1260 | µû»ù/¶K¤å 1.22 | °e¥Xµû»ù 27 ¦¸ ] 
[ µ¹­ÓÆg ]  [ µ¹­ÓÆg ]  [ ¦^À³¥»¤å ]  [ µoªí·s¤å ]  [ ¦^¤W­¶ ] [ ¦^°Q½×°Ï¦Cªí ] [ ¦^ª¾ÃѤJ¤f ]
2017/12/22 ¤U¤È 07:14:59
/***/
class CustomVisitor
{
public:
¡@virtual void Visit(Acceptor *pAcceptor) const = 0;
};

class VisitorManager :public Visitor
{
¡@map<string, shared_ptr<CustomVisitor> > m_CustomVisitorMap;

¡@virtual void Visit(Acceptor *pAcceptor) override
¡@{
¡@¡@string ID = GetClassID(pAcceptor);
¡@¡@shared_ptr<CustomVisitor> CustomVisitor_Ptr = m_CustomVisitorMap[ID];

¡@¡@if (CustomVisitor_Ptr)
¡@¡@¡@CustomVisitor_Ptr->Visit(pAcceptor);
¡@¡@else
¡@¡@¡@cout << "ª«¥ó§ä¤£¨ì¬ÛÀ³ªº CustomVisitor" << endl;
¡@}
public:
¡@VisitorManager();
};

class ObjPool
{
¡@map<string, shared_ptr<Base> > m_BaseMap;
public:
¡@ObjPool();
¡@Base *Get(string ClassID)
¡@{
¡@¡@shared_ptr<Base> Src = m_BaseMap[ClassID];
¡@¡@if (Src)
¡@¡@¡@return Src->Clone();
¡@¡@else
¡@¡@¡@return nullptr;
¡@}
};

/***/
class BaseVisitor :public CustomVisitor
{
¡@virtual void Visit(Acceptor *pAcceptor) const override
¡@{
¡@¡@Base *pBase = static_cast<Base*>(pAcceptor);
¡@¡@cout << "Base ³Q Clone¡A½ÐÀˬd..." << endl;
¡@}
public:
};

class A :public Base
{
¡@string m_Name{ "class A" };

¡@virtual string GetClassID() const override
¡@{
¡@¡@// ¤£­ã³\ A ³QÄ~©Ó¡A«o¨S¦³Âмg GetClassID()
¡@¡@assert(strcmp(typeid(A).name(), typeid(*this).name()) == 0);
¡@¡@return A_ClassID;
¡@}
¡@virtual A *Clone() const override
¡@{
¡@¡@// ¤£­ã³\ A ³QÄ~©Ó¡A«o¨S¦³Âмg Clone()
¡@¡@assert(strcmp(typeid(A).name(), typeid(*this).name()) == 0);
¡@¡@return new A(*this);
¡@}

public:
¡@void SayHI()
¡@{
¡@¡@cout << "HI! My name is " << m_Name << endl;
¡@}
};

class B :public Base
{
¡@string m_Name{ "class B" };

¡@virtual string GetClassID() const override
¡@{
¡@¡@// ¤£­ã³\ B ³QÄ~©Ó¡A«o¨S¦³Âмg GetClassID()
¡@¡@assert(strcmp(typeid(B).name(), typeid(*this).name()) == 0);
¡@¡@return B_ClassID;
¡@}
¡@virtual B *Clone() const override
¡@{
¡@¡@// ¤£­ã³\ B ³QÄ~©Ó¡A«o¨S¦³Âмg Clone()
¡@¡@// assert(strcmp(typeid(B).name(), typeid(*this).name()) == 0); // remark
¡@¡@return new B(*this);
¡@}

public:
¡@void SayHello()
¡@{
¡@¡@cout << "Hello! My name is " << m_Name << endl;
¡@}
};
§@ªÌ : cxxlman(CxxlMan) C++Àu¨q¦n¤â¶K¤å¶W¹L1000«h
[ ¶K¤å 1036 | ¤H®ð 3227 | µû»ù 1260 | µû»ù/¶K¤å 1.22 | °e¥Xµû»ù 27 ¦¸ ] 
[ µ¹­ÓÆg ]  [ µ¹­ÓÆg ]  [ ¦^À³¥»¤å ]  [ µoªí·s¤å ]  [ ¦^¤W­¶ ] [ ¦^°Q½×°Ï¦Cªí ] [ ¦^ª¾ÃѤJ¤f ]
2017/12/22 ¤U¤È 07:16:48
class C :public B
{
¡@int Age{ 100 };

¡@virtual string GetClassID() const override
¡@{
¡@¡@// ¤£­ã³\ C ³QÄ~©Ó¡A«o¨S¦³Âмg GetClassID()
¡@¡@assert(strcmp(typeid(C).name(), typeid(*this).name()) == 0);
¡@¡@return C_ClassID;
¡@}

  // remark
¡@/*
¡@virtual C *Clone() const override
¡@{
¡@¡@// ¤£­ã³\ B ³QÄ~©Ó¡A«o¨S¦³Âмg Clone()
¡@¡@assert(strcmp(typeid(C).name(), typeid(*this).name()) == 0);
¡@¡@return new C(*this);
¡@}
¡@*/
public:
¡@void HowOld()
¡@{
¡@¡@cout << "I am " << 50 << " years old" << endl;
¡@}
};

class AVisitor :public CustomVisitor
{
¡@virtual void Visit(Acceptor *pAcceptor) const override
¡@{¡@¡@
¡@¡@// assert(strcmp(typeid(A).name(), typeid(*pAcceptor).name()) == 0);

¡@¡@A *pA = static_cast<A*>(pAcceptor);
¡@¡@pA->SayHI();
¡@¡@cout << "A ½Æ»s¦¨¥\..." << endl;
¡@}
public:
};

class BVisitor :public CustomVisitor
{
¡@virtual void Visit(Acceptor *pAcceptor) const override
¡@{
¡@¡@// assert(strcmp(typeid(B).name(), typeid(*pAcceptor).name()) == 0);

¡@¡@B *pB = static_cast<B*>(pAcceptor);
¡@¡@pB->SayHello();
¡@¡@cout << "B ½Æ»s¦¨¥\..." << endl;
¡@}
public:
};

class CVisitor :public CustomVisitor
{
¡@virtual void Visit(Acceptor *pAcceptor) const override
¡@{
¡@¡@// assert(strcmp(typeid(C).name(), typeid(*pAcceptor).name()) == 0);

¡@¡@C *pC = static_cast<C*>(pAcceptor);
¡@¡@pC->SayHello();
¡@¡@pC->HowOld();
¡@¡@cout << "C ½Æ»s¦¨¥\..." << endl;
¡@}
public:
};
§@ªÌ : cxxlman(CxxlMan) C++Àu¨q¦n¤â¶K¤å¶W¹L1000«h
[ ¶K¤å 1036 | ¤H®ð 3227 | µû»ù 1260 | µû»ù/¶K¤å 1.22 | °e¥Xµû»ù 27 ¦¸ ] 
[ µ¹­ÓÆg ]  [ µ¹­ÓÆg ]  [ ¦^À³¥»¤å ]  [ µoªí·s¤å ]  [ ¦^¤W­¶ ] [ ¦^°Q½×°Ï¦Cªí ] [ ¦^ª¾ÃѤJ¤f ]
2017/12/22 ¤U¤È 07:17:14

ObjPool::ObjPool()
{
¡@// µù¥U©Ò¦³ Base ªº Derived
¡@m_BaseMap[string(Base_ClassID)] = shared_ptr<Base >(new Base);
¡@m_BaseMap[string(A_ClassID)] = shared_ptr<Base >(new A);
¡@m_BaseMap[string(B_ClassID)] = shared_ptr<Base >(new B);
¡@m_BaseMap[string(C_ClassID)] = shared_ptr<Base >(new C);
}

VisitorManager::VisitorManager()
{
¡@// µù¥U©Ò¦³ CustomVisitor ªº Derived
¡@m_CustomVisitorMap[string(Base_ClassID)] = shared_ptr<CustomVisitor >(new BaseVisitor);¡@
¡@m_CustomVisitorMap[string(A_ClassID)] = shared_ptr<CustomVisitor >(new AVisitor);
¡@m_CustomVisitorMap[string(B_ClassID)] = shared_ptr<CustomVisitor >(new BVisitor);
¡@m_CustomVisitorMap[string(C_ClassID)] = shared_ptr<CustomVisitor >(new CVisitor);
}

int main()
{
¡@ObjPool MyObjPool;
¡@VisitorManager MyVisitorManager;¡@

¡@shared_ptr<Base> Obj_Ptr(MyObjPool.Get(string(A_ClassID)));
¡@shared_ptr<Acceptor> Acceptor_Ptr = static_pointer_cast<Acceptor>(Obj_Ptr);
¡@Acceptor_Ptr->Accept(&MyVisitorManager);

¡@cout << endl;
¡@Obj_Ptr = shared_ptr<Base>( MyObjPool.Get(string( C_ClassID )) );
¡@Acceptor_Ptr = static_pointer_cast<Acceptor>(Obj_Ptr);
¡@Acceptor_Ptr->Accept(&MyVisitorManager);¡@

¡@return 0;
}

 ªO¥D : simula
 > C++ - °Q½×°Ï
 - ³Ìªñ¼öªù°ÝµªºëµØ¶°
 - ¥þ³¡¾ú¥v°ÝµªºëµØ¶°
 - C++ - ª¾ÃÑ®w
¡@ ¡½ ¥þ¯¸³Ì·sPost¦Cªí
¡@ ¡½ §Úªº¤å³¹¦¬ÂÃ
¡@ ¡½ §Ú³Ì·Rªº§@ªÌ
¡@ ¡½ ¥þ¯¸¤å³¹¦¬ÂñƦæº]
¡@ ¡½ ¥þ¯¸³Ì·R§@ªÌ±Æ¦æº]
¡@ ¡½  ¤ë¼öªù¥DÃD
¡@ ¡½  ©u¼öªù¥DÃD
¡@ ¡½  ¼öªù¥DÃDTop 20
¡@ ¡½  ¥»°ÏPost±Æ¦æº]
¡@ ¡½  ¥»°Ïµû»ù±Æ¦æº]
¡@ ¡½  ¥þ¯¸±M®a¦W¤Hº]
¡@ ¡½  ¥þ¯¸Post±Æ¦æº]
¡@ ¡½  ¥þ¯¸µû»ù±Æ¦æº]
¡@ ¡½  ¥þ¯¸¤H®ð±Æ¦æº]
 ½Ð¿é¤JÃöÁä¦r 
  ¶}©l·j´M
 
Top 10
µû»ù±Æ¦æ
C++
1 Raymond 13050 
2 «C­m 4760 
3 simula 4690 
4 coco 4030 
5 ¥Õ¦Ñ¹«(Gary) 3670 
6 ozzy 2540 
7 Ben 2250 
8 Anderson 1960 
9 windblown 1650 
10 Kenny 1560 
C++
¡@ ±M®aµ¥¯Å µû»ù ¡@
¡@ ¤@¥N©v®v 10000 ¡@
¡@ Ãm¥@©_¤~ 5000 ¡@
¡@ ³»¦y°ª¤â 3000 ¡@
¡@ ¨ô¶V±M®a 1500 ¡@
¡@ Àu¨q¦n¤â 750 ¡@
Microsoft Internet Explorer 6.0. Screen 1024x768 pixel. High Color (16 bit).
2000-2019 µ{¦¡³]­p­Ñ¼Ö³¡ http://www.programmer-club.com.tw/
0.8125