Challenge - 5 Problems
Base Class Pointer Mastery
Get all challenges correct to earn this badge!
Test your skills under time pressure!
β Predict Output
intermediateOutput 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
intermediateOutput 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
advancedOutput 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
advancedIdentify 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
expertWhy 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.
