Нужно объяснение по этому коду с полиморфизмом - PullRequest
2 голосов
/ 22 февраля 2012

Я наткнулся на этот код, и я совершенно запутался в том, как он компилируется, поскольку одна из функций из A ссылается на статический B. Также, что он должен делать.

, где B является производным от A.

В файле A.h

static A*   instance();

в B.h

static B* instance() { return dynamic_cast<B*>(A::instance()); }

в B.cpp

A* A::instance()
{
    static B s_instance;
    return &s_instance;
}

Определения классов и тому подобное были опущены, чтобы облегчить код.

1 Ответ

1 голос
/ 22 февраля 2012
  • A::instance() дает вам A*, который указывает на B. Всегда один и тот же B.
  • B::instance() дает вам результат A::instance(), dynamic_cast ed до B*.

Нет причин для этого вызывать сбой компиляции (за исключением того, что отсутствуют определения A и B, то есть).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...