полиморфизм c ++ - доступ к производным функциям с указателем базы - PullRequest
2 голосов
/ 13 марта 2012

Есть ли способ, которым я могу сделать следующую работу, или есть обходной путь?Должно быть, я что-то упустил.

class base
{
public:
    int someInt;
    virtual void someFunction(){}
};

class derived : public base
{
public:
    void someFunction(){}
    void anotherFunction(){}
};

int main (int argc, char * const argv[]) {

    base* aBasePointer = new derived;

    aBasePointer->anotherFunction();

    delete aBasePointer

    return 0;
}

Ответы [ 3 ]

7 голосов
/ 13 марта 2012

Используйте dynamic_cast<> до downcast указатель на производный класс (не забудьте проверить результат).

например

if ((derived* p = dynamic_cast<derived*>(aBasePointer)))
{
  // p is of type derived.
  p->anotherFunction();
}
1 голос
/ 13 марта 2012

То, что предложил Ним, будет работать, но если вы выполняете downcast, у вас почти наверняка возникнут проблемы с дизайном. Если вы объясните, чего вы пытаетесь достичь, возможно, мы можем предложить лучшую альтернативу.

0 голосов
/ 13 марта 2012

Это будет работать

int main (int argc, char * const argv[]) {

    derived* aDerivedPointer = new derived;

    aDerivedPointer->anotherFunction();

    delete aDerivedPointer

    return 0;
}

Кроме этого, вам нужно предоставить больше информации о том, чего вы пытаетесь достичь.

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