Я читаю 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();
, то я думаю, что он использовал бы текущий объект. (Обратите внимание на&
). Хотя не уверен. - person Aaron McDaid   schedule 31.01.2012