[英]virtual function overriding in C++
我有一個帶虛函數的基類 - int Start(bool)
在派生中有一個具有相同名稱但具有不同簽名的函數 -
int Start(bool, MyType *)
但不虛擬
在派生的Start()
,我想調用基類Start()
int Derived::Start(bool b, MyType *mType)
{
m_mType = mType;
return Start(b);
}
但它給出了編譯錯誤。
"Start' : function does not take 1 arguments"
但是Base::Start(b)
有效
在C#中,上面的代碼工作,即解析調用不需要對Base的引用。
如果呼叫如下進行,則在外部進行
Derived *d = new Derived();
bool b;
d->Start(b);
它失敗並顯示以下消息:
Start : function does not take 1 arguments
但在C#中,同樣的情景也適用。
據我所知,虛擬機制不能用於解析調用,因為這兩個函數具有不同的簽名。
但這些電話沒有按預期得到解決。
請幫忙
你兩個選擇要么增加using Base::Start
解決的范圍Start
int Derived::Start(bool b, MyType *mType)
{
using Base::Start;
m_mType = mType;
return Start(b);
}
或者如您所述,添加Base::
前綴。
int Derived::Start(bool b, MyType *mType)
{
m_mType = mType;
return Base::Start(b);
}
這是由於名稱隱藏 。
當您在派生類中聲明一個與基類中的函數同名的函數時,基類版本將被隱藏,並且無法通過非限定調用訪問。
您有兩種選擇:完全限定您的調用,如Base::Start(b)
,或在您的類中放置using
聲明:
using Base::Start;
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.