2013ÄêϰëÄêÏÂÎç ³ÌÐòÔ± ÊÔÌâ¼°´ð°¸Óë½âÎö-Èí¿¼¿¼ÊÔÕæÌâ-°¸Àý·ÖÎö ÏÂÔØ±¾ÎÄ

È«¹ú¼ÆËã»ú¼¼ÊõÓëÈí¼þרҵ¼¼Êõ×ʸñ£¨Ë®Æ½£©¡¢¿¼ÊÔ¿â

china_nejcer

º¯Êý£¬ÆäËûCarºÍTruckÖ»ÓÐrun()º¯Êý¡£Òò´Ë£¬ÓÃforÑ­»·¶Ôÿ¸öv[i]£¬Åж¨ÊÇ·ñÊÇEmergencyÀàÐÍ£¬¼´ÊÇ·ñ¼Ì³ÐÁËEmergency,µ÷ÓÃʱ¶¯Ì¬°ó¶¨Ã¿¸öÊý×éÔªËØµÄʵ¼ÊÀàÐÍ£¬ÐèҪͨ¹ý¶¯Ì¬ÀàÐÍת»»£º

Emergency*ev = dynamic_cast(v[i]);

Èç¹ûת»»³É¹¦£¬ËµÃ÷ÊÇEmergencyµÄ×ÓÀ࣬ʵÏÖÁËrunRedLight()£¬¿ÉÒÔµ÷ÓÃrunRedLight()£¬·ñÔòµ÷ÓÃrun():

If (ev != 0) ev_->runredlight(); Else v[]->run();

Ö÷¿ØÂß¼­´úÂëÔÚmainº¯ÊýÖÐʵÏÖ¡£³õʼ»¯TraficControlSystem£¬ÓÃtcs±íʾ£¬µ÷ÓÃtcsµÄadd()º¯ÊýÌí¼Ó¾ßÌåµÄ½»Í¨¹¤¾ß£¬ÕâÀï»á×Ô¶¯ÏòÉÏתÐͳÉΪVehicleÀàÐÍ£¬µ÷ÓÃcontrol()¶Ô¸÷³µÁ¾½øÐпØÖÆ£¬µ÷ÓÃshutDown()ϵͳ¹Ø±Õ£¬Ê¹ÓÃÍêÊý×é¶ÔÏóÖ®ºó£¬ÐèÒªÓÃdelete²Ù×÷½øÐÐÊͷŶÔÏ󣬼´deletetcs;

Òò´Ë£¬¿Õ(1)ºÍ¿Õ(2)ÐèÒª¶¨Òå´¿Ð麯ÊýisEmergent()ºÍrunRedLight()£¬Ô­ÐÍÖÐ=0ÌâÄ¿´úÂëÖмº¾­¸ø³ö£¬ËùÒÔ¿Õ(1)ºÍ¿Õ(2)·Ö±ðΪ¡°virtualboolisEmergent()¡±ºÍ¡°virtualvoidrunRedLight()¡±;¿Õ(3)ÐèÒª¼Ì³ÐCarºÍEmergency,¼´¡°public Car,public Emergency¡±£»¿Õ(4)Òª·µ»ØÓ¦¼±³µÁ¾¶ÔÏóµÄ״̬£¬¼´¡°this->isEmergency¡±£»¿Õ(5)´¦¶¯Ì¬ÀàÐÍת»»³É¹¦µÄ¶ÔÏóev;¿Õ(6)´¦ÎªÆÕͨ³µÁ¾¶ÔÏóv[i]¡£

ÊÔÌâÁù

¡¾ËµÃ÷¡¿

ijӦ¼±½»Í¨¿ØÖÆÏµÍ³(TraficControlSystem)ÔÚºìµÆÊ±¿ØÖƸ÷Àà³µÁ¾(Vehicle)µÄͨÐУ¬ÆäÀàͼÈçͼ6-1Ëùʾ£¬ÔÚ½ô¼±×´Ì¬ÏÂÓ¦¼±³µÁ¾ÔÚºìµÆÊ±¿ÉͨÐУ¬ÆäÓà³µÁ¾°´Õý³£¹æÔòͨÐС£

ÏÂÃæµÄJava´úÂëʵÏÖÒÔÉÏÉè¼Æ£¬ÇëÍêÉÆÆäÖеĿÕȱ¡£

2013ÄêϰëÄêÏÂÎç-³ÌÐòÔ±-ÏÂÎçÊÔÌâ¼°´ð°¸Óë½âÎö£¨Èí¿¼ÕæÌâ-°¸Àý·ÖÎö£© 13 / 17

È«¹ú¼ÆËã»ú¼¼ÊõÓëÈí¼þרҵ¼¼Êõ×ʸñ£¨Ë®Æ½£©¡¢¿¼ÊÔ¿â

china_nejcer

¡¾Java´úÂë¡¿

