Bird
Raised Fist0
C++programming~20 mins

Function overriding in C++ - Practice Problems & Coding Challenges

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

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

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

int main() {
    Base* ptr = new Derived();
    ptr->show();
    delete ptr;
    return 0;
}
ABase show
BDerived show
CRuntime error
DCompilation error
Attempts:
2 left
πŸ’‘ Hint
Remember that virtual functions allow the derived class version to be called through a base pointer.
❓ Predict Output
intermediate
2:00remaining
Output when overriding function is not virtual
What will this C++ program print when calling the function through a base class pointer?
C++
#include <iostream>
using namespace std;

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

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

int main() {
    Base* ptr = new Derived();
    ptr->display();
    delete ptr;
    return 0;
}
ARuntime error
BCompilation error
CDerived display
DBase display
Attempts:
2 left
πŸ’‘ Hint
Check if the function is declared virtual in the base class.
πŸ”§ Debug
advanced
2:00remaining
Identify the error in function overriding
What error does this C++ code produce when compiled?
C++
#include <iostream>
using namespace std;

class Base {
public:
    virtual void func(int x) { cout << "Base: " << x << endl; }
};

class Derived : public Base {
public:
    void func(double x) override { cout << "Derived: " << x << endl; }
};

int main() {
    Derived d;
    d.func(5);
    return 0;
}
ACompilation error: 'func' marked override but does not override
BRuntime error: ambiguous call
COutput: Derived: 5
DOutput: Base: 5
Attempts:
2 left
πŸ’‘ Hint
Check if the function signature exactly matches the base class virtual function.
🧠 Conceptual
advanced
2:00remaining
Effect of 'final' on function overriding
What happens if a virtual function in a base class is marked with 'final' and a derived class tries to override it?
ADerived class function overrides successfully
BRuntime error when calling the function
CCompilation error: overriding a final function is not allowed
DThe base class function is hidden but still called
Attempts:
2 left
πŸ’‘ Hint
The 'final' keyword prevents further overriding.
❓ Predict Output
expert
3:00remaining
Output of multiple inheritance with overridden functions
What is the output of this C++ program?
C++
#include <iostream>
using namespace std;

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

class B : public A {
public:
    void show() override { cout << "B" << endl; }
};

class C : public A {
public:
    void show() override { cout << "C" << endl; }
};

class D : public B, public C {
public:
    void show() override { cout << "D" << endl; }
};

int main() {
    D obj;
    obj.show();
    B* bptr = &obj;
    bptr->show();
    C* cptr = &obj;
    cptr->show();
    return 0;
}
A
D
B
C
B
D
D
D
CCompilation error due to ambiguity
D
D
A
A
Attempts:
2 left
πŸ’‘ Hint
Each base pointer calls its own overridden version; D overrides show() for itself.

Practice

(1/5)
1. What is function overriding in C++?
easy
A. A child class provides its own version of a parent class's virtual function.
B. A function with the same name but different parameters in the same class.
C. A function that is called automatically when an object is created.
D. A function that cannot be changed once defined.

Solution

  1. Step 1: Understand function overriding concept

    Function overriding means a child class changes the behavior of a function defined in its parent class.
  2. Step 2: Identify correct description

    A child class provides its own version of a parent class's virtual function. correctly describes overriding as providing a new version of a parent's virtual function in the child class.
  3. Final Answer:

    A child class provides its own version of a parent class's virtual function. -> Option A
  4. Quick Check:

    Function overriding = child changes parent's virtual function [OK]
Hint: Overriding means child changes parent's virtual function [OK]
Common Mistakes:
  • Confusing overriding with overloading
  • Thinking overriding happens without virtual keyword
  • Believing overriding applies to non-virtual functions
2. Which of the following is the correct syntax to override a function in C++11 and later?
easy
A. void func() virtual override;
B. override void func();
C. void func() override;
D. virtual void func() override;

Solution

  1. Step 1: Recall override syntax in child class

    In C++11+, the child class function uses the same signature and adds the 'override' keyword after the function declaration.
  2. Step 2: Identify correct syntax

    virtual void func() override; shows the correct syntax: 'virtual void func() override;'. The 'virtual' keyword can be used in the child class but is optional; however, it is valid and common to include it.
  3. Final Answer:

    virtual void func() override; -> Option D
  4. Quick Check:

    Child function uses virtual and override keywords correctly [OK]
Hint: Use 'override' after function signature in child class; 'virtual' is optional but allowed [OK]
Common Mistakes:
  • Adding 'virtual' keyword after function name
  • Placing 'override' before function name
  • Omitting 'override' keyword entirely
3. What will be the output of the following code?
class Base {
public:
    virtual void show() { std::cout << "Base"; }
};
class Derived : public Base {
public:
    void show() override { std::cout << "Derived"; }
};
int main() {
    Base* b = new Derived();
    b->show();
    delete b;
    return 0;
}
medium
A. Derived
B. Base
C. Compilation error
D. Runtime error

Solution

  1. Step 1: Understand virtual function behavior

    The pointer 'b' is of type Base* but points to a Derived object. Because 'show' is virtual, the Derived version is called.
  2. Step 2: Trace the function call

    Calling b->show() invokes Derived::show(), printing "Derived".
  3. Final Answer:

    Derived -> Option A
  4. Quick Check:

    Virtual function calls child's version [OK]
Hint: Virtual functions call child's version via base pointer [OK]
Common Mistakes:
  • Expecting base class output
  • Forgetting to make base function virtual
  • Confusing pointer type with object type
4. Identify the error in the following code snippet:
class Parent {
public:
    void display() { std::cout << "Parent"; }
};
class Child : public Parent {
public:
    void display() override { std::cout << "Child"; }
};
medium
A. Child's display() should not use override keyword.
B. Parent's display() must be declared virtual to override.
C. display() must return int, not void.
D. No error, code is correct.

Solution

  1. Step 1: Check virtual keyword in parent

    For overriding to work, the base class function must be declared virtual.
  2. Step 2: Analyze override keyword usage

    Child uses 'override' but Parent's display() is not virtual, causing a compilation error.
  3. Final Answer:

    Parent's display() must be declared virtual to override. -> Option B
  4. Quick Check:

    Base function must be virtual for override [OK]
Hint: Base function must be virtual to allow override [OK]
Common Mistakes:
  • Ignoring virtual keyword in base class
  • Thinking override works without virtual
  • Assuming override keyword is optional
5. Given the classes below, what will be the output of obj->print();?
class A {
public:
    virtual void print() { std::cout << "A"; }
};
class B : public A {
public:
    void print() override { std::cout << "B"; }
};
class C : public B {
public:
    void print() override { std::cout << "C"; }
};

int main() {
    A* obj = new C();
    obj->print();
    delete obj;
    return 0;
}
hard
A. A
B. B
C. C
D. Compilation error

Solution

  1. Step 1: Understand pointer and object types

    Pointer 'obj' is of type A*, but it points to an object of class C.
  2. Step 2: Follow virtual function overriding chain

    Since print() is virtual and overridden in B and C, the most derived override (C::print) is called.
  3. Final Answer:

    C -> Option C
  4. Quick Check:

    Virtual call resolves to most derived override [OK]
Hint: Virtual calls use most derived override at runtime [OK]
Common Mistakes:
  • Expecting base class output
  • Confusing pointer type with object type
  • Ignoring virtual function behavior
Recommended

Ready to prove it?

Pass the test and this pattern moves unknown strong while earning +1 Grip toward your certificate.

10 questions~5 mineasy hard