Question of using static_cast on “this” pointer in a derived object to base class
这是从有效的C++ 3ED中获取的一个例子,它表示如果使用EDCOX1(0),则复制对象的基部,并从该部分调用该调用。我想知道引擎盖下面发生了什么,有人能帮忙吗?
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | 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 }; |
这是:
1 | static_cast<Window>(*this).onResize(); |
实际上与此相同:
1 2 3 4 | { Window w = *this; w.onResize(); } // w.~Window() is called to destroy 'w' |
第一行创建由
这一点很重要:对于
如果您想在
1 | Window::onResize(); |
为什么要铸造?如果要调用window的onResize(),请执行此操作,
1 | Window::onResize(); //self-explanatory! |
好吧,你也可以这样做,也可以使用静态投射,但是你必须这样做,
1 2 | static_cast<Window&>(*this).onResize(); //note '&' here ^^ |