重載(overloaded)、內(nèi)聯(lián)(inline)、const和virtual
|
|
重載
|
內(nèi)聯(lián)
|
const
|
virtual
|
|
全局函數(shù)
|
√
|
√
|
|
|
|
類的成員函數(shù)
|
√
|
√
|
√
|
√
|
內(nèi)部標(biāo)識(shí)符
編譯器根據(jù)參數(shù)為每個(gè)重載函數(shù)創(chuàng)建內(nèi)部標(biāo)識(shí)符,以便區(qū)分忽略返回值與有返回值的重載函數(shù)。
連接交換指定符號(hào)
C編譯過的函數(shù),經(jīng)過編譯器標(biāo)識(shí)后與C++的表示風(fēng)格不同。所以C++不能直接調(diào)用C編譯出的函數(shù)。C++提供extern “C”
例如:
extern “C”
{
void foo(int x, int y);
… // 其它函數(shù)
}
或者寫成
extern “C”
{
#include “myheader.h”
… // 其它C頭文件
}
全局函數(shù)與成員函數(shù)同名
全局函數(shù)與成員函數(shù)同名不算重載,因?yàn)楹瘮?shù)作用域不同。
為了區(qū)別,調(diào)用全局函數(shù)時(shí),注意格式:
::函數(shù)名(參數(shù));
隱式類型轉(zhuǎn)換導(dǎo)致重載函數(shù)產(chǎn)生二義性
隱式類型轉(zhuǎn)換:數(shù)字本身沒有類型,把數(shù)字當(dāng)作參數(shù),自動(dòng)進(jìn)行類型轉(zhuǎn)換。
例如:
void output( int x); // 函數(shù)聲明
void output( float x); // 函數(shù)聲明
output(0.5)將產(chǎn)生編譯錯(cuò)誤,因?yàn)榫幾g器不知道該將0.5轉(zhuǎn)換成int還是float類型的參數(shù)。
正確寫法:
output(int(0.5)); // output int 0
output(float(0.5)); // output float 0.5