锘??xml version="1.0" encoding="utf-8" standalone="yes"?>
]]>
F錛氬畯瀹氫箟涔熷彲浠ュ疄鐜伴噸鐢紝涓轟粈涔堜笉浣跨敤瀹忥紵
Q錛氬畯閬垮紑C++綾誨瀷媯鏌ユ満鍒訛紝涓や釜涓嶅悓綾誨瀷鍙傛暟涔嬮棿鐨勬瘮杈冨皢浼氬鑷撮敊璇?/span>
妯℃澘錛屾ā鏉垮嚱鏁幫紝妯℃澘綾誨拰瀵硅薄涔嬮棿鐨勫叧緋匯?/span>
妯℃澘 錛堝嚱鏁版ā鏉垮拰綾繪ā鏉匡級 妯℃澘鍑芥暟 妯℃澘綾?/span> 瀵硅薄
妯℃澘 錛堝嚱鏁版ā鏉垮拰綾繪ā鏉匡級 妯℃澘鍑芥暟 妯℃澘綾?/span> 瀵硅薄

渚嬪錛?/span>
妯℃澘褰㈠弬灝?/span>T瀹炰緥鍖栫殑鍙傛暟銆?/span>
鍑芥暟妯℃澘鏄竴涓笉瀹屽叏鐨勫嚱鏁幫紝棣栧厛闇瑕佸皢妯℃澘褰㈠弬T瀹炰緥鍖栦負紜畾鐨勭被鍨嬨傝繖涓被鍨嬪彲浠ユ槸棰勫畾涔夌殑錛屼篃鍙互鏄敤鎴瘋嚜瀹氫箟銆?/span>
妯℃澘鍑芥暟鐨勫紓甯?/span>
1 鍏堣皟鐢ㄩ『搴忛伒寰粈涔堢害瀹氾紵
錛?/span>1錛夊鎵劇被鍨嬪畬鍏ㄥ尮閰嶇殑鍑芥暟銆?/span>
錛?/span>2錛夊鎵懼嚱鏁版ā鏉匡紝瀹炰緥鍖栧悗錛屼駭鐢熷尮閰嶇殑妯℃澘鍑芥暟銆?/span>
錛?/span>3錛夎嫢錛?/span>1錛夛紙2錛夊け璐ワ紝灝濊瘯浣庝竴綰х殑瀵瑰嚱鏁伴噸杞界殑鏂規(guī)硶銆備緥濡傦紝閫氳繃綾誨瀷杞崲銆?/span>
錛?/span>4錛夛紙1錛夛紙2錛夛紙3錛夐兘涓哄尮閰嶏紝鍒欐槸涓涓敊璇?/span>
2 鍏堜簡瑙d簡榪欐牱鐨勭害瀹氾紝灝卞緢瀹規(guī)槗鐞嗚В浠ヤ笅錛?/span>
鐢ㄩ潪妯℃澘鍑芥暟閲嶈澆鍑芥暟妯℃澘錛屽彧澹版槑闈炴ā鏉跨被鍑芥暟鐨勫師鍨嬶紝涓嶇粰鍑哄嚱鏁頒綋錛岃屽嚱鏁頒綋鍊熺敤鍑芥暟妯℃澘鐨勫嚱鏁頒綋銆?/span>
渚嬪錛?/span>
template <class T>
T max( T x, T y)
{
return( x > y )? x : y;
}
int max( int, int);
//int max 閲嶈澆浜嗗嚱鏁版ā鏉跨殑鍑芥暟浣擄紱
int i;
char c;
max錛?/span>i, c錛?/span>;
3 瀹氫箟涓涓畬鏁寸殑鏈夊嚱鏁頒綋鐨勯潪妯℃澘鍑芥暟銆?/span>
姣斿錛?/span>max(char, char)鏃訛紝涓婇潰鐨勫嚱鏁版ā鏉夸笉鑳芥瘮杈冩瘮涓涓瓧絎︽洿闀跨殑瀛楃涓蹭簡銆?/span>
鎵浠ワ紝鍍忎竴鑸殑閲嶈澆鍑芥暟涓鏍峰畾涔夈?/span>
char *max( char *x, char *y )
{
return ( strcmp(x, y) > 0 ) ? x 錛?/span>y錛?/span>
}
char * max閲嶈澆浜嗗嚱鏁版ā鏉匡紝褰撹皟鐢ㄤ負錛?/span>
max ( “abcd”, “efgh” ); 灝嗘墽琛屾鍑芥暟銆?/span>
class A
{ …
private:
A(const A &a); // 縐佹湁鐨勬嫹璐濇瀯閫犲嚱鏁?span lang=EN-US>
A & operate =(const A &a); // 縐佹湁鐨勮祴鍊煎嚱鏁?span lang=EN-US>
};
濡傛灉鏈変漢璇曞浘緙栧啓濡備笅紼嬪簭錛?/span>
A b(a); // 璋冪敤浜嗙鏈夌殑鎷瘋礉鏋勯犲嚱鏁?span lang=EN-US>
b = a; // 璋冪敤浜嗙鏈夌殑璧嬪煎嚱鏁?span lang=EN-US>
緙栬瘧鍣ㄥ皢鎸囧嚭閿欒錛屽洜涓哄鐣屼笉鍙互鎿嶄綔A鐨勭鏈夊嚱鏁般?/span>
浣嗘槸鎬庢牱鎵嶈兘浣跨敤鏋勯犳嫹璐濆拰璧嬪煎嚱鏁板憿錛?/span>
铏氭嫙鍑芥暟浣跨敤錛?/span>C++exams\destructor
鍦ㄧ紪鍐欐淳鐢熺被鐨勮祴鍊煎嚱鏁版椂錛屾敞鎰忎笉瑕佸繕璁板鍩虹被鐨勬暟鎹垚鍛橀噸鏂拌祴鍊箋備緥濡傦細
鏋愭瀯鍑芥暟
鏋勯犲嚱鏁板垵濮嬪寲琛細鏋勯犲嚱鏁扮壒孌婄殑鍒濆鍖栨柟寮?#8220;鍒濆鍖栬〃杈懼紡琛?#8221;錛堢畝縐板垵濮嬪寲琛級銆?/p>
鍒濆鍖栬〃浣嶄簬鍑芥暟鍙傛暟琛ㄤ箣鍚庯紝鍗村湪鍑芥暟浣?{} 涔嬪墠銆傝繖璇存槑璇ヨ〃閲岀殑鍒濆鍖栧伐浣滃彂鐢熷湪鍑芥暟浣撳唴鐨勪換浣曚唬鐮佽鎵ц涔嬪墠銆?/p>
瑙勫垯
u 濡傛灉綾誨瓨鍦ㄧ戶鎵垮叧緋伙紝媧劇敓綾誨繀欏誨湪鍏跺垵濮嬪寲琛ㄩ噷璋冪敤鍩虹被鐨勬瀯閫犲嚱鏁般?/p>
u 綾葷殑const甯擱噺鍙兘鍦ㄥ垵濮嬪寲琛ㄩ噷琚垵濮嬪寲錛屽洜涓哄畠涓嶈兘鍦ㄥ嚱鏁頒綋鍐呯敤璧嬪肩殑鏂瑰紡鏉ュ垵濮嬪寲銆?/p>
u 綾葷殑鏁版嵁鎴愬憳鐨勫垵濮嬪寲鍙互閲囩敤鍒濆鍖栬〃鎴栧嚱鏁頒綋鍐呰祴鍊間袱縐嶆柟寮忥紝榪欎袱縐嶆柟寮忕殑鏁堢巼涓嶅畬鍏ㄧ浉鍚屻?/p>
鏁堢巼
1 鍐呴儴鎴愬憳錛?/p>
鍒濆鍖栬〃鍜屽嚱鏁頒綋鍐呰祴鍊奸兘鍙互錛屼絾鏁堢巼涓嶅畬鍏ㄧ浉鍚岋紝浣嗗悗鑰呮洿涓烘竻鏅扮洿瑙傘?/p>
渚嬪瓙錛?/p>
class F
{
public:
F(int x, int y); // 鏋勯犲嚱鏁?/p>
private:
int m_x, m_y;
int m_i, m_j;
}
|
F::F(int x, int y) : m_x(x), m_y(y) { m_i = 0; m_j = 0; } |
F::F(int x, int y) { m_x = x; m_y = y; m_i = 0; m_j = 0; } |
紺轟緥9-2(c) 鏁版嵁鎴愬憳鍦ㄥ垵濮嬪寲琛ㄤ腑琚垵濮嬪寲 紺轟緥9-2(d) 鏁版嵁鎴愬憳鍦ㄥ嚱鏁頒綋鍐呰鍒濆鍖?/p>
涓ょ鏂瑰紡鏁堢巼鍖哄埆涓嶅ぇ銆?/p>
2 闈炲唴閮ㄦ垚鍛橈細
鍙兘鐢ㄥ垵濮嬪寲琛紝鎻愰珮鏁堢巼銆?/p>
渚嬪瓙錛?/p>
class A
{…
A(void); // 鏃犲弬鏁版瀯閫犲嚱鏁?/p>
A(const A &other); // 鎷瘋礉鏋勯犲嚱鏁?/p>
A & operate =( const A &other); // 璧嬪煎嚱鏁?/p>
}錛?/p>
class B
{
public:
B(const A &a); // B鐨勬瀯閫犲嚱鏁?/p>
private:
A m_a; // 鎴愬憳瀵硅薄
};
姣旇緝涓庡垎鏋愶細
|
B::B(const A &a) : m_a(a) { … } |
B::B(const A &a) { m_a = a; … } |
1 B綾繪瀯閫犲嚱鏁扮殑鍒濆鍖栭噷錛岃皟鐢ㄤ簡A綾葷殑鎷瘋礉鏋勯犲嚱鏁般?/p>
2 B綾繪瀯閫犲垵濮嬪寲閲岋紝闅愯棌浜嗕互涓嬪嚑涓楠わ細
鍏堝垱寤轟簡a瀵硅薄錛岃皟鐢ㄤ簡A綾葷殑鏃犲弬鏁版瀯閫犲嚱鏁幫紱
鎶奱璧嬪肩粰m_a錛岃皟鐢ㄤ簡A綾葷殑璧嬪煎嚱鏁幫紱
娣卞叆鎺㈣錛?/p>
鏋勯犲拰鏋愭瀯鐨勬搴忥紵
鏋勯犱粠鏈娣卞鐨勫熀綾誨紑濮嬬殑錛屽厛涓灞傚眰璋冪敤鍩虹被鐨勬瀯閫犲嚱鏁幫紝鐒跺悗璋冪敤鎴愬憳瀵硅薄鐨勬瀯閫犲嚱鏁般?/p>
鑰屾瀽鏋勫嚱鏁頒弗鏍兼寜鐓ф瀯閫犲嚱鏁扮浉鍙嶇殑嬈″簭鎵ц錛岃嬈″簭鍞竴錛屼互渚胯緙栬瘧鍣ㄨ嚜鍔ㄦ墽琛屾瀽鏋勫嚱鏁般?/p>
鐗瑰埆涔嬪鏄紝鎴愬憳瀵硅薄鍒濆鍖栨搴忎笉鍙楁瀯閫犲嚱鏁板垵濮嬪寲琛ㄦ搴忓獎鍝嶏紝鐢卞湪綾諱腑澹版槑鐨勬搴忓喅瀹氥傝岀被澹版槑鏄敮涓鐨勶紝鏋勯犲嚱鏁板嵈鍙兘鏈夊涓紝鎵浠ユ湁澶氫釜涓嶅悓嬈″簭鍑芥暟鍒濆鍖栬〃銆傚鏋滄寜鐓ф瀯閫犲嚱鏁扮殑嬈″簭鏋勯狅紝閭d箞瑙f瀽鍑芥暟涓嶈兘寰楀埌鍞竴鐨勯嗗簭銆?/p>
鏁?/span>C++涓紝鐢ㄥ唴鑱斿彇浠f墍鏈夊畯錛屼絾鍦?/span>Debug鐗堟湰涓紝assert鏄緥澶栥?/span>
assert涓嶄駭鐢熶換浣曞壇浣滅敤錛岃皟鐢ㄥ嚱鏁頒細寮曡搗鍐呭瓨銆佷唬鐮佺殑鍙樺姩錛屾墍浠?/span>assert鏄畯銆?/span>
鍐呰仈鏍煎紡錛?/span>
void Foo(int x, int y);
inline void Foo(int x, int y) // inline涓庡嚱鏁板畾涔変綋鏀懼湪涓璧?span lang=EN-US>
{
…
}
鐢ㄤ簬瀹炵幇鐨勫叧閿瓧錛岃岄潪鐢ㄤ簬澹版槑鐨勫叧閿瓧銆?/span>
鍦ㄧ被涓殑瑙勮寖鏍煎紡錛?/span>
class A
{
public:
void Foo(int x, int y)錛?span lang=EN-US>
}
// 瀹氫箟鏂囦歡
inline void A::Foo(int x, int y)
{
…
}
浠涔堟儏鍐典笉閫傚悎浣跨敤鍐呰仈錛?/span>
1 鍐呰仈鍑芥暟浠g爜杈冮暱錛屽鑷村唴瀛樻秷鑰楄緝楂樸?/span>
2 鍐呰仈鍑芥暟鍖呮嫭寰幆錛屾墽琛屽唴鑱斿嚱鏁頒唬鐮佹瘮璋冪敤鍑芥暟鐨勫紑閿澶с?/span>
F錛氫負浠涔堟瀯閫犲拰瑙f瀽鍑芥暟涓嶄嬌鐢ㄥ唴鑱旓紵
Q錛氬洜涓烘瀽鏋勫嚱鏁板彲鑳?#8220;闅愯棌”涓浜涜涓猴紝渚嬪鎵ц鍩虹被鎴栨垚鍛樺璞$殑鏋愭瀯榪囩▼銆?/span>
鏈夋椂鍊欑紪璇戝櫒浼氳嚜鍔ㄥ彇娑堜竴浜涗笉鍊煎緱鐨勫唴鑱旓紝鎵浠ュ湪澹版槑鏃朵笉鍐?/span>inline鏄悎鐞嗙殑銆?/span>
鎻愰珮紼嬪簭鏄撶敤鎬э紝閬垮厤姣忔璋冪敤鍑芥暟鍙傛暟閮界浉鍚岀殑鎯呭喌銆?/span>
緙虹渷鍊煎彧鑳藉嚭鐜板湪鍑芥暟澹版槑涓紝涓嶈兘鍦ㄥ嚱鏁板畾涔変腑銆?/span>
涓や釜鍘熷洜錛?/span>
涓鏄嚱鏁扮殑瀹炵幇錛堝畾涔夛級鏈潵灝變笌鍙傛暟鏄惁鏈夌己鐪佸兼棤鍏籌紝鎵浠ユ病鏈夊繀瑕佽緙虹渷鍊煎嚭鐜板湪鍑芥暟鐨勫畾涔変綋涓?/span>
浜屾槸鍙傛暟鐨勭己鐪佸煎彲鑳戒細鏀瑰姩錛屾樉鐒朵慨鏀瑰嚱鏁扮殑澹版槑姣斾慨鏀瑰嚱鏁扮殑瀹氫箟瑕佹柟渚褲?/span>
瑙勫垯錛氬弬鏁頒粠鍚庡悜鍓嶇己鐪?/span>
姝g‘鐨勭ず渚嬪涓嬶細
void Foo(int x, int y=0, int z=0);
閿欒鐨勭ず渚嬪涓嬶細
void Foo(int x=0, int y, int z=0);
浣嗚閬垮厤浜屼箟鎬?/span>
榪愮畻絎﹂噸杞藉強鍏惰鍒?/span>
榪愮畻絎﹀嵆鍙畾涔変負鎴愬憳鍑芥暟錛屼篃鍙畾涔変負鍏ㄥ眬鍑芥暟銆?/span>
瑙勫垯濡備笅錛?/span>
|
榪愮畻絎?span lang=EN-US> |
瑙勫垯 |
|
鎵鏈夌殑涓鍏冭繍綆楃 |
寤鴻閲嶈澆涓烘垚鍛樺嚱鏁?span lang=EN-US> |
|
= () [] -> |
鍙兘閲嶈澆涓烘垚鍛樺嚱鏁?span lang=EN-US> |
|
+= -= /= *= &= |= ~= %= >>= <<= |
寤鴻閲嶈澆涓烘垚鍛樺嚱鏁?span lang=EN-US> |
|
鎵鏈夊叾瀹冭繍綆楃 |
寤鴻閲嶈澆涓哄叏灞鍑芥暟 |
涓嶈兘閲嶈澆鐨勮繍綆楃
錛?span lang=EN-US>1錛変笉鑳芥敼鍙?span lang=EN-US>C++鍐呴儴鏁版嵁綾誨瀷錛堝int,float絳夛級鐨勮繍綆楃銆?span lang=EN-US>
錛?span lang=EN-US>2錛変笉鑳介噸杞?span lang=EN-US>‘.’錛屽洜涓?span lang=EN-US>‘.’鍦ㄧ被涓浠諱綍鎴愬憳閮芥湁鎰忎箟錛屽凡緇忔垚涓烘爣鍑嗙敤娉曘?span lang=EN-US>
錛?span lang=EN-US>3錛変笉鑳介噸杞界洰鍓?span lang=EN-US>C++榪愮畻絎﹂泦鍚堜腑娌℃湁鐨勭鍙鳳紝濡?span lang=EN-US>#,@,$絳夈傚師鍥犳湁涓ょ偣錛屼竴鏄毦浠ョ悊瑙o紝浜屾槸闅句互紜畾浼樺厛綰с?span lang=EN-US>
錛?span lang=EN-US>4錛夊宸茬粡瀛樺湪鐨勮繍綆楃榪涜閲嶈澆鏃訛紝涓嶈兘鏀瑰彉浼樺厛綰ц鍒欙紝鍚﹀垯灝嗗紩璧鋒販涔便?span lang=EN-US>
鍑芥暟鍐呰仈
鐩殑錛氭彁楂樻墽琛屾晥鐜囥?/span>
瀹?/span>
Q涓轟粈涔堣鐢紵
A鎻愰珮鎵ц鏁堢巼銆?/span>
Q濡備綍鎻愰珮錛?/span>
A瀹忎唬鐮佹湰韜笉鏄嚱鏁幫紝浣嗕嬌鐢ㄨ搗鏉ヨ薄鍑芥暟銆傞澶勭悊鍣ㄧ敤澶嶅埗瀹忎唬鐮佺殑鏂瑰紡浠f浛鍑芥暟璋冪敤錛岀渷鍘諱簡鍙傛暟鍘嬫爤銆佺敓鎴愭眹緙栬璦鐨?/span>CALL璋冪敤銆佽繑鍥炲弬鏁般佹墽琛?/span>return絳夎繃紼嬶紝浠庤屾彁楂樹簡閫熷害銆?/span>
Q緙虹偣錛?/span>
浣跨敤瀹忎唬鐮佹渶澶х殑緙虹偣鏄鏄撳嚭閿欙紝棰勫鐞嗗櫒鍦ㄥ鍒跺畯浠g爜鏃跺父甯鎬駭鐢熸剰鎯充笉鍒扮殑杈歸檯鏁堝簲銆?/span>
渚嬪錛?/span>
#define MAX(a, b) (a) > (b) ? (a) : (b)
璇彞
result = MAX(i, j) + 2 ;
灝嗚棰勫鐞嗗櫒瑙i噴涓?span lang=EN-US>
result = (i) > (j) ? (i) : (j) + 2 ;
鐢變簬榪愮畻絎?span lang=EN-US>‘+’姣旇繍綆楃‘:’鐨勪紭鍏堢駭楂橈紝鎵浠ヤ笂榪拌鍙ュ茍涓嶇瓑浠蜂簬鏈熸湜鐨?span lang=EN-US>
result = ( (i) > (j) ? (i) : (j) ) + 2 ;
濡傛灉鎶婂畯浠g爜鏀瑰啓涓?span lang=EN-US>
#define MAX(a, b) ( (a) > (b) ? (a) : (b) )
鍒欏彲浠ヨВ鍐崇敱浼樺厛綰у紩璧風殑閿欒銆備絾鏄嵆浣夸嬌鐢ㄤ慨鏀瑰悗鐨勫畯浠g爜涔熶笉鏄竾鏃犱竴澶辯殑錛屼緥濡傝鍙?span lang=EN-US style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 0cm; BORDER-TOP: windowtext 1pt solid; PADDING-LEFT: 0cm; PADDING-BOTTOM: 0cm; BORDER-LEFT: windowtext 1pt solid; PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 1pt solid; mso-border-alt: solid windowtext .5pt">result = MAX(i++, j);
灝嗚棰勫鐞嗗櫒瑙i噴涓?span lang=EN-US>
result = (i++) > (j) ? (i++) : (j);
瀵逛簬C++ 鑰岃█錛屼嬌鐢ㄥ畯浠g爜榪樻湁鍙︿竴縐嶇己鐐癸細鏃犳硶鎿嶄綔綾葷殑縐佹湁鏁版嵁鎴愬憳銆?span lang=EN-US>
“闅愯棌”鏄寚媧劇敓綾葷殑鍑芥暟灞忚斀浜嗕笌鍏跺悓鍚嶇殑鍩虹被鍑芥暟錛岃鍒欏涓嬶細
錛?span lang=EN-US>1錛夊鏋滄淳鐢熺被鐨勫嚱鏁頒笌鍩虹被鐨勫嚱鏁板悓鍚嶏紝浣嗘槸鍙傛暟涓嶅悓銆傛鏃訛紝涓嶈鏈夋棤virtual鍏抽敭瀛楋紝鍩虹被鐨勫嚱鏁板皢琚殣钘忥紙娉ㄦ剰鍒笌閲嶈澆娣鋒穯錛夈?span lang=EN-US>
錛?span lang=EN-US>2錛夊鏋滄淳鐢熺被鐨勫嚱鏁頒笌鍩虹被鐨勫嚱鏁板悓鍚嶏紝騫朵笖鍙傛暟涔熺浉鍚?/u>錛屼絾鏄熀綾誨嚱鏁版病鏈?span lang=EN-US>virtual鍏抽敭瀛椼傛鏃訛紝鍩虹被鐨勫嚱鏁拌闅愯棌錛堟敞鎰忓埆涓庤鐩栨販娣嗭級銆?span lang=EN-US>
鍥為【錛?/span>
闈欐佸鎬佹э細鍑芥暟閲嶈澆錛涜繍綆楃閲嶈澆錛?/span>
鍔ㄦ佸鎬佹э細緇ф壙錛涜櫄鍑芥暟錛?/span>
涓婅堪渚嬪瓙涔嬫墍浠ヤ嬌鐢ㄦ寚閽堢洰鐨勬槸錛氳〃杈句竴縐嶅姩鎬佹ц川錛屽嵆褰撴寚閽堟寚鍚戜笉鍚屽璞″彲浠ヨ皟鐢ㄤ笉鍚屾柟娉曘備絾浜嬪疄涓婁笉鑳借揪鍒拌繖鏍風殑鏁堟灉銆傝櫧鐒跺彲浠ュ己鍒舵寚閽堢殑綾誨瀷杞崲錛堬紙derived *錛?/span>p->g();錛夛紝鎴栬呯洿鎺ヨ皟鐢ㄦ寚鍚戞淳鐢熺被鐨勬寚閽堬紝浣嗘槸鍙灝嗘垚鍛樺嚱鏁板0鏄庝負virtual灝辮兘璧峰埌榪欐牱鐨勪綔鐢ㄣ?/span>
闅愯棌
涓嶅悓鎸囬拡鎸囧悜鍚屼竴鍦板潃錛岄偅涔堟寚閽堢殑綾誨瀷鍐沖畾璋冪敤鏂規(guī)硶錛岃繕鏄寚閽堟寚鍚戠殑瀵硅薄錛?/span>
渚嬪瓙錛?/span>C++exams\hide
鍙互鐪嬪嚭錛?/span>virtual鍑芥暟鍙互瀹炵幇涓嶅悓綾誨瀷鐨勬寚閽堟寚鍚戜笉鍚屽璞★紝璋冪敤涓嶅悓鐨勬柟娉曘?/span>
灝辨槸璇達紝褰撶埗綾誨璞″拰瀛愮被瀵硅薄鍚屾椂瀛樺湪錛屼笖璋冪敤鐖跺瓙瀵硅薄鐨勫悓鍚嶆柟娉曟椂錛屽彧鑳界敤铏氭嫙鍑芥暟瀹炵幇銆?/span>
鍙﹀錛屾彁渚涗竴縐嶆濊礬錛?/span>
濡傛灉鍩虹被涓庢淳鐢熺被鐨勫悓鍚嶅嚱鏁板弬鏁頒笉鍚岋紝姣斿錛?/span>
|
class Base { public: void f(int x); }; |
|
class Derived : public Base { public: void f(char *str); }; |
|
void Test(void) { Derived *pd = new Derived; pd->f(10); // error } |
鍩虹被涓?/span>int,媧劇敓綾諱負string.濡傛灉鎯沖湪媧劇敓綾諱腑璋冪敤鍩虹被鐨勬柟娉曪紝鍗沖湪媧劇敓綾諱腑娣誨姞鍩虹被鏂規(guī)硶鐨勮皟鐢ㄣ?/span>
class Derived : public Base
{
public:
void f(char *str);
void f(int x) { Base::f(x); }
};
浣嗘鍋氭硶瀹規(guī)槗娣蜂貢錛屼笉瀹滀嬌鐢ㄣ傛渶濂界殑鏂規(guī)硶榪樻槸鐢?/span>virtual銆?/span>
鎸囬拡綾誨瀷
瀵硅薄綾誨瀷
闈㈠悜瀵硅薄鍔ㄦ佺殑璁捐錛屽簲璇ユ槸瀵硅薄綾誨瀷璧峰埌鍏抽敭浣滅敤錛岃屼笉鏄寚閽堢被鍨嬨?/span>
鎴愬憳鍑芥暟琚噸杞界殑鐗瑰緛錛?span lang=EN-US>
錛?span lang=EN-US>1錛夌浉鍚岀殑鑼冨洿錛堝湪鍚屼竴涓被涓級錛?span lang=EN-US>
錛?span lang=EN-US>2錛夊嚱鏁板悕瀛楃浉鍚岋紱
錛?span lang=EN-US>3錛夊弬鏁頒笉鍚岋紱
錛?span lang=EN-US>4錛?span lang=EN-US>virtual鍏抽敭瀛楀彲鏈夊彲鏃犮?span lang=EN-US>
瑕嗙洊鏄寚媧劇敓綾誨嚱鏁拌鐩栧熀綾誨嚱鏁幫紝鐗瑰緛鏄細
錛?span lang=EN-US>1錛変笉鍚岀殑鑼冨洿錛堝垎鍒綅浜庢淳鐢熺被涓庡熀綾伙級錛?span lang=EN-US>
錛?span lang=EN-US>2錛夊嚱鏁板悕瀛楃浉鍚岋紱
錛?span lang=EN-US>3錛夊弬鏁扮浉鍚岋紱
錛?span lang=EN-US>4錛夊熀綾誨嚱鏁板繀欏繪湁virtual鍏抽敭瀛椼?span lang=EN-US>
渚嬪瓙錛?/span>C++exams\cover
鎸囧悜鍩虹被鐨勬寚閽堝彲浠ユ寚鍚戝叾鍏辨湁媧劇敓綾葷殑瀵硅薄錛屼絾鍙嶄箣涓嶈錛屽彟澶栫鏈夋淳鐢熺被涔熶笉琛屻?/span>
姣斿錛氳濺 鏄熀綾伙紝灝忔苯杞︼紝椹濺 絳夋槸媧劇敓綾匯?/span>
涓涓濺綾葷殑鎸囬拡鍙互鎸囧悜浠諱綍媧劇敓綾伙紝鍥犱負瀹冧滑閮藉睘浜庤濺銆?/span>
鑰屽弽涔嬶紝涓嶈兘璇存寚鍚戦┈杞︾殑鎸囬拡鍙互鎸囧悜杞︼紝鍥犱負杞︾殑姒傚康鏈澶с?/span>
|
|
閲嶈澆 |
鍐呰仈 |
const |
virtual |
|
鍏ㄥ眬鍑芥暟 |
√ |
√ |
|
|
|
綾葷殑鎴愬憳鍑芥暟 |
√ |
√ |
√ |
√ |
鍐呴儴鏍囪瘑絎?/span>
緙栬瘧鍣ㄦ牴鎹弬鏁頒負姣忎釜閲嶈澆鍑芥暟鍒涘緩鍐呴儴鏍囪瘑絎︼紝浠ヤ究鍖哄垎蹇界暐榪斿洖鍊間笌鏈夎繑鍥炲肩殑閲嶈澆鍑芥暟銆?/span>
榪炴帴浜ゆ崲鎸囧畾絎﹀彿
C緙栬瘧榪囩殑鍑芥暟錛岀粡榪囩紪璇戝櫒鏍囪瘑鍚庝笌C++鐨勮〃紺洪鏍間笉鍚屻傛墍浠?/span>C++涓嶈兘鐩存帴璋冪敤C緙栬瘧鍑虹殑鍑芥暟銆?/span>C++鎻愪緵extern “C”
渚嬪錛?/span>
extern “C”
{
void foo(int x, int y);
… // 鍏跺畠鍑芥暟
}
鎴栬呭啓鎴?/span>
extern “C”
{
#include “myheader.h”
… // 鍏跺畠C澶存枃浠?span lang=EN-US>
}
鍏ㄥ眬鍑芥暟涓庢垚鍛樺嚱鏁板悓鍚?/span>
鍏ㄥ眬鍑芥暟涓庢垚鍛樺嚱鏁板悓鍚嶄笉綆楅噸杞斤紝鍥犱負鍑芥暟浣滅敤鍩熶笉鍚屻?/span>
涓轟簡鍖哄埆錛岃皟鐢ㄥ叏灞鍑芥暟鏃訛紝娉ㄦ剰鏍煎紡錛?/span>
錛氾細鍑芥暟鍚嶏紙鍙傛暟錛夛紱
闅愬紡綾誨瀷杞崲瀵艱嚧閲嶈澆鍑芥暟浜х敓浜屼箟鎬?/span>
闅愬紡綾誨瀷杞崲錛氭暟瀛楁湰韜病鏈夌被鍨嬶紝鎶婃暟瀛楀綋浣滃弬鏁幫紝鑷姩榪涜綾誨瀷杞崲銆?span lang=EN-US>
渚嬪錛?span lang=EN-US>
void output( int x); // 鍑芥暟澹版槑
void output( float x); // 鍑芥暟澹版槑
output(0.5)灝嗕駭鐢熺紪璇戦敊璇紝鍥犱負緙栬瘧鍣ㄤ笉鐭ラ亾璇ュ皢0.5杞崲鎴?span lang=EN-US>int榪樻槸float綾誨瀷鐨勫弬鏁般?/span>
姝g‘鍐欐硶錛?/span>
output(int(0.5)); // output int 0
output(float(0.5)); // output float 0.5
鍙槸鎶婃寚閽堟墍鎸囩殑鍐呭瓨緇欓噴鏀炬帀錛屼絾騫舵病鏈夋妸鎸囬拡鏈韓騫叉帀銆?/span>
娉ㄦ剰錛?/span>
錛?/span>1錛夋寚閽堟秷浜′簡錛屽茍涓嶈〃紺哄畠鎵鎸囩殑鍐呭瓨浼氳鑷姩閲婃斁銆?/span>
錛?/span>2錛夊唴瀛樿閲婃斁浜嗭紝騫朵笉琛ㄧず鎸囬拡浼氭秷浜℃垨鑰呮垚浜?/span>NULL鎸囬拡銆?/span>
姣旇緝
malloc鍜?/span>free錛氭棤娉曟弧瓚沖姩鎬佸璞$殑瑕佹眰銆傚璞″湪鍒涘緩鍚屾椂榪涜鏋勯狅紝娑堜骸鍚屾椂鏋愭瀯銆?/span>
malloc free鏄簱鍑芥暟錛屼笉鏄繍綆楃錛屼笉鍙楃紪璇戝櫒鎺у埗銆?/span>
new鍜?/span>delete錛氫笉鏄簱鍑芥暟錛岃兘鍔ㄦ佸唴瀛樺垎閰嶅拰娓呯悊鍐呭瓨銆?/span>
鍐呭瓨鑰楀敖
鍐呭瓨鑰楀敖鏃?/span>new鍜?/span>malloc榪斿洖NULL銆備絾鍦?/span>WIN32涓嬶紝浣跨敤铏氭嫙鍐呭瓨錛屼笉浼氳楀敖鐨勩?/span>
澶勭悊鍐呭瓨鑰楀敖澶ф鏈変袱縐嶃?/span>
A *a = new A;
1 涓澶勫唴瀛樼敵璇?/span>
if(a == NULL)
{
return;
}
2 濡傛灉鏈夊澶勭敵璇峰唴瀛橈紝鍒?span lang=EN-US>
if(a == NULL)
{
cout << “Memory Exhausted” << endl;
exit(1);
}
new涓?/span>delete浣跨敤瑕佺偣
1 new鍐呯疆浜?/span>sizeof銆佺被鍨嬭漿鎹㈠拰綾誨瀷瀹夊叏媯鏌ュ姛鑳姐?/span>
2 new鍦ㄥ垱寤洪潪鍐呴儴鏁版嵁綾誨瀷鐨勫姩鎬佸璞$殑鍚屾椂瀹屾垚浜嗗垵濮嬪寲宸ヤ綔銆?/span>
3 瀵硅薄鏈夊涓瀯閫犲嚱鏁幫紝閭d箞new鐨勮鍙ヤ篃鍙互鏈夊縐嶅艦寮忋?/span>
渚嬪錛?/span>diary files\obj.txt
4 濡傛灉鐢?span lang=EN-US>new鍒涘緩瀵硅薄鏁扮粍錛岄偅涔堝彧鑳戒嬌鐢ㄥ璞$殑鏃犲弬鏁版瀯閫犲嚱鏁般備緥濡?span lang=EN-US>
Obj *objects = new Obj[100]; // 鍒涘緩100涓姩鎬佸璞?span lang=EN-US>
涓嶈兘鍐欐垚
Obj *objects = new Obj[100](1);// 鍒涘緩100涓姩鎬佸璞$殑鍚屾椂璧嬪垵鍊?span lang=EN-US>1
5鍦ㄧ敤delete閲婃斁瀵硅薄鏁扮粍鏃訛紝鐣欐剰涓嶈涓簡絎﹀彿‘[]’銆備緥濡?span lang=EN-US>
delete []objects; // 姝g‘鐨勭敤娉?span lang=EN-US>
delete objects; // 閿欒鐨勭敤娉?span lang=EN-US>
鍚庤呯浉褰撲簬delete objects[0]錛屾紡鎺変簡鍙﹀99涓璞°?span lang=EN-US>
鎸囬拡鍙互闅忔椂鎸囧悜浠繪剰綾誨瀷鐨勫唴瀛樺潡錛屽畠鐨勭壒寰佹槸“鍙彉”錛屾墍浠ユ垜浠父鐢ㄦ寚閽堟潵鎿嶄綔鍔ㄦ佸唴瀛樸傛寚閽堣繙姣旀暟緇勭伒媧伙紝浣嗕篃鏇村嵄闄┿?/p>
1 淇敼鍐呭
char a[] = "hello";
a[0] = 'X';
cout << a << endl;
char *p = "world"; // 娉ㄦ剰p鎸囧悜甯擱噺瀛楃涓?/p>
p[0] = 'X'; // 緙栬瘧鍣ㄤ笉鑳藉彂鐜拌閿欒
cout << p << endl;

2 澶嶅埗涓庢瘮杈?/p>
strcpy錛坣ew type[strlen錛坅錛?1]錛夛紝鑰屼笉鑳界敤p = a //鎶奱鐨勫湴鍧緇欎簡p錛岃屼笉鏄痑鐨勫唴瀹?/p>
strcmp錛坕f strcmp錛坅,p錛?= 0錛夛紝鑰屼笉鑳界敤 if( a = p)
// 鏁扮粍…
char a[] = "hello";
char b[10];
strcpy(b, a); // 涓嶈兘鐢?nbsp; b = a;
if(strcmp(b, a) == 0) // 涓嶈兘鐢?nbsp; if (b == a)
…
// 鎸囬拡…
int len = strlen(a);
char *p = (char *)malloc(sizeof(char)*(len+1));
strcpy(p,a); // 涓嶈鐢?p = a;
if(strcmp(p, a) == 0) // 涓嶈鐢?if (p == a)
…
sizeof鍐呭瓨瀹歸噺璁$畻
1 sizeof(p)鐩稿綋浜巗izeof(char*)錛孋++涓嶆敮鎸佸鎸囬拡鎵鎸囧唴瀹瑰閲忕殑璁$畻銆?/p>
char a[] = "hello world";
char *p = a;
cout<< sizeof(a) << endl; // 12瀛楄妭
cout<< sizeof(p) << endl; // 4瀛楄妭
2 鏁扮粍浣滀負鍑芥暟鍙傛暟錛岄鍖栨垚鍚岀被鍨嬫寚閽堛?/p>
void Func(char a[100])
{
cout<< sizeof(a) << endl; // 4瀛楄妭鑰屼笉鏄?00瀛楄妭
}
鎸囬拡鍙傛暟浼犻掑唴瀛?/p>
棣栧厛錛岃冭檻鍑芥暟涓哄弬鏁板垱寤轟復鏃跺壇鏈殑闂銆傚浜庡間紶閫掞紝鏈夊艦鍙傚拰瀹炲弬鐨勫尯鍒備絾瀵逛簬寮曠敤鍜屾寚閽堜紶閫掞紝鍒欏彲鑳戒細浜х敓闂銆?/p>
鎸囬拡浣滀負鍑芥暟鍙傛暟錛屼笉鑳藉姩鎬佺敵璇峰唴瀛樸?/p>
void GetMemory(char *p, int num)
{
p = (char *)malloc(sizeof(char) * num);
}
void Test(void)
{
char *str = NULL;
GetMemory(str, 100); // str 浠嶇劧涓?NULL
strcpy(str, "hello"); // 榪愯閿欒
}
姣涚梾鍑哄湪鍑芥暟GetMemory涓傜紪璇戝櫒鎬繪槸瑕佷負鍑芥暟鐨勬瘡涓弬鏁板埗浣滀復鏃跺壇鏈紝鎸囬拡鍙傛暟p鐨勫壇鏈槸 _p錛岀紪璇戝櫒浣?_p = p銆傚鏋滃嚱鏁頒綋鍐呯殑紼嬪簭淇敼浜哶p鐨勫唴瀹癸紝灝卞鑷村弬鏁皃鐨勫唴瀹逛綔鐩稿簲鐨勪慨鏀廣傝繖灝辨槸鎸囬拡鍙互鐢ㄤ綔杈撳嚭鍙傛暟鐨勫師鍥犮傚湪鏈緥涓紝_p鐢寵浜嗘柊鐨勫唴瀛橈紝鍙槸鎶奯p鎵鎸囩殑鍐呭瓨鍦板潃鏀瑰彉浜嗭紝浣嗘槸p涓濇鏈彉銆傛墍浠ュ嚱鏁癎etMemory騫朵笉鑳借緭鍑轟換浣曚笢瑗褲備簨瀹炰笂錛屾瘡鎵ц涓嬈etMemory灝變細娉勯湶涓鍧楀唴瀛橈紝鍥犱負娌℃湁鐢╢ree閲婃斁鍐呭瓨銆?o:p>
濡備綍鏀規(guī)錛?o:p>
1 鐢?#8220;鎸囧悜鎸囬拡鐨勬寚閽?#8221;
void GetMemory2(char **p, int num) //**p
{
*p = (char *)malloc(sizeof(char) * num);
}
void Test2(void)
{
char *str = NULL;
GetMemory2(&str, 100); // 娉ㄦ剰鍙傛暟鏄?&str錛岃屼笉鏄痵tr
strcpy(str, "hello");
cout<< str << endl;
free(str);
}
2 鐢ㄥ嚱鏁拌繑鍥炲兼潵浼犻掑姩鎬佸唴瀛?o:p>
char *GetMemory3(int num)
{
char *p = (char *)malloc(sizeof(char) * num);
return p;
}
void Test3(void)
{
char *str = NULL;
str = GetMemory3(100);
strcpy(str, "hello");
cout<< str << endl;
free(str);
}
娉ㄦ剰
寮鴻皟涓嶈鐢╮eturn璇彞榪斿洖鎸囧悜“鏍堝唴瀛?#8221;鐨勬寚閽?/p>
char *GetString(void)
{
char p[] = "hello world";
return p; // 緙栬瘧鍣ㄥ皢鎻愬嚭璀﹀憡
}
void Test4(void)
{
char *str = NULL;
str = GetString(); // str 鐨勫唴瀹規(guī)槸鍨冨溇
cout<< str << endl;
}
1 闈欐佸瓨鍌ㄥ尯鍩?nbsp; 鍏ㄥ眬鍙橀噺 static
2 鏍?nbsp; 灞閮ㄥ彉閲?/p>
3 鍔ㄦ佸瓨鍌ㄥ尯鍩燂紙鍫嗭級(malloc free) (new delete)
甯歌閿欒鍜屽絳?/p>
1 鍐呭瓨鍒嗛厤鏈垚鍔熴?/p>
瀵圭瓥錛氱▼搴忓叆鍙e錛屾鏌ユ寚閽堟槸鍚︿負NULL銆?/p>
錛?錛夊弬鏁?p鎵鎸囧悜鐨勫唴瀛橈紝鐢╝ssert( p != NULL)
錛?錛塵alloc鎴杗ew鐢寵鐨勫唴瀛橈紝鐢╥f ( p != NULL)
2 鍐呭瓨鏈垵濮嬪寲銆?/p>
3 鍐呭瓨鎿嶄綔瓚婄晫銆?/p>
4 蹇樿閲婃斁鍐呭瓨錛屽唴瀛樻硠闇層?/p>
new涓巇elete閰嶅銆?/p>
5 閲婃斁鍐呭瓨錛屽嵈緇х畫浣跨敤銆?/p>
錛?錛塺eturn涓嶈兘榪斿洖“鏍堝唴瀛樻寚閽?#8221;鍜?#8220;寮曠敤”錛屽洜涓鴻鍐呭瓨鍦ㄥ嚱鏁扮粨鏉熸椂琚攢姣併?/p>
錛?錛夐噴鏀懼唴瀛樺悗錛岃涓篘ULL錛岄槻姝?#8220;閲庢寚閽?#8221;銆?/p>
瑙勫垯
1 鐢寵鍐呭瓨鍚庢鏌ャ俛ssert( p != NULL)
2 鏁扮粍銆佸姩鎬佸唴瀛樺垵濮嬪寲銆?/p>
3 鐢寵閲婃斁瑕侀厤瀵廣?/p>
4 閲婃斁鍐呭瓨璁劇疆NULL錛岄槻姝駭鐢熼噹鎸囬拡銆?/p>
C++璇█涓紝鍑芥暟鐨勫弬鏁板拰榪斿洖鍊肩殑浼犻掓柟寮忔湁涓夌錛氬間紶閫掋佹寚閽堜紶閫掑拰寮曠敤浼犻掋?o:p>
鍊間紶閫?o:p>
鍑芥暟鍐呯殑褰㈠弬鏄疄鍙傦紙澶栭儴鍙橀噺錛夌殑涓涓嫹璐濓紝鎵浠ヤ笉浼氬獎鍝嶅疄鍙傦紙澶栭儴鍙橀噺錛夌殑鍊箋?/p>
void Func1(int x)
{
x = x + 10;
}
…
int n = 0;
Func1(n);
cout << “n = ” << n << endl; // n = 0
鎸囬拡浼犻?o:p>
void Func2(int *x)
{
(* x) = (* x) + 10;
}
…
int n = 0;
Func2(&n);
cout << “n = ” << n << endl; // n = 10
寮曠敤浼犻?o:p>
void Func3(int &x)
{
x = x + 10;
}
…
int n = 0;
Func3(n);
cout << “n = ” << n << endl; // n = 10
鎸囬拡鍔熻兘寮哄ぇ錛屼絾闈炲父鍗遍櫓銆傛伆濡傚叾鍒嗙殑浣跨敤“寮曠敤”錛屽彂鎸ュ叾浣滅敤銆?/p>
涓鑸厛鑰冭檻“寮曠敤”錛屽鏋?#8220;寮曠敤”涓嶈兘鍋氱殑浜嬶紝鍒欏啀鐢?#8220;鎸囬拡”鏉ュ畬鎴愩?/p>
pragma灝辨槸涓轟簡璁╃紪璇戝櫒緙栬瘧鍑虹殑C鎴朇++紼嬪簭涓庢満鍣ㄧ‖浠跺拰鎿嶄綔緋葷粺淇濇寔瀹屽叏鍏煎鑰屽畾涔夌殑瀹忔墿灞曪紝#pragma鏄拰鐗瑰畾緙栬瘧鍣ㄧ浉鍏崇殑銆?/p>
涓銆丳ragma璇存槑(Directives)
C鍜孋++紼嬪簭鐨勬瘡嬈℃墽琛岄兘鏀寔鍏舵墍鍦ㄧ殑涓繪満鎴栨搷浣滅郴緇熸墍鍏鋒湁鐨勪竴浜涚嫭鐗圭殑鐗圭偣銆?br>涓浜涚▼搴?渚嬪錛岄渶瑕佺簿紜帶鍒舵暟鎹瓨鏀劇殑鍐呭瓨鍖哄煙鎴栨帶鍒舵煇涓嚱鏁版帴鏀剁殑鍙傛暟銆?br>#pragma鎸囩ず涓虹紪璇戝櫒鎻愪緵浜嗕竴縐嶅湪涓嶅悓鏈哄櫒鍜屾搷浣滅郴緇熶笂緙栬瘧浠ヤ繚鎸丆鍜孋++瀹屽叏鍏煎鐨勬柟娉曘侾ragmas鏄敱鏈哄櫒鍜岀浉鍏崇殑鎿嶄綔緋葷粺瀹氫箟鐨勶紝閫氬父瀵規(guī)瘡涓紪璇戝櫒鏉ヨ鏄笉鍚岀殑銆?/p>
浜屻佽娉?Syntax)
#pragma token-string(鐗瑰緛瀛楃涓?鐗瑰緛瀛楃涓叉槸涓榪炰覆鐨勫瓧絎︼紝灝辨槸瑕佺粰涓涓壒瀹氱紪璇戝櫒鎻愪緵璇存槑鍜岀紪璇戞剰瑙併?/p>
絎﹀彿(#)蹇呴』鏄痯ragma鎵鍦ㄩ偅涓琛岀殑絎竴涓潪絀烘牸瀛楃;
#鍙峰拰pragma涔嬮棿鍙互鏈変換鎰忎釜絀烘牸絎︺?br>鍦?pragma涔嬪悗錛屾槸鍙互琚紪璇戝櫒瑙f瀽鐨勯澶勭悊鐗瑰緛瀛楃銆?br>涓鑸涓?#pragma灞炰簬瀹忔墿灞曘?br>濡傛灉緙栬瘧鍣ㄥ彂鐜頒笉璁よ瘑鐨刾ragma,浼氭彁鍑鴻鍛婏紝浣嗙戶緇紪璇戜笅鍘匯?/p>
Pragmas鍙互鐢ㄥ湪鏉′歡澹版槑涓婏紝鎻愪緵鏈鏂扮殑鍔熻兘鎬х殑棰勫鐞嗙▼搴忥紝鎴栬呮彁渚涚粰緙栬瘧鍣ㄥ畾涔夋墽琛岀殑淇℃伅銆?/p>
鍏舵牸寮忎竴鑸負: #pragma para
鍏朵腑para涓哄弬鏁幫紝涓嬮潰鏉ョ湅涓浜涘父鐢ㄧ殑鍙傛暟銆?br>
alloc_text
comment //娉ㄩ噴
init_seg1
optimize //鏈浼樺寲
auto_inline
component //緇勬垚閮ㄤ歡
inline_depth
pack //鍖?br>bss_seg
data_seg
inline_recursion //鍐呭祵閫掑綊
pointers_to_members1
check_stack
function
intrinsic //鍐呭湪鐨?br>setlocale
code_seg
hdrstop
message
vtordisp1
const_seg
include_alias
once
warning
鍙傛暟璇﹁В
diary files\#pragma 棰勫鐞嗘寚浠よ瑙?doc
* 閫掑綊閿侊細鍙﹀涓鏂歸潰錛岄掑綊閿佸厑璁?/span>acquire鏂規(guī)硶宓屽璋冪敤錛屽彧瑕佸綋鍓嶆嫢鏈夎閿佺殑綰跨▼灝辨槸璇曞浘閲嶆柊鑾峰彇瀹冪殑綰跨▼銆傞掑綊閿佸浜庡洖璋冮┍鍔ㄧ殑浜嬩歡鍒嗘淳鏋勬灦錛堟瘮濡?/span>
#include <iostream.h>
#include <string.h>
……
string st("test string");
……
error C2065: 'string' : undeclared identifier
瑙i噴錛?/p>
#include <string>
using namespace std;
鍥犱負鍦? using namespace std; 鎯呭喌涓嬶紝
#include <string> 鏄嬌鐢? C++ string 綾誨簱錛?nbsp;
#include <cstring> 鏄嬌鐢? C 鐨剆tring 鎿嶄綔搴撳嚱鏁? ...
緇嗚妭 鍔犱笉鍔?#8220;.h”
#include <iostream.h>
#include <string>
using namespace std;
娌℃湁閿欙紒錛?/p>
鑰?/p>
#include <iostream.h>
#include <string.h>
using namespace std;
緙栬瘧鏈夐敊錛侊紒
瑙i噴
“string.h“榪欎釜澶存枃浠舵槸“鏃у紡c澶存枃浠?#8221;錛岃岃繖涓枃浠朵腑娌℃湁瀹氫箟string綾伙紙榪欑偣搴旇涓嶅鎬紝c璇█涓摢鏈変粈涔堢被鍟婏級錛岃繖涓ご鏂囦歡閲岄潰鏄湁鍏?#8220;鏃у紡char-based瀛楃涓?#8221;鐨勬搷浣滃嚱鏁幫紝娉ㄦ剰閮芥槸鎿嶄綔char*瀛楃涓茬殑“鍑芥暟”錛屾墍浠ヤ綘寮曠敤榪欎釜澶存枃浠訛紝緙栬瘧鍣ㄨ偗瀹氭壘涓嶅埌“string”浜嗐?
“string”榪欎釜澶存枃浠訛紙娌℃湁鎵╁睍鍚嶏級鏄疌++鏍囧噯鍖栦箣鍚庣殑C++澶存枃浠訛紝閲岄潰鎵嶆湁string綾葷殑鐩稿叧瀹氫箟錛堝叾瀹烇紝string騫朵笉鏄被錛屾槸涓涓猼ypedef錛屼絾鏄嬌鐢ㄧ殑鏃跺欎笉鐢ㄥ幓綆′粬錛夛紝鑰孋++鏍囧噯澶存枃浠朵腑鐨勪笢瑗塊兘鏀懼湪namespace std涓簡錛屾墍浠ヤ嬌鐢ㄧ殑鏃跺欒“using namespace std”銆?
闄勶細寤鴻妤間富涓嶈鐢?iostream.h"錛屾敼鎴?#8220;iostream”鍚э紝鍥犱負鏍囧噯宸茬粡鏄庣‘瑙勫畾涓嶅湪鏀寔"iostream.h"榪欑澶存枃浠朵簡銆?/p>
鏍囧噯鍐欐硶
#include <iostream>
#include <string>
using namespace std;
F: 涓轟粈涔坲sing namespace std;
瑕佸啓鍦╥nclude鍚庨潰錛?/p>
Q: 鍥犱負include鐨勬枃浠跺寘鍚悕瀛楀煙std
濡傛灉浣犳妸using namespace std鍐欏湪鍓嶉潰錛岀紪璇戝櫒灝辯湅涓嶅埌std榪欎釜鍚嶅瓧
寮曠敤鎻愰珮鏁堢巼錛屽張涓嶅湪鍑芥暟涓敼鍙樸傚弬鑰冿細file:///F:/fragments/documents/娣卞叆鎺㈣C++涓殑寮曠敤%20-%20KiRa鐨勪笓鏍?20-%20CSDNBlog.mht
甯稿紩鐢?/p>
甯稿紩鐢ㄥ0鏄庢柟寮忥細const 綾誨瀷鏍囪瘑絎?&寮曠敤鍚?= 鐩爣鍙橀噺鍚嶏紱
const綾誨瀷 鍜?& 鏄垎涓嶅紑鐨勶紝寮曠敤涓鑸畾涔夋垚const銆?/p>
寮曠敤浣滀負榪斿洖鍊?/p>
瑕佷互寮曠敤榪斿洖鍑芥暟鍊鹼紝鍒欏嚱鏁板畾涔夋椂瑕佹寜浠ヤ笅鏍煎紡錛?/p>
綾誨瀷鏍囪瘑絎?&鍑芥暟鍚嶏紙褰㈠弬鍒楄〃鍙婄被鍨嬭鏄庯級
{
鍑芥暟浣?/p>
}
璇存槑錛?/p>
銆銆錛?錛変互寮曠敤榪斿洖鍑芥暟鍊鹼紝瀹氫箟鍑芥暟鏃墮渶瑕佸湪鍑芥暟鍚嶅墠鍔?amp;
銆銆錛?錛夌敤寮曠敤榪斿洖涓涓嚱鏁板肩殑鏈澶уソ澶勬槸錛屽湪鍐呭瓨涓笉浜х敓琚繑鍥炲肩殑鍓湰銆?/p>
渚嬪瓙錛?a href="http://m.shnenglu.com/robinson119/admin/C++exams/rtn_ref">Diary files\C++exams\rtn_ref
寮曠敤浣滀負榪斿洖鍊鹼紝蹇呴』閬靛畧浠ヤ笅瑙勫垯錛?/p>
錛?錛変笉鑳借繑鍥炲眬閮ㄥ彉閲忕殑寮曠敤銆傝繖鏉″彲浠ュ弬鐓ffective C++[1]鐨処tem 31銆備富瑕佸師鍥犳槸灞閮ㄥ彉閲忎細鍦ㄥ嚱鏁拌繑鍥炲悗琚攢姣侊紝鍥犳琚繑鍥炵殑寮曠敤灝辨垚涓轟簡"鏃犳墍鎸?鐨勫紩鐢紝紼嬪簭浼氳繘鍏ユ湭鐭ョ姸鎬併?
錛?錛変笉鑳借繑鍥炲嚱鏁板唴閮╪ew鍒嗛厤鐨勫唴瀛樼殑寮曠敤銆傝繖鏉″彲浠ュ弬鐓ffective C++[1]鐨処tem 31銆傝櫧鐒朵笉瀛樺湪灞閮ㄥ彉閲忕殑琚姩閿姣侀棶棰橈紝鍙浜庤繖縐嶆儏鍐碉紙榪斿洖鍑芥暟鍐呴儴new鍒嗛厤鍐呭瓨鐨勫紩鐢級錛屽張闈復鍏跺畠?yōu)灏眬闈€備緥濡傦紝琚嚱鏁拌繑鍥炵殑寮曠敤鍙槸浣滀負涓涓復鏃跺彉閲忓嚭鐜幫紝鑰屾病鏈夎璧嬩簣涓涓疄闄呯殑鍙橀噺錛岄偅涔堣繖涓紩鐢ㄦ墍鎸囧悜鐨勭┖闂達紙鐢眓ew鍒嗛厤錛夊氨鏃犳硶閲婃斁錛岄犳垚memory leak銆?/p>
錛?錛夊彲浠ヨ繑鍥炵被鎴愬憳鐨勫紩鐢紝浣嗘渶濂芥槸const銆傝繖鏉″師鍒欏彲浠ュ弬鐓ffective C++[1]鐨処tem 30銆備富瑕佸師鍥犳槸褰撳璞$殑灞炴ф槸涓庢煇縐嶄笟鍔¤鍒欙紙business rule錛夌浉鍏寵仈鐨勬椂鍊欙紝鍏惰祴鍊煎父甯鎬笌鏌愪簺鍏跺畠灞炴ф垨鑰呭璞$殑鐘舵佹湁鍏籌紝鍥犳鏈夊繀瑕佸皢璧嬪兼搷浣滃皝瑁呭湪涓涓笟鍔¤鍒欏綋涓傚鏋滃叾瀹冨璞″彲浠ヨ幏寰楄灞炴х殑闈炲父閲忓紩鐢紙鎴栨寚閽堬級錛岄偅涔堝璇ュ睘鎬х殑鍗曠函璧嬪煎氨浼氱牬鍧忎笟鍔¤鍒欑殑瀹屾暣鎬с?/p>
錛?錛夊紩鐢ㄤ笌涓浜涙搷浣滅鐨勯噸杞斤細
銆銆嫻佹搷浣滅<<鍜?gt;>錛岃繖涓や釜鎿嶄綔絎﹀父甯稿笇鏈涜榪炵畫浣跨敤錛屼緥濡傦細cout << "hello" << endl;銆鍥犳榪欎袱涓搷浣滅鐨勮繑鍥炲煎簲璇ユ槸涓涓粛鐒舵敮鎸佽繖涓や釜鎿嶄綔絎︾殑嫻佸紩鐢ㄣ傚彲閫夌殑鍏跺畠鏂規(guī)鍖呮嫭錛氳繑鍥炰竴涓祦瀵硅薄鍜岃繑鍥炰竴涓祦瀵硅薄鎸囬拡銆備絾鏄浜庤繑鍥炰竴涓祦瀵硅薄錛岀▼搴忓繀欏婚噸鏂幫紙鎷瘋礉錛夋瀯閫犱竴涓柊鐨勬祦瀵硅薄錛屼篃灝辨槸璇達紝榪炵畫鐨勪袱涓?lt;<鎿嶄綔絎﹀疄闄呬笂鏄拡瀵逛笉鍚屽璞$殑錛佽繖鏃犳硶璁╀漢鎺ュ彈銆傚浜庤繑鍥炰竴涓祦鎸囬拡鍒欎笉鑳借繛緇嬌鐢?lt;<鎿嶄綔絎︺傚洜姝わ紝榪斿洖涓涓祦瀵硅薄寮曠敤鏄儫涓閫夋嫨銆傝繖涓敮涓閫夋嫨寰堝叧閿紝瀹冭鏄庝簡寮曠敤鐨勯噸瑕佹т互鍙婃棤鍙浛浠fэ紝涔熻榪欏氨鏄疌++璇█涓紩鍏ュ紩鐢ㄨ繖涓蹇電殑鍘熷洜鍚с?璧嬪兼搷浣滅=銆傝繖涓搷浣滅璞℃祦鎿嶄綔絎︿竴鏍鳳紝鏄彲浠ヨ繛緇嬌鐢ㄧ殑錛屼緥濡傦細x = j = 10;鎴栬?x=10)=100;璧嬪兼搷浣滅鐨勮繑鍥炲煎繀欏繪槸涓涓乏鍊鹼紝浠ヤ究鍙互琚戶緇祴鍊箋傚洜姝ゅ紩鐢ㄦ垚浜嗚繖涓搷浣滅鐨勬儫涓榪斿洖鍊奸夋嫨銆?/p>
// 琚皟鐢ㄥ嚱鏁版槸浠nt涓哄弬鏁幫紝浠nt涓鴻繑鍥炲?br>__stdcall int callee(int);
// 璋冪敤鍑芥暟浠ュ嚱鏁版寚閽堜負鍙傛暟
void caller( __cdecl int(*ptr)(int));
// 鍦╬涓紒鍥懼瓨鍌ㄨ璋冪敤鍑芥暟鍦板潃鐨勯潪娉曟搷浣?br>__cdecl int(*p)(int) = callee; // 鍑洪敊
鎸囬拡p鍜宑allee()鐨勭被鍨嬩笉鍏煎錛屽洜涓哄畠浠湁涓嶅悓鐨勮皟鐢ㄨ鑼冦傚洜姝や笉鑳藉皢琚皟鐢ㄨ呯殑鍦板潃璧嬪肩粰鎸囬拡p錛屽敖綆′袱鑰呮湁鐩稿悓鐨勮繑鍥炲煎拰鍙傛暟鍒椼?nbsp;
鍏堝畾涔夊嚱鏁幫紝void print(string str)錛?/p>
澹版槑涓涓嚱鏁版寚閽堬紝void ( *p )( string ) = NULL;
鎸囧悜copy鍑芥暟錛宲 = & print; 鎴?p = print錛?/p>
璋冪敤鎸囬拡鍑芥暟錛宲( “hello” );
鍙互鎶婂涓嚱鏁版斁鍦ㄤ竴涓寚閽堟暟緇勯噷錛岀劧鍚庨氳繃鏁扮粍瀵瑰簲鎸囬拡鏂逛究璋冪敤鍑芥暟銆?/p>
渚嬪瓙錛?a href="http://m.shnenglu.com/robinson119/admin/C++exams/pointer_func">Diary files\C++exams\pointer_func
鍔ㄦ佺粦瀹氫竴涓嚱鏁?/p>
void caller(void(*ptr)())
{
ptr(); /* 璋冪敤ptr鎸囧悜鐨勫嚱鏁?*/
}
void func();
int main()
{
p = func;
caller(p); /* 浼犻掑嚱鏁板湴鍧鍒拌皟鐢ㄨ?*/
}
濡傛灉璧嬩簡涓嶅悓鐨勫肩粰p錛堜笉鍚屽嚱鏁板湴鍧錛夛紝閭d箞璋冪敤鑰呭皢璋冪敤涓嶅悓鍦板潃鐨勫嚱鏁般傝祴鍊煎彲浠ュ彂鐢熷湪榪愯鏃訛紝榪欐牱浣夸綘鑳藉疄鐜板姩鎬佺粦瀹氥?/p>
鍔ㄦ佽仈緙栵細紼嬪簭榪愯涔嬪悗鎵嶅畬鎴愮殑鑱旂紪錛岀郴緇熷湪榪愯鏃跺姩鎬佸疄鐜版煇涓鍔ㄤ綔銆?/span>
闈欐佸鎬佹э細鍑芥暟閲嶈澆錛涜繍綆楃閲嶈澆錛?/span>
鍔ㄦ佸鎬佹э細緇ф壙錛涜櫄鍑芥暟錛?br>
鍑芥暟閲嶈澆
1 鍙傛暟鏈夊樊鍒?/span>
2 鍙傛暟鐩稿悓錛屽睘涓嶅悓綾匯?/span>
涓涓噸杞界殑渚嬪瓙錛?/span>Diary files\C++exams\func_reload
鍚嶅瓧鍘嬪歡錛?/span>鏄紪璇戝櫒鏍規(guī)嵁鍑芥暟閲嶈澆鐨勪笉鍚岀被鍨嬶紝鍦ㄧ紪璇戞椂鏀瑰彉鍑芥暟鍚嶅瓧錛岃岃揪鍒板尯鍒嗙殑鐩殑銆?/span>
榪樿娉ㄦ剰錛氬弸鍏冨嚱鏁扮殑鍏ュ彛鍖呮嫭澶氫釜綾伙紝閭h繖浜涚被閮借鍦ㄥ弸鍏冨嚱鏁頒箣鍓嶅0鏄庛?/p>
濡備緥瀛愶細Diary files\C++exams\frnd_vst2_func
濡傛灉鏄被person鐨勪袱涓戶鎵夸粬鐨勫瓙綾籦oy鍜実irl錛岄偅涔堝弸鍏冨嚱鏁板浣曞0鏄庡拰瀹氫箟銆?/p>
Diary files\C++exams\frnd_member
榪欓渶瑕佹敞鎰忕殑鍦版柟鏈夛細
鍩虹被鐨勬暟鎹垚鍛樺叡鏈夛紱鏋勯犲嚱鏁幫紱鏋勯犲嚱鏁板垵濮嬪寲琛紱綾葷殑澹版槑鍏堜簬鍙嬪厓鍑芥暟錛屾彁楂樹簡閲嶇敤鎬э紱
鍩虹被鐨勬暟鎹垚鍛樺繀欏誨叡鏈夛紝鍥犱負鏋勯犲嚱鏁頒細璁塊棶鍒板畠浠紝瀛愮被鐨勬瀯閫犲嚱鏁頒篃浼氬紩鐢ㄥ熀綾葷殑鏋勯犲嚱鏁幫紝濡傛灉鏄鏈夌殑浼氭槸鐨勫瓙綾繪瀯閫犲嚱鏁頒笉鑳界洿鎺ヨ闂熀綾葷殑縐佹湁鎴愬憳錛岃閫氳繃鍩虹被鐨勬垚鍛樺嚱鏁版潵璁塊棶銆?/p>
瀛愮被錛歱ublic鍩虹被
榪樻湁鍐欑粏鑺傞棶棰橈細
澶存枃浠訛紱char *a鐨勫0鏄庡拰浣跨敤錛涘垎閰峜har*鏁版嵁錛?/p>
渚嬪錛?/p>
char *name;
name = new char[ strlen( s ) + 1 ];
鍙嬪厓鍑芥暟鐨勫0鏄庢椂鐨勫叆鍙e弬鏁板彲浠ュ彧鍐欑被鍨嬶紝涓嶅啓鍙傛暟鍚嶃?/p>
渚嬪錛?/p>
class boy
{
……
void disp( gril & );
}
娉ㄦ剰澹版槑鏃剁殑鍏ュ彛鍙傛暟鍙渷鐣ワ紝浣嗚鍐?amp;銆?/p>
瀹氫箟鏃訛紝鍐欐垚
void disp( gril &x ){ …… }
int i; <class> *this錛?/p>
this鎸囬拡鏄竴涓殣鍚寚閽堬紝鏄垚鍛樺嚱鏁版墍灞炲璞$殑鎸囬拡銆?/p>
姣忎釜鎴愬憳鍑芥暟閮芥湁涓涓猼his鎸囬拡錛宼his鎸囬拡鎸囧悜璇ュ嚱鏁版墍灞炵被鐨勫璞°?/p>
浣跨敤鏍煎紡錛歵his -> 鎴愬憳鍙橀噺
涓嶅悓鐨勫璞¤皟鐢ㄥ悓涓涓垚鍛樺嚱鏁幫紝C++浼氭牴鎹垚鍛樺嚱鏁扮殑this鎸囬拡鎸囧悜鍝竴涓璞★紝鏉ヨ皟鐢ㄨ瀵硅薄鐨勬垚鍛樺彉閲忋?/p>
this鎸囬拡濡備綍寰楀埌瀵硅薄鍚嶏紵
渚嬪錛氫竴涓被class me鐨勫垵濮嬪寲鍑芥暟錛?/p>
void init(char ma, int mb)
{ a = ma; b = mb; }
緙栬瘧鏃訛紝琚紪璇戝櫒杞寲涓猴細
void init(me *this, char ma, int mb) //澶氫簡涓涓猼his鎸囬拡鐨勫弬鏁幫紝鎸囧悜me綾葷殑obj
{ this -> a = ma, this -> b = mb; }
瀵逛簬鍙仛杈撳叆鐢ㄧ殑鎸囬拡鍙傛暟錛屾渶濂界敤const錛岃繖鏍烽伩鍏嶆寚閽堝弬鏁拌淇敼銆?
姣斿錛氬浜庝笂闈㈢殑StringCopy鐨勪緥瀛愶紝鍐欐垚
void StringCopy (char *strDestination, const char *strSource); //姣旇緝瀹夊叏銆?/p>
浣嗘槸濡傛灉杈撳叆鍙傛暟浠ュ間紶閫掔殑褰㈠紡浼犻掑璞★紝鍒欐敼涓轟嬌鐢╟onst &鏈濂斤紝鍥犱負鐪佸幓浜嗕復鏃跺璞$殑鏋勯犲拰瑙f瀽鐨勮繃紼嬶紝鎻愰珮鏁堢巼鍜屽畨鍏ㄦс?/p>
int printf錛?#8230;…錛夛紱榪欎釜鍑芥暟鐨勫弬鏁頒笉紜畾錛屾病鏈変弗鏍肩殑綾誨瀷媯鏌ワ紝鎵浠ユ渶濂戒笉鐢ㄣ?/span>