我用C++编程的时候需要对函数进行重载,使函数拥有不同的参数类型,分别是父类类型和子类类型,这样用重载会不会有问题?
PHP中文网2017-04-17 15:33:56
可以的,例如這段程式碼。
#include <iostream>
class A{
public:
int value;
A(int x):value(x){};
};
class B:public A{
public:
int base;
B(int x, int y):A(x),base(y){};
};
void print(A a){
std::cout << a.value << std::endl;
}
void print(B b){
std::cout << b.value << " " << b.base << std::endl;
}
int main(){
A a(1);
B b(1,2);
print(a);
print(b);
return 0;
}
輸出的就是
1
1 2
PHP中文网2017-04-17 15:33:56
可以的,c++重載(overload)是透過在把原始檔編譯成目標檔時對函式名稱進行重命名來實現,編譯器會根據呼叫函式時傳入的參數來決定呼叫你重載那個具體函數,這個是編譯階段完成的,也就是c++所謂的靜態多態。
c++中還有重寫(override),透過虛擬函數、繼承、指標機制來實現動態多態,是透過運行時類別的虛表來實現。