我用C++编程的时候需要对函数进行重载,使函数拥有不同的参数类型,分别是父类类型和子类类型,这样用重载会不会有问题?
人生最曼妙的风景,竟是内心的淡定与从容!
可以的,例如這段程式碼。
#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
可以的,c++重載(overload)是透過在把原始檔編譯成目標檔時對函式名稱進行重命名來實現,編譯器會根據呼叫函式時傳入的參數來決定呼叫你重載那個具體函數,這個是編譯階段完成的,也就是c++所謂的靜態多態。
c++中還有重寫(override),透過虛擬函數、繼承、指標機制來實現動態多態,是透過運行時類別的虛表來實現。
沒關係。如 @憶先 的答案。 、但是如果參數分別是父子類型的指標則不行(引用是可以的)。
可以的,例如這段程式碼。
輸出的就是
可以的,c++重載(overload)是透過在把原始檔編譯成目標檔時對函式名稱進行重命名來實現,編譯器會根據呼叫函式時傳入的參數來決定呼叫你重載那個具體函數,這個是編譯階段完成的,也就是c++所謂的靜態多態。
c++中還有重寫(override),透過虛擬函數、繼承、指標機制來實現動態多態,是透過運行時類別的虛表來實現。
沒關係。如 @憶先 的答案。 、
但是如果參數分別是父子類型的指標則不行(引用是可以的)。