此問題是關於用不同返回類型覆蓋派生類中的虛擬方法的問題。 對於下面的代碼:重寫虛擬方法時無法返回派生類指針
class father {
public:
virtual father* ref() { return this; }
};
class child : public father {
virtual child* ref() { return this; }
};
當我嘗試直接獲取一個指針,G ++(F15,G ++ 4.5)報告 「無效的轉換,從父親的孩子」
child m_child;
father* pf = &m_child;
child* pc = pf->ref();
我明白使用子類中的ref()方法,這可能只是編譯時類型不匹配。
但是,有沒有辦法做到這一點,而不明確使用類型轉換?
額外描述: 我明白編譯器報告此錯誤的原因。我需要的是可以訪問派生對象中的數據而不顯式轉換指針的開箱即用的東西。
父類用於將不同的派生子對象放入列表或向量中,所以當從列表或向量中獲取某個項時,無法確定它屬於哪個子類。
我有內部方法來記錄和檢查子類的類型。但我不想顯式地轉換指針。
例如,我願做這樣的事情:
// assuming pf is pointer pointed to an item fetch from a vector
switch(fp->get_type()) {
case child_type1: fp->ref()->list1.push(data); break;
case child_type2: fp->ref()->list2.push(data); break;
case child_type3: fp->ref()->list3.push(data); break;
}
現在,我需要顯式聲明一個新的變量或顯式轉換FP在每種情況下,每個我需要時間正確的類型和訪問派生類中的數據,這是枯燥乏味的。
我期望的是:可能是一些boost庫可以以另一種我還不知道的方式做類似的事情,或者可能是C++ 11標準允許它,但需要設置一個特殊的編譯參數?
我想我很理解爲什麼編譯器報告類型不匹配。我需要的不是對這裏發生的事情的解釋。我需要一些開箱即用的東西。爲了進一步解釋它,請參閱添加的額外說明。 – 2012-04-04 13:41:38