類成員函式的過載 繼承 隱藏

2021-09-06 11:32:34 字數 2075 閱讀 9326

過載

相同的範圍(在同乙個類中)

函式名相同

引數不同

virtual關鍵字可有可無

過載與繼承、隱藏很好區分,因為過載函式在同乙個類中

舉例說明

#include using

namespace

std;

class

base

void f(float x)

};int

main()

結果繼承不同的範圍(分別位於基類和派生類)

函式名相同

引數相同

基類必須有virtual關鍵字

隱藏

歸納起來

同名前提(不同名免談)

強調:只要不是繼承(virtural+同參)就是隱藏,隱藏後,如果基類、派生類有相同函式名,派生類物件只能呼叫派生類的函式。

#include #include 

using

namespace

std;

class

base

};class derived : public

base

//隱藏

};int

main()

view code

#include #include 

using

namespace

std;

class

base

};class derived : public

base

//隱藏

};int

main()

view code

舉例說明

#include using

namespace

std;

class

base

void g(float x)

void h(float x)

};class derived : public

base

//同參 + virtual —— 繼承

void g(int x) //

不同慘 ——隱藏

void h(float x) //

同參 + 無virtual ——隱藏

};int

main()

結果

舉例說明虛函式、隱藏的區別

#include #include 

using

namespace

std;

class

base

void test_1()

};class derived : public

base

//虛函式

void test_1() //隱藏

};int

main()

結果分析動態繫結必須通過基類的引用或指標呼叫虛函式(virtual)。當這樣做時,編譯器將在基類中查詢virtual函式。

假如找到了(同名、同參):就在其派生類中找對應的函式(這就是為什麼必須在基類和派生類中特點是:同名、同參)。

假如沒找到對應的virtual,就找對應的函式(同名同參),這回只能在父類中倒騰了,因為根本沒法通過virtual穿越到子類。

隱藏就不同了,如果基類中連函式原型都沒有,就直接報錯了。如果有:直接呼叫就得啦(沒有virtural沒法對應派生類的重定義的函式)。

類成員函式的過載 繼承 隱藏

過載 相同的範圍 在同乙個類中 函式名相同 引數不同 virtual關鍵字可有可無 過載與繼承 隱藏很好區分,因為過載函式在同乙個類中 舉例說明 include using namespace std class base void f float x int main 結果繼承不同的範圍 分別位於...

類成員函式的過載 繼承 隱藏

過載 相同的範圍 在同乙個類中 函式名相同 引數不同 virtual關鍵字可有可無 過載與繼承 隱藏很好區分,因為過載函式在同乙個類中 舉例說明 include using namespace std class base void f float x int main 結果繼承不同的範圍 分別位於...

類成員函式的過載 覆蓋與隱藏

基類和派生類類成員函式的過載 覆蓋 override 與隱藏很容易混淆,c 程式設計師必須要搞清楚概念,否則錯誤將防不勝防。1.過載與覆蓋 成員函式被過載的特徵 1 相同的範圍 在同乙個類中 2 函式名字相同 3 引數不同 4 virtual 關鍵字可有可無。覆蓋是指派生類函式覆蓋基類函式,特徵是 ...