2013-03-02 34 views
1
class Game { 
    class Other {}; // Nested class 
    // Automatic type conversion: 
    operator Other() const { 
    cout << "Game::operator Other()\n"; 
    return Other(); 
    } 
};  
class Chess : public Game {}; 
void f(Game::Other) {} 
int main() 
{ 
    Chess d; 
    f(d); 
}  

我正在閱讀「在C++中思考」第14章 - 不自動繼承的函數。 上面的代碼片段是Eckel給出的一個例子。和埃克爾說:什麼意思是轉換運算符在派生類中「仍然有效」

因爲所有這些關於重寫該處理 對象創建函數規則的

」,它可能看起來有些奇怪起初,該 自動類型轉換操作符是繼承的,但它不是太 unreasonable-。如果在Game中有足夠的棋子來製作其他棋子,那麼這些棋子仍然存在於任何來自Game和 的類型轉換運算符仍然有效(儘管您可能在 事實上想重新定義它)。「

我不明白埃克爾想說什麼。任何人都可以解釋它更詳細?

感謝

回答

4

他說,不像其他一些類似的事情,類型轉換操作符派生類自動繼承。

他爲什麼這種行爲是合理的說法是,如果你可以從一個Game構建Other,您還可以從任何構建Other說「是」 Game(即派生類)。