首頁  >  問答  >  主體

C++ 函数重载的时候,参数可以用父类类型和子类类型重载吗?

我用C++编程的时候需要对函数进行重载,使函数拥有不同的参数类型,分别是父类类型和子类类型,这样用重载会不会有问题?

黄舟黄舟2765 天前733

全部回覆(3)我來回復

  • PHP中文网

    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

    回覆
    0
  • PHP中文网

    PHP中文网2017-04-17 15:33:56

    1. 可以的,c++重載(overload)是透過在把原始檔編譯成目標檔時對函式名稱進行重命名來實現,編譯器會根據呼叫函式時傳入的參數來決定呼叫你重載那個具體函數,這個是編譯階段完成的,也就是c++所謂的靜態多態。

    2. c++中還有重寫(override),透過虛擬函數、繼承、指標機制來實現動態多態,是透過運行時類別的虛表來實現。

    回覆
    0
  • 伊谢尔伦

    伊谢尔伦2017-04-17 15:33:56

    沒關係。如 @憶先 的答案。 、
    但是如果參數分別是父子類型的指標則不行(引用是可以的)。

    回覆
    0
  • 取消回覆