Virtual functions in derived classes

The truth is in a  class hierarchy of several levels if we want a function at any level to be called through a base class pointer then the function must be declared as virtual in the base class but defining it as virtual in any intermediate class won’t work

#include <iostream>
using namespace std;
class base
{
public:
    virtual void fun1()
    {
        cout<<endl<<"in base::fun1";
    }
};
class derived:public base
{
public:
    void fun1()
    {
        cout<<endl<<"in derived::fun1";
    }
     void fun2()
    {
        cout<<endl<<"in derived::fun2";
    }
    };
int main()
{
  base *ptr1, *ptr2;
  base b;
  derived d;
  ptr1=&b;
  ptr2=&d;
  ptr1->fun1();
  ptr2->fun1();
  ptr2->fun2();// ERROR//use((derived*)ptr2)->fun2();
    return 0;
}

The problem here is that the compiler is working only with a pointer to a base class object

In reality, the base class doesn’t have the fun2() function so, the compiler cannot allow a call to fun2()

which means the compiler will not know that you are working with a derived object if it has only a pointer to a base class object

As can be seen, the compiler reports an error for the below statement

ptr2->fun2();// ERROR

If the base class doesn’t have the fun2() then the compiler will not know that you are working with a derived object when it has only a pointer to a base class object

However, you can remove this error message by casting the base class pointer

((derived*)ptr2)->fun2();

Mohammed Anees

Hey there, welcome to aneescraftsmanship I am Mohammed Anees an independent developer/blogger. I like to share and discuss the craft with others plus the things which I have learned because I believe that through discussion and sharing a new world opens up

Leave a Reply

Your email address will not be published.