Programming using C++
Interview Questions with Answers
Explore Our Courses
What are the key features of C++?
Answer:
C++ is a multi-paradigm programming language that supports both procedural and object-oriented programming. Key features include:
- Object-Oriented Programming (Classes, Objects, Inheritance, Polymorphism, Abstraction, Encapsulation)
- Templates (Generic programming)
- Standard Template Library (STL)
- Operator and Function Overloading
- Exception Handling
- Dynamic Memory Management (new, delete)
- Namespaces (to avoid naming conflicts)
- Support for Low-Level Programming (pointers, inline assembly)
- RAII (Resource Acquisition Is Initialization)
- Modern features from C++11, C++14, C++17, and C++20
- C++ supports multithreading with the
<thread>library (from C++11 onwards), enabling concurrent execution and parallel programming. - Introduced in C++11, lambdas allow writing anonymous functions inline, useful for short functions especially in STL algorithms.
Boost your confidence with the most asked C++ interview questions!
2. How is C++ different from C?
Answer:
| Feature | C | C++ |
| Programming Paradigm | Procedural | Multi-paradigm (Procedural + OOP) |
| Object-Oriented Support | No | Yes (classes, inheritance, polymorphism, etc.) |
| Function Overloading | Not supported | Supported |
| Namespace | Not available | Available |
| Templates/Generics | Not supported | Fully supported |
| Standard Library | Limited (stdio.h, etc.) | Rich (STL: vector, map, set, etc.) |
| Exception Handling | Manual (via return codes) | Try-catch blocks supported |
3. What is a namespace in C++?
Answer:
A namespace in C++ is used to avoid name conflicts by grouping entities (functions, classes, variables) under a name.
Example:
#include <iostream>
namespace Learn2Earn {
void greet() {
std::cout << "Welcome to C++!" << std::endl;
}
}
int main() {
Learn2Earn::greet();
return 0;
}Namespaces help manage large codebases and libraries where multiple modules may have same-named entities.
4. What is the role of the main() function in C++?
Answer:
The main() function is the entry point of any C++ program.
Features:
- Must return an int (commonly returns 0 for success).
- Can accept arguments: int main(int argc, char* argv[])
- C++ allows both:
- int main()
- int main(int argc, char* argv[])
Example:
int main() {
std::cout << "Hello, World!";
return 0;
}Without main(), a C++ program cannot execute.
5. What are the new features introduced in C++11 and C++17?
Answer:
C++11 Key Features:
- auto keyword
- nullptr (replaces NULL)
- Range-based for loop
- Lambda expressions
- Move semantics and rvalue references
- Smart pointers (unique_ptr, shared_ptr)
- static_assert, decltype, constexpr
- Thread support (multi-threading)
C++17 Key Features:
- if constexpr for compile-time conditions
- Structured bindings (auto [a, b] = pair)
- std::optional, std::variant, std::any
- std::filesystem
- inline variables
- Template argument deduction
- Improved performance and standard compliance
6. What are tokens in C++?
Answer:
Tokens are the smallest elements of a C++ program that are meaningful to the compiler.
Types of Tokens:
- Keywords – int, return, class, public, etc.
- Identifiers – Variable and function names
- Literals – Constants (10, 3.14, ‘A’, “Hello”)
- Operators – +, -, *, /, =, etc.
- Punctuators – ;, {}, (), [], etc.
- Comments – // or /* */
Every C++ program is composed of tokens.
7. What is a reference variable in C++?
Answer:
A reference variable is an alias for another variable. It must be initialized during declaration and refers to the same memory.
Syntax:
int a = 10; int &ref = a; // ref is a reference to a
Use Cases:
- Efficient parameter passing
- Function return by reference
- Used in range-based loops and operator overloading
8. What is the use of the auto keyword in C++?
Answer:
The auto keyword automatically deduces the type of the variable from the initializer expression.
Example:
auto x = 10; // int auto y = 3.14; // double auto name = "John"; // const char*
Benefits:
- Cleaner and more readable code
- Especially useful in templates, STL iterators, and lambda expressions
9. What is the difference between cin and scanf()?
Answer:
Feature | cin (C++) | scanf() (C) |
| Type Safety | Type-safe | Not type-safe |
| Syntax Simplicity | Cleaner: cin >> var; | Verbose: scanf(“%d”, &var); |
| Overloading | Supports overloading | Does not support overloading |
| Format Specifiers | Not required | Required (%d, %f, etc.) |
| Used In | C++ | C and also in C++ (but not preferred) |
10. What are the basic I/O operations in C++?
Answer:
C++ uses streams for I/O operations:
Operation | Stream Object | Example |
| Input | cin | cin >> name; |
| Output | cout | cout << “Hello”; |
| Error | cerr | cerr << “Error!” << endl; |
| Log | clog | clog << “Logged data”; |
Example:
#include <iostream>
using namespace std;
int main() {
int age;
cout << "Enter your age: ";
cin >> age;
cout << "You entered: " << age << endl;
return 0;
}11. What are the four pillars of Object-Oriented Programming?
Answer:
The four pillars of OOP are:
- Encapsulation – Binding data and methods into a single unit (class), and restricting access using access specifiers.
- Abstraction – Hiding internal implementation and showing only essential features.
- Inheritance – Acquiring properties and behaviors of one class into another.
- Polymorphism – Ability to take many forms (e.g., function overloading, overriding).
These principles make OOP powerful, modular, and reusable.
12. What is the difference between a class and an object?
Answer:
Feature | Class | Object |
| Definition | Blueprint/template for objects | Real-world instance of a class |
| Memory | No memory until object is created | Occupies memory during runtime |
| Declaration | class Car { … }; | Car c1; |
| Purpose | Defines structure and behavior | Uses structure and behavior defined in class |
13. What is encapsulation? Give a real-world example.
Answer:
Encapsulation is the bundling of data and methods that operate on that data, while restricting direct access to internal details.
Example:
In a bank account class:
class BankAccount {private:
double balance;
public:
void deposit(double amount) { balance += amount; }
void withdraw(double amount) { if (balance >= amount) balance -= amount; }
double getBalance() { return balance; }
};- Data (balance) is hidden (private).
- Access is provided through public methods.
Encapsulation ensures data protection and controlled access.
14. What is inheritance in C++? How does it work?
Answer:
Inheritance allows a class (child/derived) to acquire the properties and behavior of another class (parent/base).
Syntax:
class Vehicle {
public:
void move() { cout << "Moving..." << endl; }
};
class Car : public Vehicle {
public:
void honk() { cout << "Beep Beep!" << endl; }
};Types of Inheritance:
- Single
- Multiple
- Multilevel
- Hierarchical
- Hybrid
Enables code reuse and supports polymorphism.
15. What is function overloading and operator overloading?
Answer:
Function Overloading: Defining multiple functions with the same name but different parameters.
void print(int a); void print(double b); void print(string s);
Operator Overloading: Giving custom behavior to operators for user-defined types.
class Complex {public:
int real, imag;
Complex operator+(const Complex& c) {
Complex temp;
temp.real = real + c.real;
temp.imag = imag + c.imag;
return temp;
}
};Both are examples of compile-time polymorphism.
16. What is polymorphism in C++?
Answer:
Polymorphism means “many forms” – the ability of a function, method, or operator to behave differently based on context.
Types:
- Compile-time Polymorphism (Static)
- Function overloading
- Operator overloading
- Run-time Polymorphism (Dynamic)
- Achieved using virtual functions and inheritance
Allows code to be extensible and flexible.
17. What is the difference between compile-time and run-time polymorphism?
Answer:
| Feature | Compile-Time Polymorphism | Run-Time Polymorphism |
| When Resolved | At compile time | At run time |
| Technique Used | Function/operator overloading | Virtual functions + pointers |
| Performance | Faster (no overhead) | Slightly slower (uses vtable) |
Example:
Compile-time:
void print(int x); void print(double y);
Run-time:
class Base {
public:
virtual void show() { cout << "Base\n"; }
};
class Derived : public Base {
public:
void show() override { cout << "Derived\n"; }
};18. What is abstraction? How is it implemented in C++?
Answer:
Abstraction is the concept of hiding implementation details and showing only essential features to the user.
Ways to Implement Abstraction:
- Abstract Classes (contain pure virtual functions)
- Interfaces (via only pure virtual methods)
Example:
class Shape {
public:
virtual void draw() = 0; // Pure virtual function
};
class Circle : public Shape {public:
void draw() override {
cout << "Drawing Circle" << endl;
}
};Promotes interface-based design and loose coupling.
19. What are access specifiers?
Answer:
Access specifiers control the visibility of class members (data/functions) outside the class.
| Specifier | Accessible within class | Derived class | Outside class |
| public | Yes | Yes | Yes |
| protected | Yes | Yes | No |
| private | Yes | No | No |
Example:
class Test {public:
int a; // accessible everywhere
protected:
int b; // accessible in subclass
private:
int c; // accessible only within Test };
20. What is the use of this pointer?
Answer:
The this pointer is an implicit pointer available inside non-static member functions that refers to the current object.
Uses:
- To access data members that may be shadowed by local variables.
- To return the object itself from a function (method chaining).
- To pass the current object as a parameter.
Example:
class Employee {
int id;
public:
Employee(int id) { this->id = id; }
Employee& setId(int id) {
this->id = id;
return *this;
}
void show() {
cout << "ID: " << this->id << endl;
}
}; Prepare smartly and land your dream job in programming!
21. What is a constructor? Types of constructors in C++?
Answer:
A constructor is a special member function of a class that is automatically invoked when an object is created. It initializes the object.
Characteristics:
- Has the same name as the class
- No return type
- Can be overloaded
Types of Constructors:
- Default Constructor – Takes no parameters
- Parameterized Constructor – Accepts arguments
- Copy Constructor – Initializes an object using another object
- Dynamic Constructor – Allocates memory dynamically (uses new)
- Constructor with Initialization List
22. What is a copy constructor?
Answer:
A copy constructor is used to initialize a new object as a copy of an existing object.
Syntax:
ClassName(const ClassName &obj);
Example:
class Student {
int id;
public:
Student(int x) { id = x; }
Student(const Student &s) { id = s.id; }
};- If not defined explicitly, C++ provides a default copy constructor.
- Required when objects have pointers or dynamic memory (to avoid shallow copies).
23. What is a destructor? When is it called?
Answer:
A destructor is a special member function that is automatically called when an object goes out of scope or is explicitly deleted. It is used to free resources like dynamic memory.
Syntax:
~ClassName();
Characteristics:
- No parameters, no return type.
- Cannot be overloaded.
- Only one destructor per class.
Example:
class A {
public:
~A() {
cout << "Destructor called\n";
}
};24. What is the difference between a constructor and a method?
Answer:
| Feature | Constructor | Method (Member Function) |
| Purpose | Initializes the object | Defines behavior or operations |
| Name | Same as class | Any valid identifier |
| Return Type | No return type | Must have return type |
| Invocation | Automatically called when object is created | Manually called using object |
| Overloading | Yes | Yes |
25. Can constructors be virtual? Why or why not?
Answer:
No, constructors cannot be virtual in C++.
Reason:
- Constructors are invoked to create objects.
- Virtual functions require a vtable, which is set up after the constructor runs.
- Making constructor virtual would require vtable access before it’s constructed — which is not possible.
However, destructors can and should be virtual in polymorphic base classes.
26. Can a constructor be overloaded?
Answer:
Yes, constructors can be overloaded in C++.
Meaning:
A class can have multiple constructors with different parameter lists to allow various ways of initialization.
Example:
class Person {
public:
Person() { }
Person(string name) { }
Person(string name, int age) { }
};Enables constructor flexibility.
27. What is a default constructor?
Answer:
A default constructor is a constructor that takes no parameters (or all parameters have default values).
Example:
class Test {
public:
Test() {
cout << "Default constructor called\n";
}
};Note:
- If no constructor is provided, C++ automatically generates a default constructor.
- If any other constructor is defined, the default is not provided automatically unless explicitly defined.
28. What is the difference between shallow copy and deep copy?
Answer:
| Copy Type | Shallow Copy | Deep Copy |
| Behavior | Copies only pointer addresses | Copies actual data and creates new memory |
| Consequence | Both objects share same memory | Both objects are completely independent |
| Use Case | Safe for primitive types | Required for dynamic memory/pointers |
Example:
class A {
int* ptr;public:
A(int x) { ptr = new int(x); }
// Deep copy constructor
A(const A &obj) {
ptr = new int(*obj.ptr);
}
~A() { delete ptr; }
};29. What happens if you don’t define a destructor?
Answer:
If you don’t define a destructor:
- C++ provides a default destructor.
- For classes that do not manage resources manually, this is fine.
- BUT if your class allocates memory (e.g., with new), not defining a destructor leads to memory leaks.
Always define a destructor when your class allocates dynamic memory or resources (file handles, sockets, etc.).
30. What is constructor initialization list?
Answer:
A constructor initialization list is a more efficient way to initialize data members and base classes in C++.
Syntax:
class Student {
int id;
string name;
public:
Student(int i, string n) : id(i), name(n) { }
};Benefits:
- Initializes const and reference members (which must be initialized once).
- Efficient for initializing base classes and large objects.
- Avoids default constructor followed by assignment.
31. What are the types of inheritance in C++?
Answer:
C++ supports five types of inheritance:
- Single Inheritance – One base and one derived class.
- Multiple Inheritance – A class inherits from more than one base class.
- Multilevel Inheritance – Class derived from another derived class.
- Hierarchical Inheritance – Multiple classes inherit from a single base class.
- Hybrid Inheritance – Combination of any of the above, often leads to diamond problem.
32.What is multiple inheritance?
Answer:
Multiple Inheritance is when a derived class inherits from more than one base class.
Syntax:
class A { };
class B { };
class C : public A, public B { }; // C inherits from A and BIt allows combining features from multiple sources, but may cause ambiguity (like same function in both A and B).
33. How is ambiguity resolved in multiple inheritance?
Answer:
Ambiguity occurs when two base classes have members with the same name.
Resolved using scope resolution operator :::
class A {public:
void display() { cout << "A\n"; }
};
class B {public:
void display() { cout << "B\n"; }
};
class C : public A, public B {public:
void show() {
A::display(); // Resolving ambiguity
B::display();
}
};34. What is the diamond problem in C++?
Answer:
It occurs in multiple inheritance when two base classes inherit from the same grandparent, and a derived class inherits from both, causing duplicate copies of the grandparent.
Example:
A / \ B C \ / D
- Class D gets two copies of class A (via B and C).
- Leads to ambiguity (e.g., A::display() – which one?).
35. How does virtual inheritance solve the diamond problem?
Answer:
Using virtual inheritance, we tell the compiler to share the base class between multiple paths, avoiding duplication.
Example:
class A { public: void show() { cout << "A\n"; } };
class B : virtual public A { };
class C : virtual public A { };
class D : public B, public C { };Now, class D has only one copy of class A, avoiding ambiguity.
36. What is the difference between virtual and pure virtual functions?
Answer:
| Feature | Virtual Function | Pure Virtual Function |
| Definition | Has a body in base class | No body in base class (assigned = 0) |
| Usage | Optional to override | Must be overridden in derived class |
| Abstract class required? | No | Yes |
Example:
class A {public:
virtual void show() { cout << "A\n"; } // Virtual
virtual void draw() = 0; // Pure Virtual
};37. What is an abstract class?
Answer:
An abstract class is a class that contains at least one pure virtual function. It cannot be instantiated, and is meant to be a base class.
Example:
class Shape {public:
virtual void draw() = 0; // Pure virtual function
};
Used to define interfaces and polymorphic behavior in OOP.
38. What is function overriding?
Answer:
Function Overriding allows a derived class to provide a specific implementation of a method that is already defined in the base class.
Rules:
- Must have same name, parameters, and return type.
- Base class function should be virtual.
- Uses runtime polymorphism.
Example:
class Animal {public:
virtual void sound() { cout << "Animal sound\n"; }
};
class Dog : public Animal {public:
void sound() override { cout << "Dog barks\n"; }
};39. What is a virtual table (vtable)?
Answer:
A vtable is a hidden lookup table created by the compiler for classes with virtual functions.
- Contains addresses of virtual functions.
- Every object with virtual functions contains a hidden pointer to its class’s vtable.
- Enables dynamic dispatch at runtime.
40. What is dynamic dispatch?
Answer:
Dynamic dispatch is the process by which a function call is resolved at runtime, based on the actual type of the object, not the pointer type.
Enabled by:
- Virtual functions
- Vtable mechanism
Example:
Animal* a = new Dog(); a->sound(); // Calls Dog's sound() due to dynamic dispatch
Enables runtime polymorphism and flexibility in designing extensible applications.
Don’t just learn C++, master it with real interview-ready answers!
41. What is the difference between new and malloc()?
Answer:| Feature | new (C++) |
malloc() (C) |
| Language | C++ | C |
| Syntax | int* p = new int; | int* p = (int*) malloc(sizeof(int)); |
| Constructor Call | Calls constructor (for objects) | Does not call constructor |
| Type Safety | Type-safe | Not type-safe (requires casting) |
| Return Value | Correct type | void* (must be cast) |
| Failure Behavior | Throws bad_alloc exception | Returns NULL |
| Deallocation | delete | free() |
42. What is delete and how is it used?
Answer: The delete operator in C++ is used to deallocate memory allocated by new. Syntax:int* ptr = new int; delete ptr; // Frees memory int* arr = new int[5]; delete[] arr; // For arraysAlways pair new with delete, and new[] with delete[].
43. What is a memory leak? How can it be avoided?
Answer: A memory leak occurs when dynamically allocated memory is not deallocated, leading to wasted memory. Example:int* ptr = new int(10); // Memory allocated // No delete → memory leakHow to avoid:
- Always use delete after new.
- Use smart pointers (std::unique_ptr, std::shared_ptr).
- Use tools like Valgrind for leak detection.
44. What is a smart pointer? Types of smart pointers in C++11?
Answer: Smart pointers are class templates that automatically manage the lifetime of dynamically allocated objects. Types in C++11:- std::unique_ptr – Sole ownership.
- std::shared_ptr – Shared ownership.
- std::weak_ptr – Non-owning reference to shared_ptr.
45. What is the use of std::shared_ptr and std::unique_ptr?
Answer:| Smart Pointer | Description |
Ownership |
| std::unique_ptr | Manages memory exclusively. | Only one owner. |
| std::shared_ptr | Reference counted shared ownership. | Multiple owners. |
#include <memory> std::unique_ptr<int> uptr(new int(5)); std::shared_ptr<int> sptr1 = std::make_shared<int>(10); std::shared_ptr<int> sptr2 = sptr1; // shared ownership
46. What is a null pointer and dangling pointer?
Answer:- Null Pointer: Points to nothing (nullptr or NULL).
int* p = nullptr;
- Dangling Pointer: Points to freed or invalid memory.
int* p = new int(5); delete p; // p is now dangling unless set to nullptr p = nullptr;
47. What is pointer arithmetic?
Answer: Pointer arithmetic involves operations like increment, decrement, addition, and subtraction on pointers. Example:int arr[] = {10, 20, 30};
int* ptr = arr;
ptr++; // Now points to 20
Notes:
- Incrementing moves the pointer by sizeof(type).
- Only valid within the array/object range.
48. What is the difference between * and & operators in C++?
Answer:|
Operator |
Meaning |
Example |
| * | Dereference (get value at address) | *ptr = 5; |
| & | Address-of (get address of variable) | ptr = &x; |
49. How are arrays and pointers related?
Answer:- The name of the array is a pointer to its first element.
- Arrays and pointers are closely related but not the same.
int arr[5] = {1, 2, 3, 4, 5};
int* ptr = arr; // Points to arr[0]
cout << *(ptr + 2); // 3
Note: sizeof(arr) gives size of whole array, sizeof(ptr) gives size of pointer.
50. What is the difference between shallow copy and deep copy in pointer usage?
Answer:|
Copy Type |
Shallow Copy |
Deep Copy |
| Definition | Copies pointer addresses | Copies actual values to new memory |
| Risk | Two pointers point to same data | Safe and independent copies |
| Problem | Changes in one affect the other | Independent copies prevent side-effects |
class Test {
int* data;
public:
Test(int val) { data = new int(val); }
// Deep Copy
Test(const Test& t) {
data = new int(*t.data);
}
~Test() { delete data; }
};
51. What is the Standard Template Library (STL) in C++?
Answer: The Standard Template Library (STL) is a powerful set of C++ template classes that provides generic containers, algorithms, iterators, and function objects. It enables reusable, efficient, and type-safe code with compile-time type checking.52. What are the main components of STL?
Answer: STL consists of four main components:- Containers → Store data (vector, list, map, etc.)
- Algorithms → Operate on containers (sort, find, count, etc.)
- Iterators → Access container elements (begin(), end(), etc.)
- Function Objects (Functors) → Used in custom operations in algorithms
53. What is the difference between vector, list, and deque?
Answer:| Feature | vector | list (doubly linked) |
deque |
| Memory Layout | Contiguous | Non-contiguous (nodes) | Segmented |
| Insertion | Fast at end | Fast at both ends & middle | Fast at both ends |
| Random Access | Yes (O(1)) | No (O(n)) | Yes (O(1)) |
| Overhead | Less | More (pointers) | More (slightly higher than vector) |
54. How is a map different from unordered_map?
Answer:|
Feature |
map |
unordered_map |
| Order | Sorted (by key) | Unordered |
| Implementation | Balanced BST (Red-Black Tree) | Hash Table |
| Time Complexity | O(log n) | O(1) average, O(n) worst |
| Key Comparison | Uses operator< | Uses hash and equality functions |
55. What are iterators in STL?
Answer: Iterators are objects that point to elements in containers and enable traversal using a pointer-like interface. Common Types:- begin(), end(), rbegin(), rend()
- Input, Output, Forward, Bidirectional, Random Access
vector<int> v = {1, 2, 3};
for (vector<int>::iterator it = v.begin(); it != v.end(); ++it)
cout << *it << " ";
56. What is the use of lambda expressions in C++11?
Answer: Lambda expressions are anonymous functions that can be defined inline and passed to STL algorithms. Syntax:[ capture ] (parameters) -> return_type { body }
Example:
vector<int> v = {1, 2, 3, 4, 5};
int evenCount = count_if(v.begin(), v.end(), [](int x) { return x % 2 == 0; });
Lambdas make code concise and enable custom logic in-place.
57. What are functors in C++?
Answer: A functor (function object) is a class or struct that overloads the operator(), making its objects callable like functions. Example:struct MultiplyBy2 {
int operator()(int x) const {
return x * 2;
}
};
MultiplyBy2 fn;
cout << fn(10); // Output: 20
Used in STL algorithms like sort(), for_each() etc., as custom comparators or predicates.
58. What is the difference between std::sort() and qsort()?
Answer:|
Feature |
std::sort() |
qsort() (C-style) |
| Language | C++ (template-based) | C |
| Type Safety | Yes | No (uses void* and function ptrs) |
| Performance | Faster (inline, optimized) | Slower (no inlining, overhead) |
| Usage | Works with iterators and functors | Works with pointers and structs |
59. What is exception handling in C++? How do try, catch, and throw work?
Answer: Exception Handling in C++ is used to handle runtime errors gracefully without crashing the program. Keywords:- try → Block of code to monitor for errors
- throw → Used to raise (throw) an exception
- catch → Block to handle the thrown exception
try {
int x = 0;
if (x == 0)
throw "Division by zero error!";
} catch (const char* msg) {
cout << msg << endl;
}
60. What is RAII (Resource Acquisition Is Initialization) in C++?
RAII is a programming idiom where resource allocation (memory, file, lock, etc.) is tied to object lifetime. Key Points:- Resources are acquired in constructor
- Released in destructor automatically
- Prevents memory leaks and dangling handles
class FileHandler {
FILE* file;
public:
FileHandler(const char* filename) {
file = fopen(filename, "r");
}
~FileHandler() {
fclose(file); // Automatic cleanup
}
};
Modern C++ uses RAII in std::unique_ptr, std::lock_guard, etc. 