我讀有效的C++和整個這個例子就是:爲什麼static_cast(* this)給基類創建一個臨時副本?
class Window { // base class
public:
virtual void onResize() { ... } // base onResize impl
...
};
class SpecialWindow: public Window { // derived class
public:
virtual void onResize() { // derived onResize impl;
static_cast<Window>(*this).onResize(); // cast *this to Window,
// then call its onResize;
// this doesn't work!
... // do SpecialWindow-
} // specific stuff
...
};
書中說:
什麼你可能想到的是,它並沒有調用當前對象上的功能!相反,該轉換會創建* this的基類部分的新臨時副本,然後調用副本上的onResize!
爲什麼static_cast(上面的代碼)創建一個新的副本?爲什麼不只是使用對象的基類部分?
如果它被轉換爲'static_cast(* this).onResize();',那麼我認爲它會使用當前對象。 (注意'&')。但不知道。 –
2012-01-31 18:26:48
static_cast(this) - > onResize(); 也應該工作,但當然是 Window :: onResize(); 在這裏是正確的。 –
Trass3r
2013-03-08 14:27:14