0
0
C++programming~20 mins

Runtime polymorphism in C++ - Practice Problems & Coding Challenges

Choose your learning style9 modes available
Challenge - 5 Problems
πŸŽ–οΈ
Runtime Polymorphism Master
Get all challenges correct to earn this badge!
Test your skills under time pressure!
❓ Predict Output
intermediate
2:00remaining
Output of virtual function call through base pointer
What is the output of this C++ code when run?
C++
#include <iostream>
using namespace std;

class Animal {
public:
    virtual void sound() { cout << "Animal sound" << endl; }
};

class Dog : public Animal {
public:
    void sound() override { cout << "Bark" << endl; }
};

int main() {
    Animal* a = new Dog();
    a->sound();
    delete a;
    return 0;
}
AAnimal sound
BBark
CCompilation error
DRuntime error
Attempts:
2 left
πŸ’‘ Hint
Think about which version of the function is called when using a base class pointer to a derived object.
❓ Predict Output
intermediate
2:00remaining
Output of non-virtual function call through base pointer
What will this C++ program print when executed?
C++
#include <iostream>
using namespace std;

class Base {
public:
    void show() { cout << "Base show" << endl; }
};

class Derived : public Base {
public:
    void show() { cout << "Derived show" << endl; }
};

int main() {
    Base* b = new Derived();
    b->show();
    delete b;
    return 0;
}
ACompilation error
BDerived show
CBase show
DRuntime error
Attempts:
2 left
πŸ’‘ Hint
Is the function show() declared virtual? How does that affect which function is called?
πŸ”§ Debug
advanced
2:00remaining
Identify the runtime error in polymorphic code
This code compiles but causes a runtime error. What is the cause?
C++
#include <iostream>
using namespace std;

class Base {
public:
    virtual void display() { cout << "Base display" << endl; }
    ~Base() { cout << "Base destructor" << endl; }
};

class Derived : public Base {
public:
    void display() override { cout << "Derived display" << endl; }
    ~Derived() { cout << "Derived destructor" << endl; }
};

int main() {
    Base* b = new Derived();
    b->display();
    delete b;
    return 0;
}
ANo runtime error occurs
BVirtual function display() is not overridden correctly
CBase destructor is virtual causing double delete
DDerived destructor is not called causing resource leak
Attempts:
2 left
πŸ’‘ Hint
Check if the destructor in Base is virtual and how that affects deleting derived objects.
πŸ“ Syntax
advanced
2:00remaining
Identify the syntax error in polymorphic class declaration
Which option contains a syntax error in this polymorphic class code?
C++
class Shape {
public:
    virtual void draw() = 0;
};

class Circle : public Shape {
public:
    void draw() override { cout << "Circle" << endl; }
};
Aclass Triangle : public Shape { public: void draw() override; };
Bclass Circle : public Shape { public: void draw() override { cout << "Circle" << endl; } };
Cclass Square : public Shape { public: void draw() { cout << "Square" << endl; } };
Dclass Shape { public: virtual void draw() = 0; };
Attempts:
2 left
πŸ’‘ Hint
Check if the function declared with override has a body or is defined outside the class.
πŸš€ Application
expert
3:00remaining
Determine the number of objects created and destructed
Consider this C++ program using runtime polymorphism. How many times are constructors and destructors called in total?
C++
#include <iostream>
using namespace std;

class Base {
public:
    Base() { cout << "Base constructor" << endl; }
    virtual ~Base() { cout << "Base destructor" << endl; }
};

class Derived : public Base {
public:
    Derived() { cout << "Derived constructor" << endl; }
    ~Derived() { cout << "Derived destructor" << endl; }
};

int main() {
    Base* arr[3];
    arr[0] = new Base();
    arr[1] = new Derived();
    arr[2] = new Derived();

    for (int i = 0; i < 3; i++) {
        delete arr[i];
    }
    return 0;
}
A5 constructors and 5 destructors called
B6 constructors and 3 destructors called
C3 constructors and 3 destructors called
D6 constructors and 6 destructors called
Attempts:
2 left
πŸ’‘ Hint
Remember each Derived object calls Base constructor first. Also destructors are called in reverse order.