The second question: this is not a multiplication operator in this context.
Read it like this: virtual ITreeFactory* createTreeFactory()=0;
It is an abstract virtual function which returns something of type ITreeFactory*, i.e. a pointer to an object of type ITreeFactory. This looks like something like COM to me - perhaps it is a bit advanced if you haven't studied pointers yet.
Have you heard of virtual and/or abstract functions?