重載重寫與重定義

來源:互聯網
上載者:User

標籤: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關鍵字,這種父子之間的關係叫做虛函數重寫,這種情況下發生多態 (動態鏈編 遲綁定)



重載重寫與重定義

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.