I used to be interviewed with Java and Python. Currently, I’m preparing an interview with C++. Here are some top C++ questions that are frequently asked in a real interview.

Question: Define C++?

Answer: C++ is a computer programming language that is a superset of C wherein additional features are made in the C language.

Question: Can we call C++ OOPS? and Why?

Answer: Yes, C++ can be called OOPS. The full form of OOPS is an Object-Oriented Programming System, which means a paradigm that provides an application of various concepts, including data binding, polymorphism, inheritance, and various others.

OOP features: Encapsulation, inheritance and polymorphism.

Question: Define Class in C++?

Answer: Class is referred to as the designing of the user-defined data type. It reflects the different entities, attributes, and actions.

Question: Define Object in C++?

Answer: Object is an instance of the class. An object can have fields, methods, constructors, and related.

Question: Define Encapsulation in C++?

Answer: Encapsulation is the process of binding together the data and functions in a class. It is applied to prevent direct access to the data for security reasons. The functions of a class are applied for this purpose.

Question: Briefly explain the concept of Inheritance in C++.

Answer: C++ allows classes to inherit some of the commonly used state and behavior from other classes.

Question: What is an abstraction in C++?

Answer: An abstraction in C++ is hiding the internal implementations and displaying only the required details.

Question: Define access specifier and its various types in C++

Answer: An access specifier offers how it is possible to define how the class members, i.e., functions and variables, will be accessed outside the class’s scope. There are three types of access specifier in C++:
• Private – Such class members can’t be accessed outside the class in which they are declared and are only accessible within the same class. Even child classes are disabled to access private members of its parent class.
• Protected – In addition to the class in which they are declared, the child classes can access its parent class’s protected members.
• Public – Class members declared as public can be accessed throughout the program (code)

Question: Define a namespace?

Answer: A namespace is used for resolving the name conflict of the identifier, which is accomplished by placing them under various namespaces. This way, it helps in the logical division of the different codes.

Question: Define a class template?

Answer: A class template is a name given to the generic class. The use of the keyword template is made for defining a class template.

Question: What is the function of the keyword “Volatile”?

Answer: “Volatile” is a function that helps in declaring that the particular variable is volatile and thereby directs the compiler to change the variable externally- this way, the compiler optimization on the variable reference can be avoided.

Question: Define storage class in C++? Name some?

Answer: Storage class in C++ specifically resemble life or even the scope of symbols, including the variables, functions, etc. Some of the storage class names in C++ include mutable, auto, static, extern, register, etc.

Question: What are the most important differences between C and C++?

Answer:
• C++ supports references while C doesn’t
• Features like friend functions, function overloading, inheritance, templates, and virtual functions are inherent to C++. These are not available in the C programming language.
• In C, exception handling is taken care of in the traditional if-else style. On the other hand, C++ offers support for exception handling at the language level.
• Mainly used input and output in C are scanf() and printf(), respectively. In C++, cin is the standard input stream while cout serves as the standard output stream.
• While C is a procedural programming language, C++ provides support for both procedural and object-oriented programming approaches.

Question: Why do we need the Friend class and function?

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
using namespace std;
class CCar;
class CDriver{
public:
void ModifyCar(CCar* pCar);
};
class CCar{
private:
int price;
//declare friend
friend int MostExpensiveCar(CCar cars[], int total);
friend vold CDriver::ModifyCar(CCar* pCar);
}
void CDriver::ModifyCar(CCar* pCar){
pCar->price += 1000;
}
int MostExpensiveCar(CCar cars[], int total){
int max = -1;
for(int i = 0 ;i< total ; ++i){
if(cars[i].price>max){
max = cars[i].price;
}
return max;
}
}
int main() {
return 0;
}

Answer: Sometimes, there is a need for allowing a particular class to access private or protected members of a class. The solution is a friend class, which can access the protected and private members of the class in which it is declared as a friend.
Similar to the friend class, a friend function is able to access private and protected class members. A friend function can either be a global function or a method of some class.
Some important points about friend class and friend function:
• Friendship is not inherited.
• Friendship isn’t mutual, i.e., if some class called Friend is a friend of some other class called NotAFriend, then it doesn’t automatically become a friend of the Friend class.
• The total number of friend classes and friend functions should be limited in a program as the overabundance of the same might lead to a depreciation of the concept of encapsulation of separate classes, which is an inherent and desirable quality of object-oriented programming.

Question: Explain the significance of vTable and vptr in C++ and how the compiler deals with them

Answer: vTable is a table containing function pointers. Every class has a vTable. vptr is a pointer to vTable. Each object has a vptr. In order to maintain and use vptr and vTable, the C++ compiler adds additional code at two places:

  1. In every constructor – This code sets vptr:
  2. Of the object being created
  3. To point to vTable of the class
  4. Code with the polymorphic functional call – At every location where a polymorphic call is made, the compiler inserts code in order to first look for vptr using the base class pointer or reference. The vTable of a derived class can be accessed once the vptr is successfully fetched. Address of derived class function show() is accessed and called using the vTable.

Question: How is function overloading different from operator overloading?

Answer: Function overloading allows two or more functions with different type and number of parameters to have the same name. On the other hand, operator overloading allows for redefining the way an operator works for user-defined types.

Question: Is it possible for a C++ program to be compiled without the main() function?