2013ÄêϰëÄêÏÂÎç-³ÌÐòÔ±-ÏÂÎçÊÔÌâ¼°´ð°¸Óë½âÎö£¨Èí¿¼ÕæÌâ-°¸Àý·ÖÎö£© 14 / 17

È«¹ú¼ÆËã»ú¼¼ÊõÓëÈí¼þרҵ¼¼Êõ×ʸñ£¨Ë®Æ½£©¡¢¿¼ÊÔ¿â

china_nejcer

ÔĶÁÒÔÉÏ˵Ã÷ºÍJava´úÂ룬Ìî³ä³ÌÐòÖеĿÕȱ£¬½«½â´ðÌîÈë´ðÌâÖ½µÄ¶ÔÓ¦À¸ÄÚ¡£

¡¾²Î¿¼´ð°¸¡¿

(1)¡¢booleanisEmergent() (2)¡¢voidrunRedLight()

(3)¡¢extendsCarimplementsEmergency (4)¡¢this.isEmergency (5)¡¢(Emergency)v[i] (6)¡¢v[i] ¡¾´ð°¸½âÎö¡¿

±¾Ì⿼–ËJavaÓïÑÔ³ÌÐòÉè¼ÆµÄÄÜÁ¦£¬Éæ¼°Àà¡¢¶ÔÏó¡¢·½·¨µÄ¶¨ÒåºÍÏà¹Ø²Ù×÷¡£ÒªÇó¿¼Éú¸ù¾Ý¸ø³öµÄ°¸ÀýºÍÖ´Ðйý³Ì˵Ã÷£¬ÈÏÕæÔĶÁÀíÇå³ÌÐò˼·£¬È»ºóÍê³ÉÌâÄ¿¡£

¸ù¾ÝÌâĿ˵Ã÷£¬ÒÔ½»Í¨¿ØÖÆÏµÍ³(TraficControlSystem)Ϊ±³¾°£¬±¾ÌâÄ¿ÖÐÉæ¼°µÄ¸÷Àà³µÁ¾ºÍÊÇ·ñÓ¦¼±×´Ì¬ÏÂÔÚºìµÆÊ±µÄͨÐÐÇé¿ö¡£¸ù¾Ý˵Ã÷½øÐÐÉè¼Æ£¬ÌâÄ¿¸ø³öÁËÀàͼ(ͼ6-1ÀàͼËùʾ)¡£

ͼÖи¸ÀàVehicle,´ú±í½»Í¨¹¤¾ß£¬Éè¼ÆÎª³éÏóÀà¡£ÔÚJavaÓÃabstract¹Ø¼ü×Ö±íʾ£¬±íʾÐÐʻijһ¸ö¾ßÌåµÄ½»Í¨¹¤¾ß¡£Vehicle°üº¬Ò»¸ö³éÏó·½·¨£ºmn()£¬·½·¨ºóûÓÐʵÏÖ£¬Ö±½ÓÓÃ;À´±íʾ³éÏó·½·¨£¬±íʾÐÐÊ»µÄ·½·¨ÓɾßÌå×ÓÀàÐÍÍê³É£¬ËùÒÔVehicleµÄmn()Ϊһ¸ö³éÏó·½·¨£º

Abstract void run();

2013ÄêϰëÄêÏÂÎç-³ÌÐòÔ±-ÏÂÎçÊÔÌâ¼°´ð°¸Óë½âÎö£¨Èí¿¼ÕæÌâ-°¸Àý·ÖÎö£© 15 / 17

È«¹ú¼ÆËã»ú¼¼ÊõÓëÈí¼þרҵ¼¼Êõ×ʸñ£¨Ë®Æ½£©¡¢¿¼ÊÔ¿â

china_nejcer

CarºÍTruck¶¼¼Ì³Ð×ÔVehicleµÄÁ½¸ö×ÓÀàÐÍ£¬ËùÒÔËûÃǶ¼¼Ì³ÐÁËVehicleµÄrun()·½·¨£¬¸÷×ÔÐÐÊ»·½Ê½ÓÐËù²»Í¬£¬ËùÒÔ¶¼¸²¸ÇÁËVehicleµÄrun()·½·¨£¬²¢¼ÓÒÔʵÏÖ£º

Void run(){/*´úÂëÂÔ*/}

CarµÄÁ½¸ö×ÓÀàÐÍPoliceCarºÍAmbulance¶¼¼Ì³Ð×ÔCar£¬´Ó¶øPoliceCarºÍAmbulanceÒ²¶¼¼Ì³ÐÁËCarÖеÄrun()·½·¨¡£TruckµÄ×ÓÀàFireEngineÒ²¼Ì³ÐÁËTruckµÄrun()·½·¨¡£ ͼ6-1ÖÐEmergencyÔÚJavaÖвÉÓýӿÚʵÏÖ£¬ÆäÖÐÔ¼¶¨ºìµÆÊ±Í¨ÐеÄÏà¹Ø½Ó¿ÚΪ£ºisEmergent()ºÍrunRedLight()¡£

