๐ Scenario: Imagine you are designing a simple program for different types of vehicles. Each vehicle can start its engine, but the way it starts might differ. We want to create a base class that forces all vehicle types to define their own way to start the engine.
๐ฏ Goal: You will create a base class with a pure virtual function and then create derived classes that implement this function. Finally, you will create objects of the derived classes and call their start engine methods.
๐ What You'll Learn
Create a base class called Vehicle with a pure virtual function startEngine().
Create two derived classes called Car and Motorcycle that override startEngine().
Create objects of Car and Motorcycle and call their startEngine() methods.
Print the output of each startEngine() call.
๐ก Why This Matters
๐ Real World
Pure virtual functions are used in software design to create interfaces or abstract base classes that define common behavior but require specific implementations in derived classes.
๐ผ Career
Understanding pure virtual functions is essential for C++ developers working on large projects, especially in areas like game development, system programming, and software architecture where polymorphism and abstraction are key.
Progress0 / 4 steps
1
Create the base class with a pure virtual function
Write a class called Vehicle with a public pure virtual function startEngine() that returns void.
C++
Hint
A pure virtual function is declared by adding = 0 at the end of the function declaration inside the class.
2
Create derived classes that override the pure virtual function
Create two classes called Car and Motorcycle that publicly inherit from Vehicle. Override the startEngine() function in both classes to print "Car engine started" and "Motorcycle engine started" respectively.
C++
Hint
Use override keyword to make sure you are overriding the base class function.
3
Create objects of derived classes and call startEngine
In the main() function, create an object called myCar of type Car and an object called myMotorcycle of type Motorcycle. Call the startEngine() method on both objects.
C++
Hint
Create objects and call their startEngine() methods using dot notation.
4
Print the output of the startEngine calls
Run the program and print the output of calling startEngine() on myCar and myMotorcycle. The output should show the engine start messages for both vehicles.
C++
Hint
When you run the program, the messages from the startEngine() calls will appear on the screen.
Practice
(1/5)
1. What is the main purpose of a pure virtual function in C++?
easy
A. To force derived classes to implement the function
B. To allow creating objects of the base class
C. To provide a default implementation in the base class
D. To make the function private
Solution
Step 1: Understand pure virtual function role
A pure virtual function is declared with = 0 and has no body in the base class.
Step 2: Effect on derived classes
Derived classes must provide their own implementation of this function, or they become abstract too.
Final Answer:
To force derived classes to implement the function -> Option A
Quick Check:
Pure virtual function = forces implementation [OK]
Hint: Pure virtual means must override in child class [OK]
Common Mistakes:
Thinking pure virtual allows base class objects
Assuming pure virtual provides default code
Confusing pure virtual with private functions
2. Which of the following is the correct syntax to declare a pure virtual function named draw in a class?
easy
A. void draw() = 0;
B. virtual void draw() = 0;
C. virtual void draw() {}
D. void virtual draw() = 0;
Solution
Step 1: Recall pure virtual function syntax
Pure virtual functions use the keyword virtual and end with = 0;.
Step 2: Check each option
virtual void draw() = 0; matches the correct syntax: virtual void draw() = 0;. Others have wrong order, missing virtual, or provide a body.
Final Answer:
virtual void draw() = 0; -> Option B
Quick Check:
Syntax = virtual + = 0 [OK]
Hint: Pure virtual = virtual + = 0 at end [OK]
Common Mistakes:
Placing 'virtual' after return type incorrectly
Adding function body {} for pure virtual
Omitting 'virtual' keyword
3. What will be the output of the following code?
#include <iostream>
class Shape {
public:
virtual void draw() = 0;
};
class Circle : public Shape {
public:
void draw() { std::cout << "Circle drawn" << std::endl; }
};
int main() {
Circle c;
c.draw();
return 0;
}
medium
A. No output
B. Compilation error: cannot instantiate abstract class
C. Circle drawn
D. Runtime error
Solution
Step 1: Analyze class Shape
Shape has a pure virtual function draw(), so Shape is abstract and cannot be instantiated.
Step 2: Analyze class Circle
Circle overrides draw() with its own implementation, so Circle is concrete and can be instantiated.
Step 3: Check main function
Circle object c is created and c.draw() prints "Circle drawn".
Final Answer:
Circle drawn -> Option C
Quick Check:
Derived class implements pure virtual = prints output [OK]
Hint: Derived class must implement to create objects [OK]
Common Mistakes:
Trying to instantiate abstract base class
Forgetting to override pure virtual function
Expecting no output due to pure virtual
4. Identify the error in this code snippet:
class Animal {
public:
virtual void sound() = 0;
};
class Dog : public Animal {
};
int main() {
Dog d;
d.sound();
return 0;
}
medium
A. No error, code runs fine
B. Animal class should not have pure virtual functions
C. Dog object cannot be created because main is missing
D. Dog class does not implement pure virtual function sound()
Solution
Step 1: Check pure virtual function in Animal
Animal declares sound() as pure virtual, so Animal is abstract.
Step 2: Check Dog class implementation
Dog inherits Animal but does not implement sound(), so Dog remains abstract and cannot be instantiated.
Step 3: Analyze main function
Trying to create Dog object d causes compilation error because Dog is abstract.
Final Answer:
Dog class does not implement pure virtual function sound() -> Option D
Quick Check:
Abstract class must implement all pure virtual functions [OK]
Hint: Derived must implement all pure virtual functions [OK]
Common Mistakes:
Assuming base class cannot have pure virtual functions
Thinking missing main causes error here
Believing code runs without overriding pure virtual
5. Given the following classes, which statement is true?
#include <iostream>
class Base {
public:
virtual void f() = 0;
virtual void g() { std::cout << "Base g" << std::endl; }
};
class Derived : public Base {
public:
void f() override { std::cout << "Derived f" << std::endl; }
void g() override { std::cout << "Derived g" << std::endl; }
};
int main() {
Base* b = new Derived();
b->f();
b->g();
delete b;
return 0;
}
hard
A. Output is:
Derived f
Derived g
B. Output is:
Base f
Base g
C. Compilation error because Base has pure virtual function
D. Runtime error due to calling pure virtual function
Solution
Step 1: Understand Base class
Base has pure virtual f() and virtual g() with implementation.
Step 2: Analyze Derived class
Derived overrides both f() and g() with its own implementations.
Step 3: Check main function calls
Pointer b of type Base* points to Derived object. Virtual calls invoke Derived versions of f() and g().
Final Answer:
Output is:
Derived f
Derived g -> Option A
Quick Check:
Virtual functions call derived overrides [OK]
Hint: Virtual calls use derived class methods [OK]
Common Mistakes:
Expecting base class methods to run
Thinking pure virtual causes compile error here
Confusing pure virtual with runtime error
Recommended
Ready to prove it?
Pass the test and this pattern moves unknownstrongwhile earning +1 Grip toward your certificate.