1
我現在有點卡住了。我有一個名爲BaseBond的基類。 ZeroCouponBond和CouponBond從該類繼承。我正在創建一個包含兩種債券的數組。這裏是我的代碼:C++ - 基類數組的基本錯誤
...
BaseBond port[12];
for (int i=0; i < recordCount; i++)
{
if (bonds[i].CouponRate == 0.0)
port[i] = new ZeroCouponBond(bonds[i]);
else
port[i] = new CouponBond(bonds[i]);
}
這裏是我得到的錯誤: 錯誤:不對應的「運營商=」在「口[I]
我知道這可能是一個簡單的解決,有當我可以在一個數組中聲明對象時,我會做些什麼,但是我對C++來說比較新,並且不知道所有的規則。
在此先感謝您的幫助!
謝謝神祕! 最後一個問題。現在說要訪問CouponBond類的方法,我該如何解決這個問題?我知道陣列端口現在是一個BaseBonds數組。我必須首先將它作爲CouponBond來訪問它的方法嗎?這個代碼有什麼問題: port [i] = new CouponBond(bonds [i]); printf(「P:%f」,((CouponBond)port [i]) - > getPrice()); – CHawk
如果該方法特定於「CouponBond」類,那麼您無法真正做到這一點。所以你必須施展它 - 儘管在這一點上,你必須更仔細地考慮你是否正確設計了它。理想情況下,該方法位於BaseBond類中,並由每個子類覆蓋。 – Mysticial
我剛剛看到您的評論編輯。在這種情況下,您應該在'BaseBond'類中定義'getPrice'方法並使其變爲虛擬。 (這是有道理的,因爲'getPrice'適用於所有的「債券」)然後你可以用一個特定於'CouponBond'的版本覆蓋它。 – Mysticial