C 函式過載

2021-10-10 09:30:30 字數 2896 閱讀 8626

void

func

(void

)void

func

(int i)

void

func

(int i,

double d)

void

func

(int i)

char

*func

(int i)

//函式名相同, 但形參型別一樣, 不構成過載關係

void

func

(int j)

//函式名相同, 但形參型別一樣, 不構成過載關係. 甚至編譯時要報重定義錯誤

void

func

(void

)//(1)

void

func

(int i)

//(2)

intmain

(void

)

#include

using namespace std;

void

func

(int i)

void

func

(int i,

int j)

void

func

(int i,

float j)

intmain()

#include

using namespace std;

// char-->int: 公升級轉換(單位元組到4位元組,會有記憶體浪費)

void

bar(

int i)

// char-->const char: 常量轉換

void

bar(

const

char

)// short-->char: 降級轉換(雙位元組到單位元組)

// short型別表示的資料範圍是2^16, 而char是2^8, 降級會造成值域損失

void

foo(

char c)

// char-->int: 公升級轉換, 會有記憶體浪費,但是可以保證資料的完整性

void

foo(

int c)

// 省略號匹配: 最差的一種匹配, 沒啥選才選它

// ... 在語法上稱為不定長(變長)引數, 可以接受任意多個,任意型別的實參

void

hum(

int,..

.)//double-->int: 降級轉換,8位元組到4位元組,損失值域

void

hum(

int,

int)

intmain()

void

func

(int i,

double d)

void

func

(int i,

int j)

// $g++ -c test.c -o a.o

// nm 可以檢視目標檔案裡面的識別符號

// $nm a.o

//_z是編譯器裡的內部標識沒有具體含義,忽略. 4標識函式名字串長度, i和d表示int和double

// 0000000000000000 t _z4funcid

// 000000000000000f t _z4funcii

// gcc 是不會改變函式名字的

void

func

(int i,

double d)

// $gcc -c test.c -o a.o

// $nm a.o

// 0000000000000000 t func

cpp.cpp

#include

using namespace std;

// extern "c" 告訴編譯器編譯時用c語言的方式, 也就是說不要換名了, 方便c程式呼叫c++的函式

extern

"c"void

hello

(void

)

c.c

void

hello

(void);

intmain()

$ g++ -c cpp.cpp; gcc -c c.c;

#只編譯不鏈結

$ nm cpp.o

u __cxa_atexit

u __dso_handle

0000000000000061 t _global__sub_i_hello

0000000000000000 t hello #函式名沒有被改

0000000000000023 t _z41__static_initialization_and_destruction_0ii

u _znsolsepfrsos_e

u _znst8ios_base4initc1ev

u _znst8ios_base4initd1ev

u _zst4cout

u _zst4endlicst11char_traitsiceerst13basic_ostreamit_t0_es6_

0000000000000000 b _zstl8__ioinit

u _zstlsist11char_traitsiceerst13basic_ostreamict_es5_pkc

$ g++ cpp.o c.o #鏈結生成可執行檔案

$ ./a.out

$ hello c++!

mysql 函式過載 C 方法過載(函式過載)

在講解 c 構造方法 時提到定義構造方法時提到可以定義帶 0 到多個引數的構造方法,但構造方法的名稱必須是類名。實際上,這就是乙個典型的方法過載,即方法名稱相同 引數列表不同。引數列表不同主要體現在引數個數或引數的資料型別不同。在呼叫過載的方法時系統是根據所傳 遞引數的不同判斷呼叫的是哪個方法。例項...

C 函式 函式過載

如果同一作用域內的幾個函式名字相同但形參列表不同,我們稱之為過載函式。void print const char cp void print const int beg,const int end void print const int ia,size t size 這些函式接受的形參型別不一樣,...

C 函式過載

函式過載 overloaded function 在相同的作用域中的兩個函式,如果有相同的名字而形參表不同 注意 如果僅僅函式的返回值不同是不能實現函式過載 void func int int func int error,僅僅返回值不同是不能作為函式過載,這屬於函式重定義 形參表包括 引數的型別 ...