I've interviewed a fair number of people applying for OO developer positions and the concepts moa listed are definitely ones that I would expect the applicants to know about. The exception might be templates, but that's mainly because we don't hire many C++ developers these days...

If you're the interviewer, you might want to start out with two other questions before going into those details, though:

A) What is the difference between a class and an object?


B) Give me an example of a development task where you wouldn't recommend using OO.

Why these two? Because the answers you get will tell you a lot about the experience of the person answering.

If you get a long and complicated answer to question A, the applicant is probably not very comfortable with OO concepts yet. On the other hand, if the applicant oversimplifies or avoids the trickier parts, he might not even have understood the basic ideas behind OO. The last case is unfortunately common among developers who have gone directly from C to C++ or made another similar switch from a non-OO language.

Question B is thrown in to see if the applicant is overly enthusiastic about OO. If the answer is "there is nothing that can't be built with OO," you probably have a very inexperienced OO-developer on your hands. When you just have finished learning a new language, the novelty of it tends to make you think you can solve anything with this wonderful new tool. Experienced programmers tend to be a lot more pragmatic.

BTW, my answer to question A would be: "An object is an instance of a class. A class is an instance of the class 'Class'." Can you guess my favorite OO language?