forgive me buddies if it is childish question, I cannot find good tutorial explaining it. So bear with me.

My questions are, how does forward declaration differ from normal include which I'm used to? Also, where do we use it and what are limitation of the two? Lastly is there any good tutorial or online book explaining these? Thanks!

A forward declaration does nothing but introduce the name of a type into the current scope. Headers typically provide full declarations, which include member information as well as the type name.