可能重複:
Calling virtual function of derived class from base class constructor?基類的構造不會調用虛方法derivied類版本
我有以下文件(原諒錯別字,我從內存中快速重寫代碼)
BaseReader(){
openFile();
}
void BaseReader::openFile(){
//logic to open file
}
打開文件被聲明爲虛擬公共方法(它被保護,但我在試圖弄清楚什麼是錯誤的時候把它公開化了)。 SortReader定義爲:
class SortReader: public BaseReader{
public:
SortReader();
void openFile();
};
用下面的代碼:
SortReader::SortReader(): BaseReader(){}
SortReader::openFile(){
sortFile();
BaseReader::openFile();
}
當我嘗試構建SortReader對象sortFile方法不會被調用。我可以在調試器中查看它,並觀察SortReader調用BaseReader構造函數。BaseReader構造函數調用openFile,它調用OpenFile的BaseReader版本。我希望它調用SortReader的打開文件的實現。我需要做些什麼來實現這一目標?
顯然的問題是,'中openFile()'未聲明爲虛... –
@ RichardJ.RossIII:根據這是一個問題,雖然沒有看到我們不能完全確定的聲明。但無論是否,您都無法從基類構造函數中調用派生類的版本。 –