Virtual classes and enumerative invariants