Cambo Freelance
HomeServicesArticlesTutorialsTeamCoursesContact
Cambo Freelance

Professional freelance team from Cambodia delivering technology-driven solutions with cultural insight and modern expertise.

Send us a message

Ready to start your project? Get in touch with our team.

Contact Us

Services

  • Web & Mobile Development Services
  • Graphic Design & Branding Services

Useful Links

  • Home
  • Services
  • Learning
  • About Us
  • Contact
  • Pricing

© 2026 Cambo Freelance. រក្សាសិទ្ធិទាំងអស់។

TelegramFacebookLinkedInEmail
HomeTutorialsC++C++ Polymorphism
⚡C++ Tutorials

50 lessons

Beginner(21)1C++ Introduction2C++ Getting Started3C++ Syntax4C++ Output5C++ Comments6C++ Variables7C++ Data Types8C++ Constants9C++ User Input10C++ Operators11C++ Strings12C++ Math13C++ Booleans14C++ Conditions15C++ Switch16C++ Loops17C++ Break and Continue18C++ Arrays19C++ Functions20C++ References21C++ Pointers
Intermediate(19)22C++ Classes23C++ Objects24C++ Constructors25C++ Access Specifiers
Advanced(10)41C++ Smart Pointers42C++ Templates43C++ Lambda Functions44
⚡

C++ Tutorials

Lesson 28 of 50

All lessons
Beginner (21)1C++ Introduction2C++ Getting Started
26
C++ Encapsulation
27C++ Inheritance
28C++ Polymorphism
29C++ Abstraction
30C++ Files
31C++ Exception Handling
32C++ Namespaces
33C++ Structures
34C++ Enumerations
35C++ STL Introduction
36C++ Vectors
37C++ Maps
38C++ Sets
39C++ Queues
40C++ Stacks
C++ Move Semantics
45C++ Multithreading
46C++ Design Patterns
47C++ Memory Management
48C++17 Features
49C++20 Features
50C++ Performance Optimization
3
C++ Syntax
4C++ Output
5C++ Comments
6C++ Variables
7C++ Data Types
8C++ Constants
9C++ User Input
10C++ Operators
11C++ Strings
12C++ Math
13C++ Booleans
14C++ Conditions
15C++ Switch
16C++ Loops
17C++ Break and Continue
18C++ Arrays
19C++ Functions
20C++ References
21C++ Pointers
Intermediate (19)22C++ Classes23C++ Objects24C++ Constructors25C++ Access Specifiers26C++ Encapsulation27C++ Inheritance28C++ Polymorphism29C++ Abstraction30C++ Files31C++ Exception Handling32C++ Namespaces33C++ Structures34C++ Enumerations35C++ STL Introduction36C++ Vectors37C++ Maps38C++ Sets39C++ Queues40C++ Stacks
Advanced (10)41C++ Smart Pointers42C++ Templates43C++ Lambda Functions44C++ Move Semantics45C++ Multithreading46C++ Design Patterns47C++ Memory Management48C++17 Features49C++20 Features50C++ Performance Optimization
⚡C++IntermediateLesson 28 of 50CamboFreelanceJune 19, 2026

C++ Polymorphism

Understand C++ polymorphism with virtual functions and override. Learn runtime dispatch, base class pointers, and practical OOP design.


Tutorials › C++ › Polymorphism
Intermediate9 min readLesson 28 of 50

What is Polymorphism?

Polymorphism means "many forms". A single interface (base class pointer) can call different implementations depending on the actual object type at runtime.

Virtual Functions

Declare a method virtual in the base class to enable runtime polymorphism:

#include <iostream>
using namespace std;

class Shape {
  public:
    virtual void draw() {
        cout << "Drawing a shape" << endl;
    }
};

class Circle : public Shape {
  public:
    void draw() override {
        cout << "Drawing a Circle" << endl;
    }
};

class Triangle : public Shape {
  public:
    void draw() override {
        cout << "Drawing a Triangle" << endl;
    }
};

int main() {
    Shape* shapes[3];
    shapes[0] = new Shape();
    shapes[1] = new Circle();
    shapes[2] = new Triangle();

    for (int i = 0; i < 3; i++) {
        shapes[i]->draw();   // correct method called for each type
    }

    // cleanup
    for (int i = 0; i < 3; i++) delete shapes[i];
    return 0;
}

Output:

Drawing a shape
Drawing a Circle
Drawing a Triangle
override keyword: Always use override on derived class methods. It tells the compiler to verify that you are indeed overriding a virtual function — catching typos and signature mismatches at compile time.

Exercise

Create a Animal base class with virtual speak(). Derive Dog, Cat, Bird — each with their own speak(). Store all three in an array of base pointers and call speak() on each.

Show Solution
#include <iostream>
using namespace std;

class Animal {
  public:
    virtual void speak() { cout << "..." << endl; }
    virtual ~Animal() { }
};

class Dog   : public Animal { public: void speak() override { cout << "Woof!" << endl; } };
class Cat   : public Animal { public: void speak() override { cout << "Meow!" << endl; } };
class Bird  : public Animal { public: void speak() override { cout << "Tweet!" << endl; } };

int main() {
    Animal* animals[] = { new Dog(), new Cat(), new Bird() };
    for (Animal* a : animals) { a->speak(); delete a; }
    return 0;
}

Quiz

  1. What keyword enables runtime polymorphism in C++?

    • A) abstract
    • B) virtual
    • C> override
    • D) poly
    Answer

    B) virtual — declaring a method virtual in the base class enables runtime dispatch.

Summary

  • Polymorphism allows different objects to respond to the same interface differently.
  • Use virtual in the base class and override in derived classes.
  • Base class pointers/references can hold derived objects.
  • Add a virtual destructor to base classes when using polymorphism.
← Previous: Inheritance Next: Abstraction →
c++polymorphismvirtualoopintermediate
PreviousLesson 27: C++ InheritanceNextLesson 29: C++ Abstraction
Back to All Tutorials