我正在阅读 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(上面的代码)要创建一个新的副本?为什么不能只使用对象的基类部分?
static_cast<Window&>(*this).onResize();
,那么我认为它会使用当前对象。(请注意&
)。不过我不确定。 - Aaron McDaid