Is the virtual functionality meaningless because the function is implemented in the .h?
No. virtual and inline are completely independent concepts.
virtual means that the function to call is chosen, at run-time if necessary, according to the dynamic type of the object it's invoked on.
inline means that you're allowed to define the function in more than one translation unit, and must define it in any translation unit that uses it. This is necessary (for some compilers) to allow the function to be inlined, but does not force all calls to be inlined. In particular, virtual calls usually won't be inlined (unless the dynamic type can be determined at compile time), so virtual will certainly retain its meaning here.
Is this considered to be an inline?
Yes, but (as mentioned above) that does not mean that all calls will be inlined.
inlineandvirtualare unrelated...virtualfunction hierarchy and they are invoked using pointer/reference. Then it will restrict compiler to replace those function call with its contents (typical macro style inlining).inlinehas nothing to do with whether or not any particular use of the function is inlined (except to the extent that the compiler might use it as a hint). It means that the function is defined in every translation unit that uses it, which is unrelated to whether it's virtual.