There are also functions with different number of parameters.
Well yes, obviously, and that's nothing to worry about.
But in this case, the apparent/obvious intent is to overload a base class' function. It's just not what is done, and the fact that it works is pure coincidence. Thus I say that it's actually a severe error.
Also there are virtual operator= which are totally wrong (search google for info)
While I'm not sure how it makes sense to overload the assignment operator, I don't see a real hindrance to doing that. After all,
operator= is just a function, like every other function. In fact,
SetTargetType could be thought of a kind of "partial"
operator=.
Which, again, makes me wonder (only judging from the function's name, without actually looking at the implementation) if it's necessary to overload such a function. It actually shouldn't ever need to be any different than the one in the base class. But well, there may be some call to UpdateFoobar() which is necessary in one and not the other, I sadly don't have the time to dig through source now to look.