什麼是函式過載:
在c++程式中,可以將語義,功能相似的函式用同乙個名字表示,即就是函式過載。
函式過載的原因:
(1)便於記憶,提高函式的易用性;
(2)類的建構函式需要過載機制;(因為c++規定建構函式與類同名,建構函式只能有乙個名字,若要有不同的方法建立物件,只能依靠過載)
成員函式被過載的特徵:
(1)在同乙個類範圍內;
(2)函式的名字相同;
(3)函式的引數不同;
(4)virtual關鍵字可有可無;
eg:
#include
using namespace std;
class base
~base(){}
public:
void
fun()
;int main()
測試結果:
此處的base中的fun()和fun(int)構成了函式過載;
[root@localhost
c++]# vim test.cpp
[root@localhost
c++]# g++ test.cpp -o test
[root@localhost
c++]# ./test
base:
:fun()
base:
:fun(int)
[root@localhost
c++]#
注意:要防止隱式型別轉換;
eg:
void fun(int){}
void fun(float){}
當傳入引數是0.5時編譯器會因為隱式型別轉換而不知道要呼叫哪乙個函式,所以要進行顯示呼叫即:
fun(int(0.5));
或fun(float(0.5));
成員函式的覆蓋:
(覆蓋是指派生類函式覆蓋基類函式)
覆蓋的特徵:
(1)分別位於派生類和基類範圍;
(2)函式名字相同;
(3)函式的引數相同;
(4)基類函式必須有virtual關鍵字
eg:
#include
using namespace std;
class base
~base(){}
public:
virtual
void
fun()
;class d : public
base
~d(){}
public:
void
fun()
此處的d中的fun()函式覆蓋了父類base中的fun()函式;
若父類中的fun()函式沒有關鍵字virtual,main()中呼叫的就是base中的fun()函式;加了virtual關鍵字父類的fun()函式被虛擬繼承,就只能呼叫d自己的fun()函式;
成員函式的隱藏:
(隱藏是指派生類的函式遮蔽了與其同名的基類函式)
隱藏的特徵:
(1)若派生類的函式與基類的函式同名,但是引數不同,則無論基類的函式有無virtual關鍵字,基類函式都將被隱藏;
(2)若派生類的函式與基類的函式同名同參,並且基類函式**有無
virtual**關鍵字,基類函式將被隱藏;
第(1)種
#include
using namespace std;
//父類base::fun()沒有virtual關鍵字,但和子類d::fun()同名,不同參,因此父類的fun()函式被隱藏;
class base
~base(){}
public:
void
fun()
;class d : public
base
~d(){}
public:
void
fun(int)
測試結果如下:
[root@localhost c++]# ./test
d::fun(int)
[root@localhost c++]#
第(2)種
#include
using namespace std;
//父類base::fun()
與子類d::fun()同名同參,所以父類的fun()函式被隱藏
class base
~base(){}
public:
virtual
void
fun()
;class d : public
base
~d(){}
public:
void
fun()
測試結果如下:
[root@localhost
c++]# g++ test.cpp -o test
[root@localhost
c++]# ./test
d::fun()
[root@localhost
c++]#
成員函式的過載 覆蓋 隱藏
成員函式被過載的特徵 1 相同的範圍 在同乙個類中 2 函式名字相同 3 引數不同 4 virtual 關鍵字可有可無.只能靠引數而不能靠返回值型別的不同來區分過載函式.並不是兩個名字相同的函式就能構成函式過載,得具有相同的作用域.過載是指不同的函式使用相同的函式名,但是函式的引數個數或型別不同。呼...
C 成員函式的過載 覆蓋和隱藏
我們在學習c 中總會有很多概念容易搞混,其中成員函式的過載 覆蓋和隱藏這三個概念就經常讓很多人頭大。下面我們就來介紹一下這三個的區別 成員函式被過載的條件是 1 相同的範圍也就是要在同乙個類中 2 函式名字相同 3 引數不同 這裡包括引數型別,引數的順序,引數的個數 4 virtual關鍵字可有可無...
成員函式之過載 覆蓋 隱藏
過載 只有在同一類 定義中的 同名成員函式 才存在過載關係 主要特點是 函式的引數型別和數目有所不同 但 不能出現函式引數的個數和型別均相同 僅僅依靠返回值型別不同來區分的函式 這和普通函式的過載是完全一致的。另外,過載和成員函式是 否是虛函式 無關 覆蓋 在派生類中覆蓋基類中的 同名函式 要求兩個...