Answer: Yes, it is possible. However, as the main() function is essential for the execution of the program, the program will stop after compiling and will not execute.

Question: What is a destructor?

Answer: A destructor is the member function of the class. It has the same name as the class name and also prefixed with a tilde symbol. It can be executed automatically whenever an object loses its scope.

Question: Can we overload a destructor?

Answer: No, a destructor cannot be overloaded, and it has the only form without the parameters.

Question: What is the default constructor?

Answer: The compiler provides a constructor to every class in case the provider does not offer the same. This is when the programmer provides the constructor with no specific parameters than it is called a default constructor. The code for default constructor can be displayed in the following example.

Question: Can we provide one default constructor for our class?

Answer: No, we cannot provide one default constructor for our class. When a variable in the class type is set to null, it means that it was never initialized and the outcomes will be zero.

Question: What is the main difference between the keyword struct and class?

Answer: The keyword struct is used for resembling public members by default, while the keyword class is used for resembling private members by default.

Question: Draw a comparison between C++ and Java

Answer:
• C++ has destructors, which are invoked automatically when an object is destroyed. Java has something called automatic garbage collection
• C++ supports multiple inheritance, operator overloading, pointers, structures, templates, and unions. Java doesn’t have any of them
• Java has a Thread class that is inherited in order to create a new thread. C++ has no inbuilt support for threads
• In C++, a goto statement offers a way to jump from a location to some labeled statement in the same function. There is no goto statement in Java
• C++ run and compile using the compiler, which converts the source code into machine level language. Hence, it is platform-dependent. Java compiler, on the other hand, converts the source code into JVM bytecode, which is platform-independent.

Question: What differences separate structure from a class in C++?

Answer: There are two important distinctions between a class and a structure in C++. These are:

  1. When deriving a structure from a class or some other structure, the default access specifier for the base class or structure is public. On the contrary, default access specifier is private when deriving a class.
  2. While the members of a structure are public by default, the members of a class are private by default

Question: What does a Static member in C++ mean?

Answer: Denoted by the static keyword, a static member is allocated storage, in the static storage area, only once during the program lifetime. Some important facts pertaining to the static members are:
• Any static member function can’t be virtual
• Static member functions don’t have ‘this’ pointer
• The const, const volatile, and volatile declaration aren’t available for static member functions

Question: Define the Reference variable?

Answer: The reference variable in C++ is the name given to the existing variables. The variable name and reference variable point share the same memory location in C++, which helps in updating the original variable using the reference variable. The code can be displayed in the following example.

Question: Define the Copy Constructor used in C++ along with its general function prototype. Also, explain the various scenarios in which it is called.

Answer: A member function that initializes an object using another object of the same class is known as a copy constructor in C++. Copy Constructor can also be made private. A call to the Copy Constructor can happen in any of the following 4 scenarios when:

  1. The compiler generates a temporary object
  2. An object is constructed or based on some another object of the same class
  3. An object of the class is returned by value
  4. An object of the class is passed (i.e., to a function) by value as an argument
    The general function prototype for the Copy Constructor is:
1
2
3
ClassName (const ClassName &old_obj);
Point(int x1, int y1) { x=x1; y=y1;}
Point(const Point &p2) { x=p2.x; y=p2.y; }

Question: Observe the following code snippet:

1
2
int i = 5;
int j = i++;

After execution, what will be the value of I and j? Explain your answer.
Answer: Post the execution of the code above, i and j will be 6 and 5, respectively. For understanding the output, it’s important to understand how the unary ‘++’ operator and the decrement ‘–’ operator works in C++.
When any of these operators precede a variable, the value of the variable is first modified, and then this modified value is used. However, when any of the two operators follow a variable, the value is first used, and then it is modified.
Therefore, in the code above j is set to the unmodified value of 5, and then i is incremented to store 6.

Question: Take a look at the following two code examples for printing a vector:

image.png
Is there any advantage of using one over the other?
Answer: Though both codes will generate the same output, sample code 2 is a more performant option. This is due to the fact that the post-increment ‘itr++’ operator is more expensive than the pre-increment ‘++itr’ operator.
The post-increment operator generates a copy of the element before proceeding with incrementing the element and returning the copy. Moreover, most compilers will automatically optimize sample code 1 by converting it implicitly into sample code 2.

Question: Define an Abstract class in C++?

image.png
Answer: An abstract class in C++ is referred to as the base class, which has at least one pure virtual function. In such a function, a person cannot instantiate an abstract class. This way, an Abstract class a pure virtual function is defined by using a pure specifier which is equal to zero during the declaration of the virtual member function in the class declaration. The code sample can be displayed as follows in example.

Question: Suppose you have the GPA (Grade Point Average) of n number of students, and you need to store and display it using C++. Can you write a program that accomplishes this?

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#include
#include<iostream>
using namespace std;
int main(){
int num;
cout<< "Enter the total number of students: ";
cin>> num;
float* ptr;
ptr = new float[num];
cout<<"Enter the GPA of students" << endl;
for(int i = 0;i<num;++i){
cout<<"Student"<<i+1 << ":";
cin>>*(ptr+i);
}
cout << "\nDisplay GPA of students." <<endl;
for(int i = 0; i<num; ++i){
cout<<"Student" << i+1 <<":" << *(ptr+i) << endl;
}
delete[] ptr;
return 0;
}