锘??xml version="1.0" encoding="utf-8" standalone="yes"?> 鎴戜滑鐨勮繖嬈炬父鎴忎粠寮鍙戝埌涓婄嚎鑷充粖宸叉湁澶ф4騫翠簡錛屾槰澶╁彂鐜頒唬鐮佷腑鏈塶ew鍑烘潵鐨勫璞℃病鏈塪elete錛岀▼搴忛鍑哄悗VS杈撳嚭鏍忎腑灞呯劧娌℃湁鎻愮ず錛岄毦閬撶▼搴忎腑娌℃湁鍐呭瓨娉勬紡媯瀵燂紵榪涗竴姝ョ殑姹傝瘉紜畾浜嗘垜鐨勬媴蹇э紙鎴戞槸鍗婅礬榪涚殑欏圭洰緇勶級銆傚湪浠g爜涓姞涓奯CrtSetDbgFlag(_CrtSetDbgFlag(_CRTDBG_REPORT_FLAG) | _CRTDBG_LEAK_CHECK_DF)鍚庯紝VS鐨勮緭鍑烘爮璧劧鏄劇ず浜嗗ぇ閲忕殑鍐呭瓨娉勬紡銆傚湪鍔ㄦ墜瑙e喅鍐呭瓨娉勬紡涔嬪墠錛屽厛澶嶄範涓涓嬫湁鍏硁ew鎿嶄綔絎﹂噸杞界殑鐩稿叧鐭ヨ瘑錛?/p> new 鎿嶄綔絎︽寜鍏跺彲瑙佹у彲鍒嗕負鍏ㄥ眬鐨勪笌灞閮ㄧ殑(綾繪垚鍛?錛屾垜浠彲浠ュ浠栦滑榪涜閲嶈澆錛屼笅闈㈡槸VS 2010涓璶ew.cpp涓璶ew鎿嶄綔絎︾殑澹版槑 璋冪敤new鏃訛紝浼犲叆鐨勫弬鏁版瘮new澹版槑鏃剁殑鍙傛暟灝戜簡涓涓紝鍗崇涓涓弬鏁幫紝璇ュ弬鏁版槸new鐨勫璞$殑澶у皬錛岀敱緙栬瘧鍣ㄥ~鍐欙紝紱佹紼嬪簭鍛樿嚜宸辨彃鎵嬨?/p> 瀵逛竴涓被閲嶈澆new鍜宒elete 褰撴垜浠琻ew涓涓嚜瀹氫箟綾繪椂錛屽鏋滆綾婚噸杞戒簡new鎿嶄綔絎︼紝鍒欎紭鍏堜嬌鐢ㄨ綾誨唴閮ㄥ畾涔夌殑new錛屽鏋滆繖鏃墮潪瑕佽皟鐢ㄥ叏灞鐨刵ew鎿嶄綔絎︽庝箞鍔炲憿錛熷彲浠ュ湪new鍓嶉潰鍔犱袱涓啋鍙? 涓嬮潰鍥炲埌瑙e喅鍐呭瓨娉勬紡鐨勬楠や笂錛?/p> 1 鍦ㄧ▼搴忓繀瀹氫細鎵ц鐨勮礬寰勪笂鍔犱笂錛?/p> 涓嶄竴瀹氶潪寰楁槸紼嬪簭鐨勬渶寮濮嬪 2 浣跨敤涓婇潰緇欏嚭鐨勭2涓猲ew鎿嶄綔絎︼紝褰撶▼搴忛鍑烘椂錛屽畠浼氬湪VS杈撳嚭鏍忎腑娉ㄦ槑鏄摢琛屼唬鐮佸紩璧風殑鍐呭瓨娉勬紡銆傚嵆鎵鏈夌殑new 閮芥敼涓?/p> 瀹屼簡銆傘傘傘傘傝繖鏍峰氨鍙互浜嗐?br /> 浣嗘槸錛屾垜浠▼搴忓凡鏈夌殑浠g爜閮藉啓鐨勬槸new錛岃屼笉鏄痭ew ( _NORMAL_BLOCK, __FILE__, __LINE__ )銆?/p> 榪欐牱濂藉儚鏄彲浠ヨВ鍐抽棶棰橈紝浣嗘槸鎴戜滑娓告垙涓敤浜咷amebryo娓告垙寮曟搸錛岃繖涓紩鎿庝腑寰堝綾誨唴閮ㄩ噸杞戒簡new鎿嶄綔絎︼紝騫朵笖榪樻湁濡備笅鐨勫畯瀹氫箟錛?/p> 騫朵笖寮曟搸鑷甫鐨勫璞¢兘鏄氳繃NiNew鏉ュ垱寤虹殑錛屽 NiNew NiAlphaProperty(); 濡傛灉鎴戜滑鎶妌ew 瀹忓畾涔夋垚浜唍ew ( _NORMAL_BLOCK, __FILE__, __LINE__ )錛岄偅涔堢鍒癗iNew NiAlphaProperty()鍚庯紝浠g爜灝辮灞曞紑鎴愪負 new ( _NORMAL_BLOCK, __FILE__, __LINE__ ) ( NI_MEMHINT_NONE, __FILE__, __LINE__ , __FUNCTION__ ) NiAlphaProperty(); 褰撶紪璇戝櫒灝濊瘯鐫鐢ㄦ浠g爜涓嶯iAlphaProperty綾誨唴閮ㄥ畾涔夌殑new鎿嶄綔絎﹀幓鍖歸厤鏃跺氨鎶撶瀻浜嗭紝鍙兘鎶ラ敊銆?/p> 鐩墠灝卞彧鑳借嚜宸卞啀瀹氫箟涓涓畯: 灝嗕唬鐮佷腑鎵鏈夌殑new鏇挎崲鎴怤ew銆?br /> (娉? _CrtSetBreakAlloc()瀵瑰ぇ鍨嬬殑C++宸ョ▼涓嶅お瀹炵敤 )
2 void * operator new ( size_t size, int nBlockUse, const char * szFileName, int nLine ); //2
{
char * p = new char; //璋冪敤絎?涓猲ew
p = new ( _NORMAL_BLOCK, __FILE__, __LINE__ ) char; //璋冪敤絎?涓猲ew
}
{
void * operator new( size_t size ) //3
{
std::cout << __FUNCTION__ << std::endl;
return malloc( sizeof(Student) );
}
};
MFC涓殑瑙e喅鏂規(guī)硶錛?/p>
鍙︿竴縐嶅唴瀛樻硠婕忔嫻嬫柟娉曞氨鏄熺敤絎?鏂圭殑搴?/strong>:
Visual Leak Detector 鏄竴涓笉閿欑殑娉勬紡媯嫻嬪簱錛屼笅杞藉湴鍧錛?br />http://vld.codeplex.com/releases/view/82311
鍙渶瑕佸湪鑷繁鐨勭▼搴忕殑main鍑芥暟鎵鍦ㄧ殑鏂囦歡涓?include <vld.h>灝卞彲浠ヤ簡錛屼嬌鐢ㄨ搗鏉ュ緢鏂逛究銆?/p>
]]>
1000,灝忔槑,鍥㈠憳,婀栧寳姝︽槍XXXX
1001,寮犲崕,鍏氬憳,婀栧寳瀹滄槍XXXX.
FILE * fp = fopen( pszFilePath, "r");
int n = 1;
while( n > 0 && !feof( fp ) )
{
int nID;
char szName[100] = {0};
char szBelong[100] = {0};
char szAddress[300] = {0};
n = fscanf( fp, "%d,%[^','],%[^','],%s\r\n", &nID, szName, szBelong, szAddress);
//.
}
]]>
_TEXT SEGMENT
_wmain PROC
push ebp ; 淇濆瓨鏃х殑ebp
mov ebp, esp ; ebp淇濆瓨褰撳墠鏍堢殑浣嶇疆
push -1 ; 寤虹珛SEH(Structured Exception Handler)閾?/font>
; -1琛ㄧず琛ㄥご,娌℃湁Prev
push __ehhandler$_wmain ; SEH寮傚父澶勭悊紼嬪簭鐨勫湴鍧
mov eax, DWORD PTR fs:0 ; fs:0鎸囧悜TEB鐨勫唴瀹癸紝澶?涓瓧鑺傛槸褰撳墠SEH閾劇殑鍦板潃
push eax ; 淇濆瓨璧鋒潵
sub esp, d8H ; 鍒嗛厤d8H瀛楄妭鐨勭┖闂?/font>
push ebx
push esi
push edi
lea edi, DWORD PTR [ebp-e4H] ; e4H = d8H + 4 * 3錛岃煩榪囦腑闂磂bx, esi, edi
mov ecx, 36H ; 36H*4H=d8H錛屼篃灝辨槸鐢?6H涓猚cccccccH濉弧鍒氭墠鍒嗛厤鐨刣8H瀛楄妭絀洪棿
mov eax, ccccccccH
rep stosd
mov eax, DWORD PTR ___security_cookie
xor eax, ebp
push eax ; ebp ^ __security_cookie鍘嬫爤淇濆瓨
lea eax, DWORD PTR [ebp-0cH] ; ebp-0cH鏄柊鐨凷EH閾劇殑緇撴瀯鍦板潃錛堝垰鍘嬪叆鏍堜腑鐨勬爤鍦板潃錛?/font>
mov DWORD PTR fs:0, eax ; 璁劇疆鍒癟EB涓綔涓哄綋鍓岮ctive鐨凷EH閾捐〃鏈熬
|
Security cookie after XOR
|
Edi
|
Esi
|
Ebx
|
Local stack: d8H
|
Old fs:0
|
__ehhandler$_wmain
|
ffffffffH
|
Old ebp
|
lea ecx, DWORD PTR [ebp-14H]
call ??0my_class@@QAE@XZ ; 璋冪敤my_class::my_class, ??my_class@@QAE@XZ鏄粡榪嘚ame Mangling鍚庣殑鍚嶅瓧
mov DWORD PTR [ebp-4], 0 ; 榪涘叆__try鍧楋紝鍦∕ain涓湁涓涓殣寮忕殑__try/__except鍧?/font>
|
push 10 ; 鍙傛暟鍏ユ爤
lea ecx, DWORD PTR [ebp-14H] ; 閬靛驚thiscall璋冪敤鍗忓畾錛宔cx瀛樻斁鐨勬槸this鎸囬拡
call ?method@my_class@@QAEXH@Z ; 璋冪敤瀛愮▼搴弇y_class:method(10)
|
mov DWORD PTR [ebp-e0H], 0 ; 鐢ㄦ潵鏀劇疆榪斿洖鍊?/font>
mov DWORD PTR [ebp-4], -1 ; 鏍囪TRY鐨勬甯哥粨鏉?/font>
lea ecx, DWORD PTR [ebp-14H] ; a_class鐨勫湴鍧浣滀負this瀛樺叆ECX
call ??1my_class@@QAE@XZ ; my_class::~my_class
mov eax, DWORD PTR [ebp-e0H] ; 榪斿洖鍊兼寜鐓х害瀹氭斁鍏ax涓?/font>
|
push edx
mov ecx, ebp
push eax
lea edx, DWORD PTR $LN7@wmain
call @_RTC_CheckStackVars@8 ; 媯鏌ユ爤
pop eax
pop edx
mov ecx, DWORD PTR [ebp-0cH] ; 鍙栧嚭涔嬪墠淇濆瓨鐨勬棫鐨刦s:0錛屽茍鎭㈠
mov DWORD PTR fs:0, ecx
pop ecx
pop edi
pop esi
pop ebx
add esp, e4H ; 閫鎺夊垎閰嶇殑d8H + 寤虹珛SEH閾炬墍闇鐨?cH瀛楄妭
cmp ebp, esp
call __RTC_CheckEsp ; 媯鏌sp鍊鹼紝榪欎釜鏃跺檈sp搴旇鍜宔bp鍖歸厤錛屽惁鍒欒鏄庡嚭鐜頒簡鏍堜笉騫寵 鐨勬儏鍐碉紝榪欑鎯呭喌涓嬭皟鐢ㄥ瓙紼嬪簭鎶ラ敊
mov esp, ebp ; 鎭㈠ebp鍒癳sp
pop ebp ; 鎭㈠鍘熸潵鐨別bp鍊?/font>
ret 0
_wmain ENDP
|
Text$x SEGMENT
__unwindfunclet$_wmain$0: ; 褰揝EH鍙戠敓鐨勬椂鍊欎細璋冪敤璇ュ嚱鏁幫紝鏋愯喘a_class
lea ecx, DWORD PTR [ebp-14H] ; ecx = [ebp – 14H]錛屼篃灝辨槸a_class鐨勫湴鍧
jmp ??1my_class@@QAE@XZ ; 璋冪敤my_class::~my_class
__ehhandler$_wmain:
mov edx, DWORD PTR [esp+8] ; esp = 褰撳墠鐨刦s:0, [esp + 8] = 涔嬪墠鐨凷EH緇撴瀯錛屼篃灝辨槸main涓緩绔嬬殑
lea eax, DWORD PTR [edx+0cH] ; edx + 0Ch = 褰撳墠鐨別bp錛屼篃灝辨槸main鐨別bp錛屾鏃朵笉鑳界洿鎺ヤ嬌鐢╡bp鍥犱負鍙兘浼氫粠浠繪剰鍑芥暟璋冭繃鏉ワ紝姝ゆ椂ebp鏄鍑芥暟鐨別bp錛岃屼笉鏄痬ain鐨別bp
mov ecx, DWORD PTR [edx-e0H] ; 涔嬪墠瀛樹笅鍘葷殑__security_cookie ^ ebp
xor ecx, eax ; 鍐嶆鍜宔bp鐩稿紓鎴?/font>
call @__security_check_cookie@4 ; 姝ゆ椂ecx搴旇絳変簬__security_cookie錛屽惁鍒欒鏄庢爤鐨勫唴瀹硅鎭舵剰鏀瑰姩錛堟垨鑰呯紪紼嬮敊璇級
mov eax, OFFSET __ehfuncinfo$_wmain
jmp ___CxxFrameHandler3
text$x ENDS
|
_TEXT SEGMENT
??0my_class@@QAE@XZ PROC push ebp ; 淇濆瓨鏃х殑ebp
mov ebp, esp ; ebp淇濆瓨褰撳墠鏍堢殑浣嶇疆
sub esp, ccH ; 緇欐爤鍒嗛厤ccH涓瓧鑺?/font>
push ebx ; 淇濆瓨甯哥敤瀵勫瓨鍣?/font>
push esi
push edi
push ecx
lea edi, DWORD PTR [ebp-ccH] ; 浠庡垎閰嶇殑浣嶇疆寮濮?/font>
mov ecx, 33H ; 鍐?3H涓猚cccccccH
mov eax, ccccccccH ; 涔熷氨鏄?3H*4H=ccH錛屾濂芥槸鍒嗛厤鐨勫ぇ灝?/font>
rep stosd ; 浠庤屾妸鏁翠釜鏍堜笂褰撳墠鍒嗛厤鐨勭┖闂寸敤ccH濉弧
pop ecx
mov DWORD PTR [ebp-8], ecx ; 鎸夌収綰﹀畾錛屼竴鑸敤ECX淇濆瓨this鎸囬拡
; 鎶妕his瀛樺叆鍒癳bp-8錛屽茍涓嶆槸寰堝繀瑕侊紝鍥犱負榪欐槸Debug鐗堟湰
; 10 : {
; 11 : m_member = 1;
mov eax, DWORD PTR [ebp-8] ; eax涓瓨鏀総his
mov DWORD PTR [eax], 1 ; this鐨勫ご鍥涗釜byte鏄痬_member鐨勫唴瀹?/font>
; 12 : }
mov eax, DWORD PTR [ebp-8] ; 澶氫綑鐨勪竴鍙ヨ瘽錛屽彲浠ヤ紭鍖栨帀
pop edi
pop esi
pop ebx
mov esp, ebp ; 鎭㈠esp錛屽洜姝ゅ氨綆楁槸涓棿鏍堣繍綆楀嚭閿欙紝鏈鍚庝篃涓嶄細瀵艱嚧鐏鵑毦鎬х殑緇撴灉錛屽彧瑕乪bp榪樻槸姝g‘鐨?/font>
pop ebp
ret 0
??0my_class@@QAE@XZ ENDP
|
_TEXT SEGMENT
?method@my_class@@QAEXH@Z PROC ; my_class::method
; 15 : {
push ebp
mov ebp, esp
sub esp, ccH
push ebx
push esi
push edi
push ecx
lea edi, DWORD PTR [ebp-ccH]
mov ecx, 33H
mov eax, ccccccccH
rep stosd
pop ecx
mov DWORD PTR [ebp-8], ecx
; 16 : m_member = n;
mov eax, DWORD PTR [ebp-8] ; eax涓瓨鏀総his
mov ecx, DWORD PTR [ebp+8] ; ebp -> ebp
; ebp + 4 -> IP
; ebp + 8 -> n
; 鎶妌瀛樺叆ecx涓?/font>
mov DWORD PTR [eax], ecx ; this澶村洓涓瓧鑺傛槸m_member, 鍥犳榪欏彞璇濆氨鏄痬_member = n
; 17 : }
pop edi
pop esi
pop ebx
mov esp, ebp
pop ebp
ret 4 ; 絳変環(huán)浜?/font>
; ret 鎭㈠EIP錛岃繑鍥炶皟鐢ㄥ湴鍧
; add esp, 4 -> 鎶妌浠庢爤涓奝op鎺?/font>
?method@my_class@@QAEXH@Z ENDP
|
_TEXT SEGMENT
??1my_class@@QAE@XZ PROC ; my_class::~my_class
; 20 : {
push ebp
mov ebp, esp
sub esp, 204
push ebx
push esi
push edi
push ecx
lea edi, DWORD PTR [ebp-204]
mov ecx, 33H
mov eax, ccccccccH
rep stosd
pop ecx
mov DWORD PTR _this$[ebp], ecx
; 21 : m_member = 0;
mov eax, DWORD PTR [ebp-8]
mov DWORD PTR [eax], 0
; 22 : }
pop edi
pop esi
pop ebx
mov esp, ebp
pop ebp
ret 0
??1my_class@@QAE@XZ ENDP ; my_class::~my_class
|
銆銆瀹炰緥涓:
銆銆#include "stdafx.h"
銆銆#include <iostream.h>
銆銆class CB
銆銆{
銆銆public:
聽銆銆銆銆void f(int)
聽銆銆銆銆{
聽銆銆銆銆銆銆聽cout << "CB::f(int)" << endl;
銆銆銆銆聽}
銆銆};
銆銆class CD : public CB
銆銆{
銆銆public:
銆銆銆銆聽void f(int,int)
聽銆銆銆銆{
聽聽銆銆銆銆銆銆cout << "CD::f(int,int)" << endl;
聽銆銆銆銆}
聽銆銆銆銆void test()
聽銆銆銆銆{
聽聽銆銆銆銆銆f(1);
聽銆銆銆銆}
銆銆};
銆int main(int argc, char* argv[])
銆{
銆銆銆聽return 0;
銆}
緙栬瘧浜嗕竴涓?br />error C2660: 'f' : function does not take 1 parameters
緇撹錛氬湪綾籆D榪欎釜鍩熶腑錛屾病鏈塮(int)榪欐牱鐨勫嚱鏁幫紝鍩虹被涓殑void f(int)琚?font color="#ff0000">闅愯棌
銆銆濡傛灉鎶婃淳鐢烠D涓垚鍛樺嚱鏁皏oid f(int,int)鐨勫0鏄庢敼鎴愬拰鍩虹被涓竴鏍鳳紝鍗砯(int)錛屽熀綾諱腑鐨剉oid f(int)榪樻槸涓鏍瘋瑕嗙洊錛屾鏃剁紪璇戜笉浼氬嚭閿欙紝鍦ㄥ嚱鏁頒腑test璋冪敤鐨勬槸CD涓殑f(int)銆
銆銆鎵浠ワ紝鍦?font color="#ff0000">鍩虹被涓?/font>鐨勬煇浜涘嚱鏁幫紝濡傛灉娌℃湁virtral鍏抽敭瀛楋紝鍑芥暟鍚嶆槸f(鍙傛暟鏄粈涔堟垜浠笉綆?錛岄偅涔堝鏋滃湪媧劇敓綾籆D涓?font color="#ff0000">涔熷0鏄庝簡鏌愪釜f鎴愬憳鍑芥暟錛岄偅涔堝湪綾籆D鍩熶腑錛?font color="#ff0000">鍩虹被涓墍鏈夌殑閭d簺f閮借闅愯棌銆?/font>
銆銆濡傛灉浣犳瘮杈冨績鎬ワ紝鎯崇煡閬撲粈涔堟槸闅愯棌錛岀湅鏂囩珷鏈鍚庣殑綆鍗曡鏄庯紝涓嶈繃鎴戝緩璁綘榪樻槸涓姝ヤ竴姝ョ湅涓嬪幓銆?/p>
銆銆鎴戜滑鍒氭墠璇寸殑鏄病鏈塿irtual鐨勬儏鍐碉紝濡傛灉鏈塿irtual鐨勬儏鍐靛憿錛燂紵
銆銆瀹炰緥浜岋細
#include "stdafx.h"
#include <iostream.h>
class CB
{
public:
聽銆銆virtual void f(int)
聽銆銆{
聽聽銆銆銆銆cout << "CB::f(int)" << endl;
聽銆銆}
};
class CD : public CB
{
public:
銆銆聽void f(int)
聽銆銆{
聽聽銆銆銆銆cout << "CD::f(int)" << endl;
銆銆聽}
};
int main(int argc, char* argv[])
{
聽銆return 0;
}
銆銆榪欎箞鍐欏綋鐒舵槸娌¢棶棰樹簡錛屽湪榪欓噷鎴戜笉澶氳垂鍙h垖浜嗭紝榪欐槸寰堢畝鍗曠殑錛屽鎬侊紝铏氬嚱鏁幫紝鐒跺悗浠涔堟寚鍚戝熀綾葷殑鎸囬拡鎸囧悜媧劇敓綾誨璞¢樋錛岄氳繃寮曠敤璋冪敤铏氬嚱鏁伴樋浠涔堢殑錛屽睘鎬у鐨勫緢鍜紝浠涔堬紵錛熶綘涓嶆槑鐧斤紵錛熼殢渚挎壘鏈珻++鐨勪功錛屽浼氳澶氭佸拰铏氬嚱鏁版満鍒剁殑鍝︼紒錛?br />銆銆榪欑鎯呭喌鎴戜滑鍙?font color="#ff0000">瑕嗙洊(override)錛?/font>瑕嗙洊鎸囩殑鏄淳鐢熺被鐨勮櫄鎷熷嚱鏁拌鐩栦簡鍩虹被鐨勫悓鍚嶄笖鍙傛暟鐩稿悓鐨勫嚱鏁幫紒
銆銆鍦ㄨ繖閲岋紝鎴戣寮鴻皟鐨勬槸錛岃繖縐嶈鐩栵紝瑕佹弧瓚充袱涓潯浠?br />銆(a)鏈塿irtual鍏抽敭瀛?/font>錛屽湪鍩虹被涓嚱鏁板0鏄庣殑鏃跺欏姞涓婂氨鍙互浜?br />銆(b)鍩虹被CB涓殑鍑芥暟鍜屾淳鐢熺被CD涓殑鍑芥暟瑕佷竴妯′竴鏍?/font>錛屼粈涔堝彨涓妯′竴鏍鳳紝鍑芥暟鍚嶏紝鍙傛暟錛岃繑鍥炵被鍨嬩笁涓潯浠?/font>銆?br />銆銆鏈変漢鍙兘浼氬(b)涓殑璇存硶璐ㄧ枒錛岃榪斿洖綾誨瀷涔熻涓鏍鳳紵錛?br />銆銆鏄紝瑕嗙洊鐨勮瘽蹇呴』涓鏍鳳紝鎴戣瘯浜嗚瘯錛屽鏋滃湪鍩虹被涓?鎶奻鐨勫0鏄庢敼鎴恦irtual int f(int)錛岀紪璇戝嚭閿欎簡
銆銆error C2555: 'CD::f' : overriding virtual function differs from 'CB::f' only by return type or calling convention
銆銆鎵浠ワ紝瑕嗙洊鐨勮瘽錛屽繀欏昏婊¤凍涓婅堪鐨?a)(b)鏉′歡
銆銆閭d箞濡傛灉鍩虹被CB涓殑鍑芥暟f鏈夊叧閿瓧virtual銆錛屼絾鏄弬鏁板拰媧劇敓綾籆D涓殑鍑芥暟f鍙傛暟涓嶄竴鏍峰憿錛?br />瀹炰緥涓?
聽 #include "stdafx.h"
#include <iostream.h>
class CB
{
銆public:
聽銆銆 virtual聽 void f(int)
銆銆聽{
聽銆銆銆銆聽cout << "CB::f(int)" << endl;
銆銆聽}
}
;
class CD : public CB
{
public:
聽銆銆 void f(int錛宨nt)
聽銆銆{
聽銆銆銆聽cout << "CD::f(int錛宨nt)" << endl;
聽銆銆}
聽銆銆void test()
聽銆銆{
聽銆銆銆銆聽f(1);
聽銆銆}
}
;
int main(int argc, char* argv[])
{
聽return 0;
}
緙栬瘧鍑洪敊浜嗭紝
聽error C2660: 'f' : function does not take 1 parameters
銆銆鍜︼紵錛熷ソ闈㈢啛鐨勯敊錛燂紵瀵癸紝鍜屽疄渚嬩竴涓殑鎯呭喌涓鏍峰摝錛岀粨璁轟篃鏄熀綾諱腑鐨勫嚱鏁拌闅愯棌浜嗐?/p>
銆銆閫氳繃涓婇潰涓変釜渚嬪瓙錛屽緱鍑轟竴涓畝鍗曠殑緇撹
濡傛灉鍩虹被涓殑鍑芥暟鍜屾淳鐢熺被涓殑涓や釜鍚嶅瓧涓鏍風殑鍑芥暟f
婊¤凍涓嬮潰鐨勪袱涓潯浠?br />(a)鍦ㄥ熀綾諱腑鍑芥暟澹版槑鐨勬椂鍊欐湁virtual鍏抽敭瀛?br />(b)鍩虹被CB涓殑鍑芥暟鍜屾淳鐢熺被CD涓殑鍑芥暟涓妯′竴鏍鳳紝鍑芥暟鍚嶏紝鍙傛暟錛岃繑鍥炵被鍨嬮兘涓鏍楓?br />閭d箞榪欏氨鏄彨鍋?font color="#ff0000">瑕嗙洊(override)錛?/font>榪欎篃灝辨槸铏氬嚱鏁幫紝澶氭佺殑鎬ц川
閭d箞鍏朵粬鐨勬儏鍐靛憿錛燂紵鍙鍚嶅瓧涓鏍鳳紝涓嶆弧瓚充笂闈㈣鐩栫殑鏉′歡錛屽氨鏄?font color="#ff0000">闅愯棌浜嗐?/font>
涓嬮潰鎴戣璁叉渶鍏抽敭鐨勫湴鏂逛簡錛屽ソ澶氫漢璁や負錛屽熀綾籆B涓殑f(int)浼氱戶鎵夸笅鏉ュ拰CD涓殑f(int,int)鍦ㄦ淳鐢熺被CD涓瀯鎴愰噸杞斤紝灝卞儚瀹炰緥涓涓兂鍍忕殑閭f牱銆?br />銆銆瀵瑰悧錛熸垜浠厛鐪嬮噸杞界殑瀹氫箟
銆銆閲嶈澆(overload):
銆銆蹇呴』鍦ㄤ竴涓煙涓?鍑芥暟鍚嶇О鐩稿悓浣嗘槸鍑芥暟鍙傛暟涓嶅悓,閲嶈澆鐨勪綔鐢ㄥ氨鏄悓涓涓嚱鏁版湁涓嶅悓鐨勮涓?鍥犳涓嶆槸鍦ㄤ竴涓煙涓殑鍑芥暟鏄棤娉曟瀯鎴愰噸杞界殑,榪欎釜鏄噸杞界殑閲嶈鐗瑰緛
銆銆蹇呴』鍦ㄤ竴涓煙涓?/font>錛岃岀戶鎵挎槑鏄炬槸鍦ㄤ袱涓被涓簡鍝︼紝鎵浠ヤ笂闈㈢殑鎯蟲硶鏄笉鎴愮珛鐨勶紝鎴戜滑嫻嬭瘯鐨勭粨鏋勪篃鏄繖鏍鳳紝媧劇敓綾諱腑鐨刦(int,int)鎶婂熀綾諱腑鐨刦(int)闅愯棌浜?br />銆銆鎵浠ワ紝鐩稿悓鐨勫嚱鏁板悕鐨勫嚱鏁幫紝鍦ㄥ熀綾誨拰媧劇敓綾諱腑鐨勫叧緋誨彧鑳芥槸瑕嗙洊鎴栬呴殣钘忋?/font>
銆銆鍦ㄦ枃绔犱腑錛屾垜鎶婇噸杞藉拰瑕嗙洊鐨勫畾涔夐兘緇欎簡鍑烘潵浜嗭紝浣嗘槸涓鐩存病鏈夌粰闅愯棌鐨勫畾涔夛紝鍦ㄦ渶鍚庯紝鎴戞妸浠栫粰鍑烘潵錛岃繖孌佃瘽鏄綉涓奼oogle鏉ョ殑錛屾瘮杈冮暱錛屼綘鍙互綆鍗曠殑鐞嗚В鎴愶紝鍦ㄦ淳鐢熺被鍩熶腑錛岀湅涓嶅埌鍩虹被涓殑閭d釜鍚屽悕鍑芥暟浜嗭紝鎴栬呰錛屾槸騫舵病鏈夌戶鎵夸笅鏉ョ粰浣犵敤錛屽懙鍛碉紝濡傚疄渚嬩竴銆閭f牱銆?br />銆銆
闅愯棌(hide):
鎸囩殑鏄淳鐢熺被鐨勬垚鍛樺嚱鏁伴殣钘忎簡鍩虹被鍑芥暟鐨勬垚鍛樺嚱鏁?闅愯棌涓璇嶅彲浠ヨ繖涔堢悊瑙?鍦ㄨ皟鐢ㄤ竴涓被鐨勬垚鍛樺嚱鏁扮殑鏃跺?緙栬瘧鍣ㄤ細娌跨潃綾葷殑緇ф壙閾鵑愮駭鐨勫悜涓婃煡鎵懼嚱鏁扮殑瀹氫箟,濡傛灉鎵懼埌浜嗛偅涔堝氨鍋滄鏌ユ壘浜?鎵浠ュ鏋滀竴涓淳鐢熺被鍜屼竴涓熀綾婚兘鏈夊悓涓涓?font style="BACKGROUND-COLOR: #ffffff" color="#ff0000">鍚屽悕(鏆備笖涓嶈鍙傛暟鏄惁鐩稿悓)鐨勫嚱鏁?鑰岀紪璇戝櫒鏈緇堥夋嫨浜嗗湪媧劇敓綾諱腑鐨勫嚱鏁?閭d箞鎴戜滑灝辮榪欎釜媧劇敓綾葷殑鎴愬憳鍑芥暟"闅愯棌"浜嗗熀綾葷殑鎴愬憳鍑芥暟,涔熷氨鏄瀹冮樆姝簡緙栬瘧鍣ㄧ戶緇悜涓婃煡鎵懼嚱鏁扮殑瀹氫箟.