I have been watching several videos, and I have come to know how virtual function calls are processed through late binding.
In early binding, for lines like ptr->func(...), the compiler reviews the data type for ptr and looks in the corresponding class for the func(...) definition.
While during late binding for virtual functions, ptr address is accessed, and then the definition is looked up in the corresponding class.
If I am right about the mechanism I have just mentioned, then why does the following code produce an error?
class A{
   public:
       void func(){
       }
};
class B: public A{
    public:
       virtual void f4(){
           cout<<"Cunt"<<endl;
       }
};
int main(){
    A* ptr;
    B obj;
    ptr=&obj;
    ptr->f4();
    return 0;
}
Also, why does the below code produce the output base instead of the output derived?
class A{
   public:
       void f4(){
           cout<<"base"<<endl;
       }
};
class B: public A{
    public:
       virtual void f4(){
           cout<<"derived"<<endl;
       }
};
int main(){
    A* ptr;
    B obj;
    ptr=&obj;
    ptr->f4();
    return 0;
}
Please help. Am I wrong about the mechanism?
 
     
    