【C/C++】高亮C++中函數的重寫——函數名相同?參數列表相同?返回值相同?

 

    C++的重載給人留下了很是深入的影響,緣由是重載的條件很值得注意:函數名相同,參數列表不相同的兩個函數構成重載函數,而無關乎兩者的返回值。ios

    可是C++中的函數重寫又是另外一碼事。標準規定:只要函數名相同,就會被重寫。重寫以後用子類訪問「本該被繼承的」父類的函數,將會調用子類的同名函數,而與父類中有什麼樣的同名函數無關(也就是當它不存在)。例如:函數

 

#include <iostream>
using namespace std;

class A
{
    public:
    int func()
    {
        return 1;
    }
};

class B: public A
{
    public:
    char func(int a)
    {
        return '2';
    }
};

main()
{
    B b;
    cout <<b.func()<<endl;
    cout <<b.func(1)<<endl;
}

上面這段代碼中,main函數中的b.func(1)將成功被調用,而b.func()將報錯:spa

Untitled1.cpp|25|error: no matching function for call to 'B::func()'|

由於此時從父類那裏集成而來的int func()已然被重寫,即便參數列表不一樣,即便返回值也不一樣。int func()在子類B中早已不復存在了。code

相關文章
相關標籤/搜索