Как вызвать метод базового класса через указатель базового класса, указывающий на производный класс - PullRequest
13 голосов
/ 16 июля 2009
class Base
{
  public:
    virtual void foo()
    {}
};

class Derived: public Base
{
  public:
    virtual void foo()
    {}
};

int main()
{
    Base *pBase = NULL;
    Base objBase;
    Derived objDerived;

    pBase = &objDerived;
    pBase->foo();

    /*Here Derived class foo will be called, but i want this to call 
    a base class foo. Is there any way for this to happen? i.e. through 
    casting or something? */
}

Ответы [ 3 ]

30 голосов
/ 16 июля 2009
pBase->Base::foo()
10 голосов
/ 16 июля 2009

Оба ответа верны ... Но будьте осторожны, если вам нужно сделать это, возможно, у вас есть большие проблемы с концепцией или дизайном ...

7 голосов
/ 16 июля 2009

Вы можете сделать это через оператор разрешения области действия ::

Примерно так:

pBase->Base::foo()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...