多態與重載


函數的重載與多態

重載函數

重載函數是函數的一種特殊情況,為方便使用,C++允許在同一范圍中聲明幾個功能類似的同名函數,但是這些同名函數的形式參數(指參數的個數、類型或者順序)必須不同,也就是說用同一個函數完成不同的功能。這就是重載函數。重載函數常用來實現功能類似而所處理的數據類型不同的問題。不能只有函數返回值類型不同。

  • 重載函數注意事項

對於兩個重載函數:

1 函數的參數個數不同。
2 函數的參數類型不同或者參數類型順序不同。
3 不能創建新的運算符,只有已有運算符可以被重載。

下面通過一個簡單的例子來說明函數重載:

#include<iostream>
using namespace std;

void print(int i)
{
        cout<<"print a integer :"<<i<<endl;
}

void print(string str)
{
        cout<<"print a string :"<<str<<endl;
}

int main()
{
        print(12);
        print("hello world!");
        return 0;
}

通過上面代碼的實現,可以根據具體的print()的參數去調用print(int)還是print(string)。上面print(12)會去調用print(int),print("hello world")會去調用print(string)

多態

允許將子類類型的指針賦值給父類類型的指針。

  • 多態的作用

把不同的子類對象都當作父類來看,可以屏蔽不同子類對象之間的差異,寫出通用的代碼,做出通用的編程,以適應需求的不斷變化。 賦值之后,父對象就可以根據當前賦值給它的子對象的特性以不同的方式運作.

typedef void(*FUNC)(); //定義一個函數指針來實現對成員函數的繼承
 typedef void(*FUNC)(); //定義一個函數指針來實現對成員函數的繼承
struct Base  //父類
{
    FUNC fun;
    int B1;
};
struct Derived//子類
{
    Base b1;
    int D1;
};
void fb()      
{
    printf("b1:fun()\n");
}
void fd()       
{
    printf("d1:fun()\n");
}
int main() {
    Base b1;
    Derived d1;

    b1.fun = fb;
    d1.b1.fun = fd;

    Base *p1 = &b1;
    p1-> _fun(); 

    p1 = (Base *)&d1;
    p1->fun(); 

    getchar();
    return 0;
}
  • 多態的主要特點

1、繼承體系下。繼承:是面向對象最顯著的一個特性。繼承是從已有的類中派生出新的類,新的類能吸收已有類的數據屬性 和行為,並能擴展新的能力,已有類被稱為父類/基類,新增加的類被稱作子類/派生類。

2、子類對父類的虛函數進行重寫。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM