標籤:style blog http color io os 使用 ar 資料
重載:重載是指在一個類或者範圍中可以出現多個函數名相同參數不同的函數,重載可以分為函數重載和運算子載
函數重載執行個體:
#include <iostream>using namespace std;//比較兩個int型數的大小,並且返回最大的數int max(int a, int b){ int c; c = (a > b) ? a : b; return c;}//比較兩個double型數的大小,並且返回最大的數double max(double a, double b){ double c; c = (a > b) ? a : b; return c;}//比較兩個字元的大小,並且返回最大的字元char max(char a, char b){ char c; c = (a > b) ? a : b; return c;}void main(){ cout<<"最大的int型數:"<<max(123, 23)<<endl; cout<<"最大的double型數:"<<max(1.23, 2.3)<<endl; cout<<"最大的字元:"<<max('a', 'z')<<endl; system("pause");}
執行結果:
說明:
上面的程式中使用了三個max函數,三個函數的函數名相同,函數的參數不同,這就是函數重載的運用
運算子多載:就是對已有的運算子重新進行定義,賦予其另一種功能,以適應不同的資料類型
至於運算子多載我在前面已經寫了一些部落格,詳情可以看:
設計String類,並且在String類中使用運算子多載 http://blog.csdn.net/u010105970/article/details/30253771
在運算子多載中使用友元函數http://blog.csdn.net/u010105970/article/details/30025343
使用運算子多載實現複數的四則運算http://blog.csdn.net/u010105970/article/details/30022851
使用運算子多載實現複數的加法運算http://blog.csdn.net/u010105970/article/details/29855667
設計CTime類在CTime類中使用運算子多載http://blog.csdn.net/u010105970/article/details/30460881
重載<<和>>http://blog.csdn.net/u010105970/article/details/31395025
通過重載輸入和輸出運算子實現複數的輸入和輸出 http://blog.csdn.net/u010105970/article/details/31402615
在複數類中自訂類型轉換函式實現複數和非複數之間的運http://blog.csdn.net/u010105970/article/details/31734497
在CTime類中重載<<和>> http://blog.csdn.net/u010105970/article/details/31745291
在類中使用函數重載:
#include <iostream>using namespace std;class Parent{public:void func(){cout<<"類中的 void func()"<<endl;} void func(int i){cout<<"類中的 void func(int i)"<<endl;} void func(int i, int j){ cout<<"類中的 void func(int i, int j)"<<endl;}};int main(){ Parent p;//定義一個類對象p.func(); p.func(1); p.func(1,2);system("pause");}
執行結果:
說明:
通過這個例子說明函數重載不僅適用於範圍中,在類中也適用
重寫:當一個子類繼承一父類,而子類中的方法與父類中的方法的名稱,參數個數、類型都完全一致時,就稱子類中的這個方法重寫了父類中的方法
程式碼範例:
#include <iostream>using namespace std;class Parent//父類{public:void func(){cout<<"父類中的 void func()"<<endl;} virtual void func(int i){cout<<"父類中的 void func(int i)"<<endl;} virtual void func(int i, int j){ cout<<"父類中的 void func(int i, int j)"<<endl;}};class Child : public Parent{public:virtual void func(int i, int j){cout<<"子類中的 void func(int i, int j)"<<endl;}virtual void func(int i, int j, int k){cout<<"子類中的 void func(int i, int j, int k)"<<endl;}};void main(){Child c; c.func(1,2);c.func(1,2,3);system("pause");}
執行結果:
說明:
1、必須是在繼承裡2、方法名、參數個數和參數類型 都必須相同3、j返回值類型可以與父類相同,也可以與父類不同,但是要求返回值類型是父類的子類。如: 父類的返回值類型是4、衍生類別重寫的方法的存取權限不能低於基類的許可權5、衍生類別拋出的異常應該和基類相等或比基類更小
6、如果父類中沒有virtual關鍵字,這種父子之間的關係 重定義 (靜態鏈編)
7、如果父類中有virtual關鍵字,這種父子之間的關係叫做虛函數重寫,這種情況下發生多態 (動態鏈編 遲綁定)
重載重寫與重定義