I have just found in the same C++ example that, the VanillOption class has a init function in implementation file. But this init function was not declared in the header file. Does it mean that it's not necessary to declare this kind of init function at all?
Functions which aren't meant to be part of the public interface for a module will naturally not be declared in a header file defining a public interface when it can be avoided. You won't be calling that function directly, so there is no reason for a declaration to be in the header file.