Interfaces help us define a set of actions without saying how to do them. This lets different parts of a program work together smoothly.
Interface-like behavior in C++
class InterfaceName { public: virtual void action() = 0; // pure virtual function virtual ~InterfaceName() = default; // virtual destructor };
A pure virtual function (= 0) means the class is abstract and cannot be instantiated directly.
Derived classes must provide their own version of the pure virtual functions.
class Printable { public: virtual void print() = 0; // must be implemented virtual ~Printable() = default; };
class Document : public Printable { public: void print() override { std::cout << "Printing document..." << std::endl; } };
class Image : public Printable { public: void print() override { std::cout << "Printing image..." << std::endl; } };
This program shows interface-like behavior. Printable is an interface with print(). Document and Image implement print() differently. The function printAnything() can print any Printable object.
#include <iostream> class Printable { public: virtual void print() = 0; virtual ~Printable() = default; }; class Document : public Printable { public: void print() override { std::cout << "Printing document..." << std::endl; } }; class Image : public Printable { public: void print() override { std::cout << "Printing image..." << std::endl; } }; void printAnything(Printable& item) { item.print(); } int main() { Document doc; Image img; printAnything(doc); printAnything(img); return 0; }
Interfaces in C++ are made using classes with only pure virtual functions.
Always provide a virtual destructor in interfaces to avoid memory issues.
You cannot create objects directly from an interface class.
Interfaces define what actions a class must have without saying how.
Use pure virtual functions (= 0) to create interfaces in C++.
Classes that inherit interfaces must implement all pure virtual functions.
Practice
Solution
Step 1: Understand interface concept
Interfaces specify what functions a class must have but do not provide their code.Step 2: Identify interface role in C++
In C++, interfaces are created using pure virtual functions that derived classes must implement.Final Answer:
To define functions that derived classes must implement -> Option CQuick Check:
Interface = function declarations only [OK]
- Thinking interfaces provide function code
- Assuming interfaces hold data members
- Believing interfaces can be instantiated
Solution
Step 1: Recall pure virtual function syntax
Pure virtual functions are declared with '= 0' after the function signature.Step 2: Check options for correct syntax
virtual void func() = 0; uses '= 0' correctly, others do not match pure virtual syntax.Final Answer:
virtual void func() = 0; -> Option AQuick Check:
Pure virtual = '= 0' [OK]
- Using '= 1' instead of '= 0'
- Omitting 'virtual' keyword
- Confusing override with pure virtual
class IShape {
public:
virtual double area() const = 0;
};
class Circle : public IShape {
double radius;
public:
Circle(double r) : radius(r) {}
double area() const override { return 3.14 * radius * radius; }
};
int main() {
Circle c(2);
std::cout << c.area();
return 0;
}What is the output of this program?
Solution
Step 1: Calculate area of circle with radius 2
Area = π * r² = 3.14 * 2 * 2 = 12.56Step 2: Confirm code compiles and runs correctly
Circle implements pure virtual function area(), so no error; output is area value.Final Answer:
12.56 -> Option DQuick Check:
Area = 3.14 * 4 = 12.56 [OK]
- Forgetting to implement pure virtual function
- Using wrong radius value
- Expecting compilation error
class IAnimal {
public:
virtual void speak() = 0;
};
class Dog : public IAnimal {
public:
void speak() { std::cout << "Woof"; }
};
int main() {
IAnimal a;
a.speak();
return 0;
}Solution
Step 1: Identify abstract class usage
IAnimal has a pure virtual function, so it is abstract and cannot be instantiated.Step 2: Check main() for object creation
Code tries to create IAnimal a; which is illegal and causes compilation error.Final Answer:
Cannot create object of abstract class IAnimal -> Option BQuick Check:
Abstract class objects cannot be created [OK]
- Ignoring abstract class instantiation rules
- Thinking override keyword is mandatory
- Assuming pure virtual functions must return values
IPrinter with a pure virtual function print(). Then create two classes ConsolePrinter and FilePrinter that implement print(). Which of the following code snippets correctly demonstrates this?Solution
Step 1: Define interface with pure virtual function
IPrinter declares print() as pure virtual with '= 0', making it an interface.Step 2: Implement print() in derived classes
ConsolePrinter and FilePrinter override print() with their own code, fulfilling interface contract.Final Answer:
Code snippet D correctly defines interface and implementations -> Option AQuick Check:
Pure virtual = 0 + override implementations [OK]
- Using '= 1' instead of '= 0' for pure virtual
- Not implementing pure virtual functions in derived classes
- Defining interface functions with bodies
Ready to prove it?
Pass the test and this pattern moves unknown
