重載 覆蓋 隱藏

重載 覆蓋 隱藏的區別(函數名都相同)
重載:多個函數都存在,根據參數不同選擇調用函數
例如:

//聲明(定義在此處省略了)
int Add(int a, int b);  //函數1
int Add(float a, float b);  //函數2
int ia = 0, ib = 0;
float fa = 0.0f, fb = 0.0f;

//調用
Add(ia, ib);    //調用函數1
Add(fa, fb);    //調用函數2

覆蓋:函數名相同、參數相同、有virtual關鍵字,根據指針所指對象的類型來選擇不同類中的函數
例如:

#include <iostream>
using namespace std;
class class1{
publicvirtual void Print()
    {
         cout << "調用 class1 中的函數" << endl;
    }
};

class class2 : public class1{
publicvoid Print()
    {
        cout << "調用 class2 中的函數" << endl;
    }
};

int main()
{
    class1* p = new class2;
    p->Print(); //調用class2中的函數
    delete p;

    p = new class1;
    p->Print(); //調用class1中的函數
    delete p;
    return 0;
}

隱藏:函數名相同、參數不一定相同、沒有virtual關鍵字,根據指針的類型來選擇指針類中的函數
例如:

#include <iostream>
using namespace std;
class class1{
publicvoid Print(int a)
    {
         cout << "調用 class1 中的函數" << endl;
         cout << "輸出:" << a << endl;
    }
};

class class2 : public class1{
publicvoid Print(float a)
    {
            cout << "調用 class2 中的函數" << endl;
            cout << "輸出:" << a << endl;
    }
};

int main()
{
    class1* p = new class2;
    p->Print(1); //調用class1中的函數
    delete p;

    p = new class1;
    p->Print(2.0f); //調用class1中的函數, 2.0f被轉換爲2i
    delete p;
    return 0;
}

已在VS2013上通過測試

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章