函數的重載與多態
重載函數
重載函數是函數的一種特殊情況,為方便使用,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、子類對父類的虛函數進行重寫。