Posted on 2007-08-13 10:14
寶杉 閱讀(341)
評論(0) 編輯 收藏 引用 所屬分類:
C++
重載(overloaded)、內聯(inline)、const和virtual
|
重載
|
內聯
|
const
|
virtual
|
全局函數
|
√
|
√
|
|
|
類的成員函數
|
√
|
√
|
√
|
√
|
內部標識符
編譯器根據參數為每個重載函數創建內部標識符,以便區分忽略返回值與有返回值的重載函數。
連接交換指定符號
C編譯過的函數,經過編譯器標識后與C++的表示風格不同。所以C++不能直接調用C編譯出的函數。C++提供extern “C”
例如:
extern “C”
{
void foo(int x, int y);
… // 其它函數
}
或者寫成
extern “C”
{
#include “myheader.h”
… // 其它C頭文件
}
全局函數與成員函數同名
全局函數與成員函數同名不算重載,因為函數作用域不同。
為了區別,調用全局函數時,注意格式:
::函數名(參數);
隱式類型轉換導致重載函數產生二義性
隱式類型轉換:數字本身沒有類型,把數字當作參數,自動進行類型轉換。
例如:
void output( int x); // 函數聲明
void output( float x); // 函數聲明
output(0.5)將產生編譯錯誤,因為編譯器不知道該將0.5轉換成int還是float類型的參數。
正確寫法:
output(int(0.5)); // output int 0
output(float(0.5)); // output float 0.5