重載 覆蓋 隱藏的區別(函數名都相同)
重載:多個函數都存在,根據參數不同選擇調用函數
例如:
//聲明(定義在此處省略了)
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{
public:
virtual void Print()
{
cout << "調用 class1 中的函數" << endl;
}
};
class class2 : public class1{
public:
void 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{
public:
void Print(int a)
{
cout << "調用 class1 中的函數" << endl;
cout << "輸出:" << a << endl;
}
};
class class2 : public class1{
public:
void 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上通過測試