C++ overriding Vs hiding

class B
{
public:
void fns(void){//base def;}
};
class D:public B
{
public:
void fns(void) {//new def;}
};

I was thinking the above is overriding but somewhere else i found the above is just hiding.Only virtual functions can be considered as overriding?
This is the exact statement

Overriding has different scopes, same name, same signatures, and virtual is required.

Please explain

Consider this code:

#include <stdio.h>

class B
{
public:
        void fns(void){ fprintf(stderr, "B::fns\n"); }
};

class D:public B
{
public:
        void fns(void) {fprintf(stderr, "D::fns\n"); }
};

void call_fns(B &obj)   {       obj.fns();      }

int main(void)
{
        D d;
        call_fns(d);
}

It will print "B::fns" because when the object is cast into its parent "B", the compiler no longer knows it should be calling D::fns. Without virtual functions, the compiler calls member functions based on the class type alone; casting it into its parent class loses all the functions you overrode.

But when we do this:

#include <stdio.h>

class B
{
public:
        virtual void fns(void){ fprintf(stderr, "B::fns\n"); }
};

class D:public B
{
public:
        virtual void fns(void) {fprintf(stderr, "D::fns\n"); }
};

void call_fns(B &obj)   {       obj.fns();      }

int main(void)
{
        D d;
        call_fns(d);
}

This time it will print D::fns. Virtual tells the compiler to remember if a function has been overloaded, even if it is cast into a parent class. It does so with a hidden variable, so keep in mind that using virtuals has a small performance cost, and increases the size of the class.