Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Professional C++ [eng].pdf
Скачиваний:
284
Добавлен:
16.08.2013
Размер:
11.09 Mб
Скачать

C++ Interviews

More challenging inheritance questions have to do with the relationship between a superclass and a subclass. Be sure you know how the different access levels work, and the difference between private and protected. Remind yourself of the phenomenon known as slicing, when certain types of casts cause a class to lose its subclass information.

Chapter 11: Writing Generic Code with Templates

As one of the most arcane parts of C++, templates are a good way for interviewers to separate the C++ novices from the pros. While most interviewers will forgive you for not remembering some of the advanced template syntax, you should go into the interview knowing the basics.

Things to Remember

How to write a basic templatized class

The two main disadvantages of templates — ugly syntax and code bloat

How to use a templatized class

Types of Questions

Many interview questions start out with a simple problem and gradually add complexity. Often, interviewers have an endless amount of complexity that they are prepared to add and they simply want to see how far you get. For example, an interviewer might begin a problem by asking you to create a class that provides sequential access to a fixed number of ints. Next, the class will need to grow to accommodate an arbitrary sized array. Then, it will need arbitrary data types, which is where templates come in. From there, the interviewer could take the problem in a number of directions, asking you to use operator overloading to provide array-like syntax or continuing down the template path by asking you to provide a default type.

Templates are more likely to be employed in the solution of another coding problem than to be asked about explicitly. You should brush up on the basics in case the subject comes up. However, most interviewers understand that the template syntax is difficult, and asking someone to write complex template code in an interview is rather cruel.

Chapter 12: Understanding C++ Quirks

and Oddities

Many interviews tend to focus on the more obscure cases because that way experienced C++ programmers can demonstrate that they have conquered the unusual parts of C++. Sometimes interviewers have difficulty coming up with interesting questions and end up asking the most obscure question they can think of.

793

Appendix A

Things to Remember

References must be bound to a variable when they are declared and the binding cannot be changed.

The advantages of pass-by-reference over pass-by-value

The many uses of const

The many uses of static

The different types of casts in C++

Types of Questions

Asking a candidate to define const and static is a classic C++ interview question. Both keywords provide a sliding scale with which an interviewer can assess an answer. For example, a fair candidate will talk about static methods and static data members. A good candidate will give good examples of static methods and static data members. A great candidate will also know about static linkage and static variables in functions.

The edge cases described in this chapter also come in find-the-bug type problems. Be on the lookout for misuse of references. For example, imagine a class that contains a reference as a data member:

class Gwenyth

{

public:

int& mCaversham;

};

Because mCaversham is a reference, it needs to be bound to a variable when the class is constructed. To do that, you’ll need to use an initializer list. The class could take the variable to be referenced as a parameter to the constructor:

class Gwenyth

{

public: Gwenyth(int i);

int& mCaversham;

};

Gwenyth::Gwenyth(int i) : mCaversham(i)

{

}

Chapter 13: Effective Memor y Management

Memory-related questions tend to be asked by low-level programmers or C++ programmers who have a background in C. The goal is to determine whether the object-oriented aspects of C++ have distanced you too much from the underlying implementation details. Memory management questions will give you a chance to prove that you know what’s really going on.

794

C++ Interviews

Things to Remember

Drawing the stack and the heap can help you understand what’s going on.

Use new and delete instead of malloc() and free().

Use new[] and delete[] for arrays.

If you have an array of pointers to objects, you still need to allocate memory for each individual pointer and delete the memory — the array allocation syntax doesn’t take care of pointers!

In a pinch, you can always say, “Of course in real life, I would run this through valgrind to expose the problem.”

Types of Questions

Find-the-bug questions often contain memory issues, such as double-deletion, new/new[] mixup, and memory leaks. When you are tracing through code that makes heavy use of pointers and arrays, you should draw and update the state of memory as you process each line of code. Even if you see the answer right away, it will let the interviewer know that you’re able to draw the state of memory.

Another good way to find out if a candidate understands memory is to ask how pointers and arrays differ. At this point, the differences may be so tacit in your mind that the question catches you off-guard for a moment. If that’s the case, skim Chapter 13 again for the discussion.

Chapter 14: Demystifying C++ I/O

If you’re interviewing for a job writing GUI applications, you probably won’t get too many questions about I/O streams because GUI apps tend to use other mechanisms for I/O. However, streams can come up in other problems and, as a standard part of C++, they are fair game as far as the interviewer is concerned.

Things to Remember

The definition of a stream

Basic input and output using streams

The concept of manipulators

Types of streams (console, file, string, etc.)

Error-handling techniques

The importance of internationalization

Types of Questions

I/O may come up in the context of any question. For example, the interviewer could ask you to read in a file containing test scores and put them in a vector. This question tests basic C++ skills, basic STL, and basic I/O. Even if I/O is only a small part of the problem you’re working on, be sure to check for errors.

795

Appendix A

If you don’t, you’re giving the interviewer an opportunity to say something negative about your otherwise perfect program.

Your interviewer may not ask specifically about internationalization, but you can show your worldwide appeal by using wchar_t instead of char during the interview. If you do receive a question about your experience with internationalization, be sure to mention the importance of considering worldwide use from the beginning and show that you know about the locale facilities of C++.

Chapter 15: Handling Errors

Managers sometimes shy away from hiring recent graduates or novice programmers for vital (and highpaying) jobs because it is assumed that they don’t write production-quality code. You can prove to an interviewer that your code won’t keel over randomly by demonstrating your error-handling skills during an interview.

Things to Remember

Catch exceptions as const references.

For production code, hierarchies of exceptions are preferable to a few generic ones.

Throw lists in C++ aren’t like throw lists in Java!

Smart pointers help avoid memory leaks when exceptions are thrown.

Types of Questions

You’re unlikely to get a question directly about exceptions, unless it’s something cruelly specific, such as asking you to describe how the stack unwinds. However, interviewers will be on the lookout to see how you report and handle errors.

Of course, not all programmers understand or appreciate exceptions. Some may even have a bias against them for performance reasons. If the interviewer asks you to do something without exceptions, you’ll have to revert to traditional NULL checks and error codes. That would be a good time to demonstrate your knowledge of nothrow new!

Chapter 16: Overloading C++ Operators

It’s possible, though somewhat unlikely, that you would have to perform something more difficult than a simple operator overload during an interview. Some interviewers like to have an advanced question on hand that they don’t really expect anybody to answer correctly. The intricacies of operator overloading make great nearly impossible questions because few programmers get the syntax right without looking it up. That means it’s a great area to review before an interview.

796