isEmergent()½Ó¿ÚÔ¼¶¨Ó¦¼±³µÁ¾·µ»Ø×ÔÉí½ô¼±Çé¿ö״̬£¬ÓÃboolÀàÐ͵ÄisEmergency±íʾ£ºthis.isEmergency,ÆäÖµÔÚ½ô¼±Çé¿öÏÂΪtrue,·Ç½ô¼±Çé¿öÏÂΪfalse¡£runRedLight()½Ó¿ÚÔ¼¶¨Ó¦¼±³µÁ¾ÔÚºìµÆÊ±ÈçºÎͨÐÐ(isEmergencyΪtrue,ÔòͨÐУ¬isEmergencyΪfalse£¬ºÍÆÕͨ³µÁ¾Ò»ÑùͨÐÐ)¡£ÊµÏÖEmergencyµÄÀàÓÐPoliceCar¡¢AmbulanceºÍFireEngine£¬ËùÒÔÔÚÕâÈý¸öÀàÖж¼ÒªÊµÏÖEmergencyÖж¨ÒåµÄ½Ó¿Ú¡£ÔÚJavaÖУ¬ÊµÏÖ½Ó¿ÚÓÃimplements¹Ø¼ü×Ö£¬ºóÃæ¼ÓÉÏËùҪʵÏֵĽӿڣ¬¼´:

classname ieplements interfacename

½»Í¨¿ØÖÆÀàTraficControlSystem¶ÔÔËÐеĽ»Í¨¹¤¾ß½øÐпØÖÆ£¬ËùÓн»Í¨¹¤¾ßÓÃVehicleÊý×év±íʾ£»numVehicles±íʾ½»Í¨¹¤¾ßÊýÁ¿£»controlº¯Êý½øÐпØÖÆÔÚ½ô¼±Çé¿öÏÂÓ¦¼±³µÁ¾ºìµÆÍ¨ÐУ¬ÆäËûÇé¿ö°´³£¹æÍ¨ÐУ»add()±íʾÓгµÁ¾¼ÓÈëϵͳ£¬shutDown()±íʾϵͳ¹Ø±Õ¡£VehicleµÄ×ÓÀà¾ßÌåÀàÐÍÓÐCar¡¢Truck¡¢PoliceCar¡¢AmbulanceºÍFireEngine£¬ËùÒÔv[]Êý×éÖжÔÏóÓÐÕâЩÀàÐ͵ĶÔÏ󣬼ÓÈëv[]ʱ»á×Ô¶¯ÏòÉÏתÐͳÉΪVehicleÀàÐÍ£¬Emergency½Ó¿ÚµÄÓ¦¼±³µÁ¾ÓÐrunRedLight()·½·¨£¬ÆäËûCarºÍTruckÖ»ÓÐrun()·½·¨¡£Òò´Ë£¬ÓÃforÑ­»·ÖжÔÿ¸öv[i]£¬Åж¨ÊÇ·ñÊÇEmergencyÀàÐ͵ÄʵÀý£¬¼´ÊÇ·ñʵÏÖÁËEmergency¡£JavaÖÐÅжÏÒ»¸ö¶ÔÏóÊÇ·ñÊÇij¸öÀàÐ͵ÄʵÀýÓÃinstanceof¹Ø¼ü×Ö¡£¼´£ºv[i]instanceofEmergency,Èç¹ûÊÇ£¬ËµÃ÷ÊÇÓ¦¼±³µÁ¾£¬½Ó×ÅÅж¨Ó¦¼±³µÁ¾µÄ״̬£¬ÔÚÅж¨Ö®Ç°ÏÈÒª½«Ó¦¼±³µÁ¾½øÐÐÏòÏÂתÐÍ£¬JavaÖÐÏòÏÂתÐÍÖ±½ÓÔÚ¶ÔÏóǰ¼ÓÉÏÓÃÀ¨ºÅÀ¨ÆðÀ´µÄת»»µÄÄ¿±êÀàÐͼ´¿É£¬¼´£º((Emergency)v[i]).isEmergent()£¬Èç¹ûÅж¨ÎªÕ棬ִÐÐrunRedLight(),Åж¨²»³É¹¦£¬Ôòµ÷ÓÃrun()£¬µ÷ÓÃʱ¶¯Ì¬°ó¶¨Ã¿¸öÊý×éÔªËØµÄʵ¼ÊÀàÐÍ£¬ ÐèҪͨ¹ý¶¯Ì¬ÀàÐÍת»»²¢µ÷ÓÃnmRedLight():

If (v[i] instanceof emergency && ((emergency)v[i]).isemergent()) { ((emergency)v[i]}.runredlight(); }else V[i]->run();

2013ÄêϰëÄêÏÂÎç-³ÌÐòÔ±-ÏÂÎçÊÔÌâ¼°´ð°¸Óë½âÎö£¨Èí¿¼ÕæÌâ-°¸Àý·ÖÎö£© 16 / 17