過載
相同的範圍(在同乙個類中)
函式名相同
引數不同
virtual關鍵字可有可無
過載與繼承、隱藏很好區分,因為過載函式在同乙個類中
舉例說明
#include using結果繼承不同的範圍(分別位於基類和派生類)namespace
std;
class
base
void f(float x)
};int
main()
函式名相同
引數相同
基類必須有virtual關鍵字
隱藏
歸納起來
同名前提(不同名免談)
強調:只要不是繼承(virtural+同參)就是隱藏,隱藏後,如果基類、派生類有相同函式名,派生類物件只能呼叫派生類的函式。
#include #includeview codeusing
namespace
std;
class
base
};class derived : public
base
//隱藏
};int
main()
#include #includeview codeusing
namespace
std;
class
base
};class derived : public
base
//隱藏
};int
main()
舉例說明
#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結果分析動態繫結必須通過基類的引用或指標呼叫虛函式(virtual)。當這樣做時,編譯器將在基類中查詢virtual函式。using
namespace
std;
class
base
void test_1()
};class derived : public
base
//虛函式
void test_1() //隱藏
};int
main()
假如找到了(同名、同參):就在其派生類中找對應的函式(這就是為什麼必須在基類和派生類中特點是:同名、同參)。
假如沒找到對應的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 關鍵字可有可無。覆蓋是指派生類函式覆蓋基類函式,特徵是 ...