C++:Overload

重載

函數簽名是指函數的參數個數,參數類型以及參數的順序。重載的定義是:在同一做用域內函數簽名不一樣但函數名相同的函數互爲重載函數

// 如下幾個函數互爲重載
void print();
void print(int a);
void print(double a, int b);
void print(int a, double b);
void print(string a, double b);

參數的不一樣也能夠是經過const區分的。this

// 如下兩個函數一樣造成函數重載
void print(int &a);
void print(const int &a);
// 聲明成員函數爲const即指定this指針爲const,一樣能夠構成重載
class LiF {
public:
    void print();
    void print() const;
};

函數的形參名不一樣或返回值類型不一樣並不構成重載,而且編譯報錯,由於這類函數被編譯器識別爲相同函數。指針

// 重定義print,編譯報錯
void print(int a);
void print(int b);
// 重定義print,編譯報錯
void print(int a);
int print(int a);

重載是如何實現的

在C++的編譯期,編譯器會根據參數列表對函數進行重命名,在函數名中按順序加入參數類型以區分重載的函數。在函數調用時,則會根據實參類型逐個匹配重載的函數,失配則報錯。也就是說,重載只是語法上的重載,重載的函數在編譯後仍然是不一樣的函數。這也就解釋了爲何只有函數簽名不一樣的函數才能構成重載。在編譯完成以後,函數的重載也就肯定了。所以能夠說,重載提供的多態性是靜態的,或者說重載提供了編譯期的多態性code

相關文章
相關標籤/搜索
本站公眾號
   歡迎關注本站公眾號,獲取更多信息