簡體   English   中英

C ++中的虛函數重寫

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM