A virtual function is a member function in a base class that you expect to be overridden in derived classes. It allows C++ to support runtime polymorphism by deciding which function to call at runtime based on the object's actual type.
Click to reveal answer
beginner
Why do we use virtual functions?
We use virtual functions to achieve dynamic dispatch, meaning the program decides at runtime which function to call depending on the actual object type, not the pointer or reference type. This helps in writing flexible and extendable code.
Click to reveal answer
intermediate
What happens if a base class function is not declared virtual but overridden in a derived class?
If the base class function is not virtual, then calling the function through a base class pointer or reference will always call the base class version, even if the object is of a derived class. This is called static binding.
Click to reveal answer
beginner
How do you declare a virtual function in C++?
You declare a virtual function by adding the keyword virtual before the function's return type in the base class. For example:
virtual void speak();
Click to reveal answer
intermediate
What is a pure virtual function and how is it declared?
A pure virtual function is a virtual function with no implementation in the base class, making the class abstract. It is declared by assigning 0 to the function in the base class, like this: <pre>virtual void draw() = 0;</pre>
Click to reveal answer
What keyword is used to declare a virtual function in C++?
Aabstract
Boverride
Cdynamic
Dvirtual
✗ Incorrect
The keyword virtual is used to declare virtual functions in C++.
If a base class function is virtual, which function is called when using a base class pointer to a derived object?
ABase class function
BDerived class function
CCompiler error
DDepends on pointer type
✗ Incorrect
With virtual functions, the derived class function is called at runtime, enabling polymorphism.
What happens if you call a non-virtual function through a base class pointer to a derived object?
ABase class function is called
BDerived class function is called
CRuntime error
DFunction is ignored
✗ Incorrect
Non-virtual functions use static binding, so the base class function is called.
How do you declare a pure virtual function?
Avirtual void func() = 0;
Bvoid func() = 0;
Cvirtual void func();
Dvoid func() override;
✗ Incorrect
A pure virtual function is declared by assigning 0 after the declaration.
What kind of class contains at least one pure virtual function?
AStatic class
BConcrete class
CAbstract class
DFinal class
✗ Incorrect
A class with at least one pure virtual function is called an abstract class.
Explain how virtual functions enable polymorphism in C++.
Think about how the program chooses which function to run when using a base class pointer.
You got /4 concepts.
Describe the difference between a virtual function and a pure virtual function.
Consider what happens if you want to force derived classes to implement a function.
You got /4 concepts.
Practice
(1/5)
1. What is the main purpose of declaring a function as virtual in a C++ base class?
easy
A. To allow derived classes to override the function and enable runtime polymorphism
B. To make the function inline for faster execution
C. To prevent the function from being overridden in derived classes
D. To make the function static and shared among all objects
Solution
Step 1: Understand virtual function role
A virtual function in a base class allows derived classes to provide their own implementation that will be called at runtime.
Step 2: Recognize runtime polymorphism
This mechanism enables dynamic dispatch, meaning the program decides which function to call based on the actual object type, not the pointer type.
Final Answer:
To allow derived classes to override the function and enable runtime polymorphism -> Option A
Quick Check:
Virtual function = runtime polymorphism [OK]
Hint: Virtual means choose function at runtime, not compile time [OK]
Common Mistakes:
Confusing virtual with inline functions
Thinking virtual prevents overriding
Assuming virtual makes function static
2. Which of the following is the correct syntax to declare a virtual function named display in a base class?
easy
A. virtual void display();
B. void virtual display();
C. virtual display void();
D. void display() virtual;
Solution
Step 1: Recall correct virtual function syntax
The keyword virtual must come before the return type and function name.
Step 2: Check each option
virtual void display(); correctly places virtual before void display();. Others have incorrect order or placement.
Final Answer:
virtual void display(); -> Option A
Quick Check:
virtual before return type = correct syntax [OK]
Hint: Put 'virtual' before return type in function declaration [OK]
Common Mistakes:
Placing virtual after function name
Mixing order of keywords
Adding virtual at the end of declaration
3. Consider the following code:
class Base {
public:
virtual void show() { std::cout << "Base"; }
};
class Derived : public Base {
public:
void show() override { std::cout << "Derived"; }
};
int main() {
Base* ptr = new Derived();
ptr->show();
delete ptr;
return 0;
}
What is the output when this program runs?
medium
A. Base
B. Runtime error
C. Derived
D. Compilation error
Solution
Step 1: Analyze pointer and object types
The pointer is of type Base* but points to a Derived object.
Step 2: Understand virtual function call
Because show() is virtual, the Derived version is called at runtime, printing "Derived".
Final Answer:
Derived -> Option C
Quick Check:
Virtual function calls derived version [OK]
Hint: Virtual calls use actual object type, not pointer type [OK]
Common Mistakes:
Assuming base class function runs
Confusing override keyword effect
Expecting compilation or runtime errors
4. Identify the error in the following code snippet:
class Base {
public:
void display() { std::cout << "Base"; }
};
class Derived : public Base {
public:
void display() override { std::cout << "Derived"; }
};
medium
A. Derived class function cannot have the same name as base class function
B. No error, code is correct
C. Override keyword is not allowed in derived class
D. Base class function must be declared virtual to allow override
Solution
Step 1: Check base class function declaration
The base class function display() is not declared virtual.
Step 2: Understand override keyword usage
The override keyword requires the base function to be virtual; otherwise, it causes a compilation error.
Final Answer:
Base class function must be declared virtual to allow override -> Option D
Quick Check:
Override needs virtual base function [OK]
Hint: Base function must be virtual to use override in derived [OK]
Common Mistakes:
Ignoring missing virtual in base
Thinking override is optional
Assuming same name always means override
5. Given the classes below, what will be the output of the program?
class Animal {
public:
virtual void sound() { std::cout << "Animal sound "; }
};
class Dog : public Animal {
public:
void sound() override { std::cout << "Bark "; }
};
class Cat : public Animal {
public:
void sound() override { std::cout << "Meow "; }
};
int main() {
Animal* animals[3];
animals[0] = new Animal();
animals[1] = new Dog();
animals[2] = new Cat();
for (int i = 0; i < 3; i++) {
animals[i]->sound();
}
for (int i = 0; i < 3; i++) {
delete animals[i];
}
return 0;
}
hard
A. Animal sound Animal sound Animal sound
B. Animal sound Bark Meow
C. Bark Meow Animal sound
D. Compilation error due to array of pointers
Solution
Step 1: Analyze array of Animal pointers
The array holds pointers to objects of types Animal, Dog, and Cat respectively.
Step 2: Understand virtual function calls in loop
Calling sound() on each pointer calls the overridden version based on actual object type, printing "Animal sound ", "Bark ", and "Meow ".
Final Answer:
Animal sound Bark Meow -> Option B
Quick Check:
Virtual calls print actual object sounds [OK]
Hint: Virtual functions call derived versions in arrays of base pointers [OK]
Common Mistakes:
Expecting base class sound for all
Confusing array pointer syntax
Assuming compilation error with polymorphism
Recommended
Ready to prove it?
Pass the test and this pattern moves unknownstrongwhile earning +1 Grip toward your certificate.