Nikola Smiljanić
Nikola Smiljanić

Reputation: 26873

Call virtual method from base class on object of derived type

class Base
{
public:
    virtual void foo() const
    {
        std::cout << "Base";
    }
};

class Derived : public Base
{
public:
    virtual void foo() const
    {
        std::cout << "Derived";
    }
};

Derived d; // call Base::foo on this object

Tried casting and function pointers but I couldn't do it. Is it possible to defeat virtual mechanism (only wondering if it's possible)?

Upvotes: 8

Views: 1712

Answers (2)

Daniel Daranas
Daniel Daranas

Reputation: 22624

To explicitly call the function foo() defined in Base, use:

d.Base::foo();

Upvotes: 24

Marcelo Cantos
Marcelo Cantos

Reputation: 185862

d.Base::foo();

Note that d.foo() would call Derived::foo regardless of whether foo was virtual or not.

Upvotes: 6

Related Questions