The second type of interview questions in C++ concerns analyzing execution results of some sample code.
Candidates without deep understanding of C++ are prone to make mistakes because the code to be
analyzed is usually quite tricky.
For example, an interviewer hands a piece of paper printed with the code in Listing 2-8 to a candidate
and asks the candidate what the result is if we try to compile and execute the code: (A) Compiling error; (B)
It compiles well, but crashes in execution; or (C) It compiles well, and executes smoothly with an output of
10.
Listing 2-8. C++ Code about Copy Constructor
The parameter in the copy constructor A(A other) is an instance of type A. When the copy constructor is executed, it calls the copy constructor itself because of the pass-by-value parameter. Since endless recursive calls cause call stack overflow, a pass-by-value parameter is not allowed in the C++ standard, and both Visual Studio and GCC report an error during compiling time. We have to modify the constructor as A(const A& other) to fix this problem. That is to say, the parameter in a copy constructor should be passed by a reference.
www.cinterviews.com appreciates your contribution please mail us the questions you have to cinterviews.blogspot.com@gmail.com so that it will be useful to our job search community
Listing 2-8. C++ Code about Copy Constructor
class A {
private:
int value; public:
A(int n) {
value = n;
}
A(A other) {
value = other.value;
}
void Print() {
std::cout << value << std::endl;
}
};
int main(int argc, _TCHAR* argv[]) {
A a = 10;
A b = a;
b.Print();
return 0;
}
The parameter in the copy constructor A(A other) is an instance of type A. When the copy constructor is executed, it calls the copy constructor itself because of the pass-by-value parameter. Since endless recursive calls cause call stack overflow, a pass-by-value parameter is not allowed in the C++ standard, and both Visual Studio and GCC report an error during compiling time. We have to modify the constructor as A(const A& other) to fix this problem. That is to say, the parameter in a copy constructor should be passed by a reference.
No comments:
Post a Comment