Challenge - 5 Problems
Base Class Pointer Mastery
Get all challenges correct to earn this badge!
Test your skills under time pressure!
β Predict Output
intermediate2:00remaining
Output of base class pointer to derived object
What is the output of this C++ code when using a base class pointer to a derived class object?
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() { Derived d; Base* ptr = &d; ptr->show(); return 0; }
Attempts:
2 left
π‘ Hint
Remember that without virtual functions, base class pointers call base class methods.
β Incorrect
The pointer is of type Base*, and the show() method is not virtual. So, the Base class version of show() is called, printing "Base show".
β Predict Output
intermediate2:00remaining
Output with virtual function and base class pointer
What will this C++ program print when a base class pointer points to a derived class object and calls a virtual function?
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() { Derived d; Base* ptr = &d; ptr->show(); return 0; }
Attempts:
2 left
π‘ Hint
Virtual functions enable runtime polymorphism.
β Incorrect
Because show() is virtual, the call ptr->show() calls the Derived class version, printing "Derived show".
β Predict Output
advanced2:00remaining
Output of slicing with base class pointer and object copy
What is the output of this C++ code involving object slicing and base class pointers?
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() { Derived d; Base b = d; // Object slicing Base* ptr = &b; ptr->show(); return 0; }
Attempts:
2 left
π‘ Hint
Object slicing copies only the base part of the derived object.
β Incorrect
The object b is a Base object copied from Derived d, so it loses the Derived part. The virtual call calls Base::show(), printing "Base show".
π§ Debug
advanced2:00remaining
Identify the error with base class pointer and deleted derived object
What error will this C++ code produce when deleting a derived object through a base class pointer?
C++
#include <iostream> using namespace std; class Base { public: ~Base() { cout << "Base destructor" << endl; } }; class Derived : public Base { public: ~Derived() { cout << "Derived destructor" << endl; } }; int main() { Base* ptr = new Derived(); delete ptr; return 0; }
Attempts:
2 left
π‘ Hint
Base class destructor should be virtual to delete derived objects safely.
β Incorrect
Because Base destructor is not virtual, deleting Derived object via Base pointer calls only Base destructor, skipping Derived destructor and causing resource leaks.
π§ Conceptual
expert2:00remaining
Why use base class pointers for polymorphism?
Which is the main reason to use base class pointers to refer to derived class objects in C++?
Attempts:
2 left
π‘ Hint
Think about how base pointers can call different versions of functions depending on the actual object type.
β Incorrect
Base class pointers allow runtime polymorphism, so the program can call derived class methods through base pointers when functions are virtual.