With the struct definition given below...
struct A { virtual void hello() = 0; };
Approach #1:
struct B : public A {
Adding the "virtual" keyword is good practice as it improves readability , but it is not necessary. Functions declared virtual in the base class, and having the same signature in the derived classes are considered "virtual" by default.