C_and_CPP °æ (¾«»ªÇø)
·¢ÐÅÈË: seaboy (...seaboy), ÐÅÇø: C_and_CPP
±ê Ìâ: Ìõ¿î30: ±ÜÃâÕâÑùµÄ³ÉÔ±º¯Êý£ºÆä·µ»ØÖµÊÇÖ¸Ïò³ÉÔ±µÄ·
·¢ÐÅÕ¾: ¹þ¹¤´ó×϶¡Ïã (2003Äê11ÔÂ19ÈÕ12:11:23 ÐÇÆÚÈý), Õ¾ÄÚÐżþ
Ìõ¿î30: ±ÜÃâÕâÑùµÄ³ÉÔ±º¯Êý£ºÆä·µ»ØÖµÊÇÖ¸Ïò³ÉÔ±µÄ·ÇconstÖ¸Õë»òÒýÓ㬵«³ÉÔ±µÄ·ÃÎÊ
¼¶±ÈÕâ¸öº¯ÊýÒªµÍ
ʹһ¸ö³ÉԱΪprivate»òprotectedµÄÔÒòÊÇÏëÏÞÖÆ¶ÔËüµÄ·ÃÎÊ£¬¶ÔÂð£¿ÀÍÀ۵ıàÒëÆ÷Òª·Ñ
¾ÅÅ£¶þ»¢Ö®Á¦À´È·±£ÄãÉèÖõķÃÎÊÏÞÖÆ²»±»ÆÆ»µ£¬¶Ô²»¶Ô£¿ËùÒÔ£¬Ð´¸öº¯ÊýÀ´ÈÃÓû§ËæÒâ
µØ·ÃÎÊÊÜÏ޵ijÉԱû¶à´óÒâÒ壬¶Ô²»¶Ô£¿Èç¹ûÄãȷʵÈÏΪÓÐÒâÒ壬ÄÇôÇë·´¸´ÔĶÁ±¾¶Î£¬
Ö±µ½Äã²»ÕâÑùÈÏΪΪֹ¡£
ʵ¼Ê±à³ÌÖкÜÈÝÒ×Î¥·´ÕâÌõ¹æÔò£¬ÏÂÃæÊǸöÀý×Ó£º
class address { ... }; // ijÈ˾ÓסÔÚ´Ë
class person {
public:
address& personaddress() { return address; }
...
private:
address address;
...
};
³ÉÔ±º¯ÊýpersonaddressΪµ÷ÓÃÕßÌṩµÄÊÇperson¶ÔÏóÖÐËù°üº¬µÄaddress¶ÔÏ󣬵«ÊÇ£¬Ò²
ÐíÊdzöÓÚЧÂÊÉϵĿ¼ÂÇ£¬·µ»Ø½á¹û²ÉÓõÄÊÇÒýÓ㬶ø²»ÊÇÖµ£¨¼ûÌõ¿î22£©¡£Òź¶µÄÊÇ£¬Õâ
¸ö³ÉÔ±º¯ÊýµÄ×ö·¨ÓÐÎ¥µ±³õ½«person::addressÉùÃ÷ΪprivateµÄ³õÖÔ£º
person scott(...); // Ϊ¼ò»¯Ê¡ÂÔÁ˲ÎÊý
address& addr = // ¼ÙÉèaddrΪȫ¾Ö±äÁ¿
scott.personaddress();
ÏÖÔÚ£¬È«¾Ö¶ÔÏóaddr³ÉΪÁËscott.addressµÄÁíÒ»¸öÃû×Ö£¬ÀûÓÃËü¿ÉÒÔËæÒâ¶Áдscott.addr
ess¡£Êµ¼ÊÉÏ£¬scott.address²»ÔÙΪprivate£¬¶øÊÇpublic£¬·ÃÎʼ¶ÌáÉýµÄ¸ùÔ´ÔÚÓÚ³ÉÔ±º¯
Êýpersonaddress¡£µ±È»£¬±¾ÀýÖиø³öµÄaddress µÄ·ÃÎʼ¶ÊÇprivate£¬Èç¹ûÊÇprotected£¬
Çé¿öÍêȫһÑù¡£
²»½ö½öÊÇÒýÓã¬Ö¸ÕëÒ²»á²úÉúÒÔÉÏÎÊÌâ¡£ÏÂÃæµÄÀý×ÓºÍÉÏÃæÏàͬ£¬Ö»²»¹ýÕâ´ÎÓõÄÊÇÖ¸Õë
£º
class person {
public:
address * personaddress() { return &address; }
...
private:
address address;
...
};
address *addrptr =
scott.personaddress(); // ÎÊÌâºÍÉÏÃæÒ»Ñù
¶øÇÒ£¬¶ÔÓÚÖ¸ÕëÀ´Ëµ£¬Òªµ£ÐĵIJ»½ö½öÊÇÊý¾Ý³ÉÔ±£¬»¹Òª¿¼Âǵ½³ÉÔ±º¯Êý¡£ÒòΪ·µ»ØÒ»¸ö
³ÉÔ±º¯ÊýµÄÖ¸ÕëÒ²ÊÇÓпÉÄܵģº
class person; // ÌáǰÉùÃ÷
// ppmf = "pointer to person member function"
// (Ö¸Ïòperson³ÉÔ±º¯ÊýµÄÖ¸Õë)
typedef void (person::*ppmf)();
class person {
public:
static ppmf verificationfunction()
{ return &person::verifyaddress; }
...
private:
address address;
void verifyaddress();
};
Èç¹ûÄã¹ýȥûÊÔ¹ýÏóÉÏÃæÄÇÑù½«³ÉÔ±º¯ÊýÖ¸ÕëºÍtypedef½áºÏÆðÀ´µÄÓ÷¨£¬¿ÉÄÜ»á¾õµÃpers
on::verificationfunctionµÄÉùÃ÷ÓеãÏÅÈË¡£±ðº¦Å£¬ËüµÄÈ«²¿º¬ÒåÖ»²»¹ýÊÇ£º
¡¤ verificationfunctionÊÇÒ»¸öûÓÐÊäÈë²ÎÊýµÄ³ÉÔ±º¯Êý
¡¤ ËüµÄ·µ»ØÖµÊÇpersonÀàÖÐÒ»¸ö³ÉÔ±º¯ÊýµÄÖ¸Õë
¡¤ ±»Ö¸ÏòµÄº¯Êý£¨¼´£¬verificationfunctionµÄ·µ»ØÖµ£©Ã»ÓÐÊäÈë²ÎÊýÇÒûÓзµ»ØÖµ£¬¼´
void¡£
ÖÁÓÚstatic¹Ø¼ü×Ö£¬µ±ËüÓÃÓÚ¶Ô³ÉÔ±µÄÉùÃ÷ʱ£¬Æäº¬ÒåÊÇ£ºÕû¸öÀàÖ»ÓÐÕâ¸ö³ÉÔ±µÄÒ»·Ý¿½
±´£¬²¢ÇÒÕâ¸ö³ÉÔ±¿ÉÒÔ²»Í¨¹ýÀàµÄ¾ßÌå¶ÔÏóÀ´·ÃÎÊ¡£ÓйØstaticµÄÍêÕû½éÉÜ¿ÉÒԲο¼c++½Ì
³Ì¡££¨Èç¹ûÄãµÄc++½Ì³ÌÀïûÓнéÉܾ²Ì¬³ÉÔ±£¬Çë°ÑÊéҳ˺ÁËÈÓµ½À¬»ø»ØÊÕÕ¾°É¡£×¢Òâ·âÃæ
Ò»¶¨²»ÒªÂÒÈÓÒÔÃâÆÆ»µ»·¾³¡£×îºó£¬È¥½è»òÂò±¾¸üºÃµÄ½Ì³Ì°É¡££©
×îºóÒ»¸öÀý×ÓÖУ¬verifyaddressÊÇÒ»¸ö˽ÓгÉÔ±º¯Êý£¬ÕâÒâζ×ÅËüÖ»ÊÇÀàµÄÒ»¸öʵÏÖϸ½Ú
£¬Ö»ÓÐÀàµÄ³ÉÔ±²ÅÓ¦¸ÃÖªµÀËü£¨µ±È»£¬ÓÑÔ±Ò²ÖªµÀ£©¡£µ«ÊÇ£¬ÓÉÓÚ¹«ÓгÉÔ±º¯Êýverificat
ionfunction·µ»ØÁËÖ¸ÏòverifyaddressµÄÖ¸Õ룬Óû§¾Í¿ÉÒÔ×öÕâÑùµÄÊÂ:
ppmf pmf = scott.verificationfunction();
(scott.*pmf)(); // µÈͬÓÚµ÷ÓÃ
// scott.verifyaddress
ÕâÀpmf³ÉÁËperson::verifyaddressµÄͬÒå´Ê£¬Ö»ÊÇÓиöÖØÒªµÄÇø±ð£º¿ÉÒÔûÓÐÏÞÖÆµØ
ʹÓÃËü¡£
ËäÈ»Ç°ÃæËµÁËÄÇô¶à£¬ÓÐÒ»ÌìÄã¿ÉÄÜΪÁ˳ÌÐòµÄÐÔÄÜ»¹ÊDz»µÃ²»Ð´ÏóÉÏÃæÄÇÑùµÄº¯Êý-----
---·µ»ØÖµÊÇij¸ö·ÃÎʼ¶½ÏµÍµÄ³ÉÔ±µÄÖ¸Õë»òÒýÓᣵ«Í¬Ê±£¬ÄãÓÖ²»ÏëÎþÉüprivateºÍprote
ctedΪÄãÌṩµÄ·ÃÎÊÏÞÖÆ¡£ÕâÖÖÇé¿öÏ£¬Äã¿ÉÒÔͨ¹ý·µ»ØÖ¸Ïòconst¶ÔÏóµÄÖ¸Õë»òÒýÓÃÀ´´ï
µ½Á½È«ÆäÃÀµÄЧ¹û¡£Ïêϸ½éÉܲμûÌõ¿î21¡£
--
»¶Óµ½C_and_CPP°æÌÖÂÛÏà¹ØÎÊÌâ¡£
¡ù À´Ô´:¡¤¹þ¹¤´ó×϶¡Ïã bbs.hit.edu.cn¡¤[FROM: 202.118.239.104]
Powered by KBS BBS 2.0 (http://dev.kcn.cn)
Ò³ÃæÖ´ÐÐʱ¼ä£º2.284ºÁÃë