C C 的區別之函式過載

2021-10-08 16:47:56 字數 692 閱讀 2491

兩個數相加的泛型:

c:#define sum(a,b)(a+b)

int main()

int a=10;

int b=20;

int rt=sum(a,b);

double rt2=sum(10.1,10.2);

巨集函式-->預編譯-->替換-->沒有型別檢查和安全檢查       不安全

void* sum(void* a,int alen,void*b,int blen);

void*泛型[)      半開半閉區間

void*  容易越界  (起始位置+長度)  確定區間大小

因為c語言中符號生成規則只和函式名有關_sum

c++符號生成和函式返回值+函式名+函式引數列表

c++:

?sum@@yahhh@z

?sum@@yannn@z

函式返回值不同就不能構成過載

函式過載:1.同名2.不同引數3.同一作用域

c++三大特徵:封裝,繼承,多型

多型:靜多型:函式過載,模板   (編譯階段確定函式呼叫)

動多型:繼承和虛函式 ( 執行確定函式呼叫)

同名函式的三種關係:

1.過載:重定義  編譯階段確定函式呼叫的過程

2.隱藏

3.覆蓋:重寫  派生類中同名同參的虛函式覆蓋了基類中同名同參的虛函式。(動多型)

C C 函式過載

把複雜的知識簡單化,就是我寫部落格的目的 seen 首先要教各位看官如何使用c 的這個特性,方法很簡單,就是寫兩個函式,裡面引數不同,然後c 這種語言編譯器就能夠自動的解析這兩個函式,然後進行輸出 我們來看乙個例子 include include using namespace std void p...

C C 函式過載

c 標準庫已經提供了交換兩個變數的值的函式,它的名字就是swap,位於algorithm標頭檔案中。引數列表不同包括引數的個數不同 型別不同或順序不同,僅僅引數名稱不同是不可以的。函式返回值也不能作為過載的依據。僅僅返回型別不同不足以成為函式的過載。c 在編譯時會根據引數列表對函式進行重新命名,例如...

函式之過載函式

由於過載函式都是同名的,編譯器如何解析過載函式呢?發現函式 void print int i 編譯之後為 注意它的函式簽名變為 z5printi 利用反彙編技術,發現函式void print int i 編譯之後,它的函式簽名為 z5printi void print string str 編譯之後...