我正在阅读Effective C++并遇到了这个例子:
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 (上面的代码)会创建一个新副本?为什么不只使用对象的基类部分?