]]>C++妯℃澘鍐呭鎷鵑仐http://www.shnenglu.com/qudeqing0204lyf/archive/2009/03/11/76263.htmlAlex@VCCAlex@VCCWed, 11 Mar 2009 11:56:00 GMThttp://www.shnenglu.com/qudeqing0204lyf/archive/2009/03/11/76263.htmlhttp://www.shnenglu.com/qudeqing0204lyf/comments/76263.htmlhttp://www.shnenglu.com/qudeqing0204lyf/archive/2009/03/11/76263.html#Feedback1http://www.shnenglu.com/qudeqing0204lyf/comments/commentRss/76263.htmlhttp://www.shnenglu.com/qudeqing0204lyf/services/trackbacks/76263.html涓奀++璇劇▼鐨勬椂鍊欒佸笀鎬繪槸榧撳惞妯℃澘濡備綍閲嶈錛屼絾鏄湡姝d笂璇炬椂鍊欏嵈灝嗚閮ㄥ垎璺寵繃銆傚鉤鏃跺仛欏圭洰鍐欑▼搴忚櫧鐒跺ぉ澶╂帴瑙TL錛屼絾璇村埌濡備綍瀹炵幇妯℃澘鐪熺殑鏄亾涓嶅嚭鍏朵竴浜屻傜幇灝嗚繖鍑犲ぉ鐪婥++Primer涓殑涓浜涢噸瑕佹蹇墊彁鍙栧嚭鏉ワ紝浠ュ涓嶆椂涔嬮渶銆?br>1錛屾ā鏉跨殑鐢ㄥ銆?br>妯℃澘鍏跺疄涔熸槸澶氭佹濇兂鐨勪竴縐嶄綋鐜幫紝涓嶈繃涓嶆槸C++閭d釜榪愯鏃跺鎬侊紝鑰屾槸緙栬瘧鏃跺鎬併傞偅涔堢敤鍦ㄤ粈涔堝湴鏂瑰憿錛熶釜浜烘劅瑙夌敤鐨勬渶澶氱殑鏄湪鏁版嵁緇撴瀯涓紝涓浜涚粡鍏哥殑鏁版嵁緇撴瀯錛圦ueue錛孲tack錛夌敤妯℃澘綾誨疄鐜扮‘瀹炰簨鍗婂姛鍊嶃傝嚦浜庡叾浠栧湴鏂瑰槢銆傘傘備篃璁告槸鑷繁鐨勫姛鍔涗笉澶燂紝鍑犱箮灝辨病鏈夌敤榪囷紙璁捐妯″紡涓嶄篃鏄竴鏍風(fēng)殑閬撶悊鍢涳紝鍥э級 2錛屾ā鏉垮畾涔?br>妯℃澘鍑芥暟瀹氫箟錛?br>template<typename T> int compare(const T &v1,const T &v2); 鍐呰仈鍑芥暟錛?br>inline template<typename T> int compare(const T &v1,const T &v2);
妯℃澘綾誨畾涔夛細(xì) template<class Type> class Queue { public: Queue(); Type T& front(); //...... } 3錛屾ā鏉跨被瀹炰緥鍖?br>Queue<int> qi; 鍏跺疄榪欎釜涓嶅氨鏄拰STL涓妯′竴鏍峰槢錛熺‘瀹炴槸鐨勶紝STL涓嶅氨鏄府鎴戜滑榪欎簺緇忓吀鐨勬暟鎹粨鏋勪竴涓瀹炵幇浜嗗槢錛?br> 4,鍙嬪厓鐨勫湪妯℃澘綾葷殑浣跨敤 friend class Queue<Type>; 榪欐牱灝卞皢Queue榪欎釜妯℃澘綾昏涓轟簡鍙嬪厓錛屼箣鍓嶅繀欏昏鏈塓ueue<Type>鐨勫0鏄庯紝濡倀emplate<class Type> class Queue;
]]>鍏充簬鍙嬪厓綾葷殑涓浜涢殢絎?/title>http://www.shnenglu.com/qudeqing0204lyf/archive/2009/03/11/76235.htmlAlex@VCCAlex@VCCWed, 11 Mar 2009 08:15:00 GMThttp://www.shnenglu.com/qudeqing0204lyf/archive/2009/03/11/76235.htmlhttp://www.shnenglu.com/qudeqing0204lyf/comments/76235.htmlhttp://www.shnenglu.com/qudeqing0204lyf/archive/2009/03/11/76235.html#Feedback4http://www.shnenglu.com/qudeqing0204lyf/comments/commentRss/76235.htmlhttp://www.shnenglu.com/qudeqing0204lyf/services/trackbacks/76235.html鐪嬫ā鏉跨被鐨勬椂鍊欏彂鐜版湁浜涘湴鏂逛嬌鐢ㄥ埌浜嗗弸鍏冿紝涓婅瀛︾殑璁頒笉寰椾簡錛岃刀绱ф俯涔?fàn)涓嬨傘傘?br> 鍙嬪厓姒傚康灝變笉緗楀棪浜嗭紝浣跨敤涔熺畝鍗曪紝灝變袱縐嶅艦寮忥細(xì) 1.鍙嬪厓鍑芥暟錛歠riend ret-type classname::funname(....); 2.鍙嬪厓綾伙細(xì)friend class classname; 鍞竴瑕佹敞鎰忕殑灝辨槸涓嶇鏄弸鍏冨嚱鏁拌繕鏄弸鍏冪被錛屽畾涔夊弸鍏冨叧緋誨墠蹇呴』鍏堝0鏄?br> 鍙嬪厓綾誨叾瀹炶繕鏄湁浜涙晠浜嬭璇寸殑錛屼竴鏃︾被緇ф壙璧鋒潵鍙嬪厓鍏崇郴榪樻槸鏈変簺灝忓鏉傜殑錛屼笅闈㈢畝鍗曡鏄庯細(xì)
C涓0鏄嶢鏄叾鍙嬪厓綾伙紝閭d箞鏈鍩烘湰鐨勫氨鏄疉鍙互浣跨敤C涓殑private鏂規(guī)硶鎴栬呭璞°?br>鍥句腑鍙錛孉鏄疊鐨勫熀綾伙紝C鏄疍鐨勫熀綾匯侫BCD涓氨鏈夊涓嬪叧緋伙細(xì) 1.B鏂板鐨勬柟娉曚笉鑳借闂跡鐨勭鏈夋垚鍛?br>2.B浠庯肌緇ф壙鑰屾潵鐨勬柟娉曞彲浠ヨ闂跡鐨勭鏈夋垚鍛?br>3.A鍙兘璁塊棶D涓粠C涓戶鎵胯屾潵鐨勭鏈夋垚鍛橈紝D涓柊澧炵殑縐佹湁鎴愬憳涓嶈兘璁塊棶錛?br> 鎬葷粨璧鋒潵灝辨槸鍙嬪厓鍏崇郴涓嶅彲浠ョ戶鎵匡紝浣嗗宸叉湁鐨勬柟娉曟潵璇磋闂潈闄愪笉鏀瑰彉銆傚鏋滄敼鍐欏熀綾葷殑鏂規(guī)硶鍒欒闂潈闄愭敼鍙?br> PS 錛氥瑕佺壒鍒阿璋㈡湁鏈嬪弸鐣欒█綰犳浜嗘垜鐨勯敊璇紝榪欐灝嗘祴璇曠敤浠g爜涓騫惰創(chuàng)鍑?br> class C { friend class A; private : int numC; };
class D : public C { private: int numD; };
class A { public: //A鏄跡鐨勫弸鍏冿紝鍙互璁塊棶錛g殑縐佹湁鎴愬憳 void getFromC() { C c; c.numC = 100; cout<<"getFromC in A : numC = "<<c.numC<<endl; }; //錛′笉鏄激鐨勫弸鍏冿紝涓嶈兘璁塊棶錛や腑鏂板鐨勭鏈夋垚鍛橈紝浣嗗彲浠ヨ闂激浠庯跡涓戶鎵胯屾潵鐨勭鏈夋垚鍛?br> void getFromD() { D d; d.numC = 23; cout<<"getFromD in A : numC = "<<d.numC<<endl; //d.numD = 24; //cout<<"getFromD in A : numD = "<<d.numD<<endl; } };
class B :public A { public: //鍙嬪厓鍏崇郴涓嶈兘緇ф壙錛屾柊澧炵殑鏂規(guī)硶涓嶈兘璁塊棶錛g殑縐佹湁鎴愬憳 // int getNumB() // { // C c; // c.numC = 100; // return c.numC; // }
//鏀瑰啓鏂規(guī)硶鍚庡錛h闂潈闄愭敼鍙?/span>錛屼笉鑳借闂跡鐨勭鏈夋垚鍛?br>// void getFromC() // { // C c; // c.numC = 100; // cout<<"getFromC in B : numC = "<<c.numC<<endl; // }
};
int _tmain(int argc, _TCHAR* argv[]) { A a; a.getFromC();//杈撳嚭鈥斺攇etFromC in A : numC = 100 a.getFromD();//杈撳嚭鈥斺攇etFromD in A : numC = 23 B b; b.getFromC();//杈撳嚭鈥斺攇etFromC in A : numC = 100 //璋冪敤鐨勮繕鏄疉::getFromC return 0; }