Virtual function

A member function becomes a virtual function by prefixing its methods with the function specifier “virtual”.

Example 1

#include <iostream>
using namespace std;

class A {
public:
    virtual void print() {
        cout << "class a output" << endl;
    }
};

class B : public A {
public:
    void print() {
        cout << "class b output" << endl;
    }
};

class C : public A {
public:
    void print() {
        cout << "class c output" << endl;
    }
};

int main(void) {
    A *a;
    B b;
    C *c;

    a = &b;

    a->print();

    return 0;
}
Output
class b output

Example 2

#include <iostream>
using namespace std;

class A {
public:
    virtual void print() {
        cout << "class a output" << endl;
    }
};

class B : public A {
public:
    void print() {
        cout << "class b output" << endl;
    }
};

class C : public A {
public:
    void print() {
        cout << "class c output" << endl;
    }
};

void output(A *c) {
    c->print();
}

int main(void) {
    A a;
    B b;
    C c;

    output(&a);
    output(&b);
    output(&c);

    return 0;
}
Output
class a output
class b output
class c output