Bird
Raised Fist0
C++programming~5 mins

Base class pointers in C++ - Cheat Sheet & Quick Revision

Choose your learning style10 modes available
Recall & Review
beginner
What is a base class pointer in C++?
A base class pointer is a pointer that points to an object of the base class or any of its derived classes. It allows accessing base class members and supports polymorphism when used with virtual functions.
Click to reveal answer
beginner
How does a base class pointer behave when pointing to a derived class object?
A base class pointer can point to a derived class object, but it can only access members defined in the base class unless virtual functions are used to enable polymorphic behavior.
Click to reveal answer
intermediate
Why do we use virtual functions with base class pointers?
Virtual functions allow a base class pointer to call the derived class's overridden function at runtime, enabling dynamic dispatch and polymorphism.
Click to reveal answer
intermediate
What happens if a base class pointer calls a non-virtual function overridden in a derived class?
The base class version of the function is called, not the derived class version, because non-virtual functions are resolved at compile time based on the pointer type.
Click to reveal answer
beginner
Show a simple example of a base class pointer pointing to a derived class object and calling a virtual function.
#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(); // Output: Derived show
    delete ptr;
    return 0;
}
Click to reveal answer
What does a base class pointer point to in C++?
AAn object of the base class or any derived class
BOnly objects of the base class
COnly objects of the derived class
DOnly static members of the base class
Which keyword enables a base class pointer to call the derived class's overridden function?
Astatic
Boverride
Cvirtual
Dconst
If a base class pointer calls a non-virtual function overridden in a derived class, which function is executed?
ABase class function
BDerived class function
CBoth functions
DCompilation error
What is the output of this code snippet? class Base { public: virtual void f() { cout << "Base"; } }; class Derived : public Base { public: void f() override { cout << "Derived"; } }; Base* p = new Derived(); p->f();
ABase
BNo output
CCompilation error
DDerived
Can a base class pointer access members unique to the derived class?
AYes, always
BOnly if the pointer is cast to derived class type
CNo, only base class members are accessible
DOnly if the member is virtual
Explain how base class pointers support polymorphism in C++.
Think about how the pointer calls functions depending on the actual object type.
You got /5 concepts.
    Describe what happens when a base class pointer calls a non-virtual function overridden in a derived class.
    Consider how the compiler decides which function to call.
    You got /4 concepts.

      Practice

      (1/5)
      1. What does a base class pointer in C++ allow you to do?
      easy
      A. Only point to base class objects
      B. Point to objects of derived classes
      C. Only point to primitive data types
      D. Prevent any pointer arithmetic

      Solution

      1. Step 1: Understand base and derived classes

        A base class is a general class, and derived classes extend it with more features.
      2. Step 2: Role of base class pointers

        A base class pointer can point to any object of the base class or its derived classes, enabling polymorphism.
      3. Final Answer:

        Point to objects of derived classes -> Option B
      4. Quick Check:

        Base pointer can point to derived objects [OK]
      Hint: Base pointers can point to derived objects [OK]
      Common Mistakes:
      • Thinking base pointers only point to base objects
      • Confusing pointers with references
      • Assuming base pointers can't access derived objects
      2. Which of the following is the correct syntax to declare a base class pointer named ptr for a class Base?
      easy
      A. Base *ptr;
      B. ptr Base*;
      C. Base ptr*;
      D. *Base ptr;

      Solution

      1. Step 1: Recall pointer declaration syntax

        In C++, a pointer to a type is declared as Type *pointerName;.
      2. Step 2: Apply to Base class

        For class Base, the pointer declaration is Base *ptr;.
      3. Final Answer:

        Base *ptr; -> Option A
      4. Quick Check:

        Pointer syntax = Type *name [OK]
      Hint: Pointer syntax is Type *name; [OK]
      Common Mistakes:
      • Placing * after variable name incorrectly
      • Swapping type and variable name
      • Using invalid syntax like *Base ptr
      3. Consider the code:
      class Base {
      public:
          virtual void show() { std::cout << "Base"; }
      };
      class Derived : public Base {
      public:
          void show() override { std::cout << "Derived"; }
      };
      
      int main() {
          Base *ptr = new Derived();
          ptr->show();
          delete ptr;
          return 0;
      }

      What is the output when this code runs?
      medium
      A. Derived
      B. Base
      C. Compilation error
      D. Runtime error

      Solution

      1. Step 1: Understand virtual function behavior

        The show() function is virtual in Base, so calls use the actual object's method.
      2. Step 2: Pointer points to Derived object

        The pointer ptr points to a Derived object, so Derived::show() is called.
      3. Final Answer:

        Derived -> Option A
      4. Quick Check:

        Virtual function calls Derived method [OK]
      Hint: Virtual functions call derived version via base pointer [OK]
      Common Mistakes:
      • Ignoring virtual keyword and expecting Base output
      • Confusing pointer type with object type
      • Assuming compilation or runtime error
      4. What is wrong with this code snippet?
      class Base {
      public:
          void display() { std::cout << "Base"; }
      };
      class Derived : public Base {
      public:
          void display() { std::cout << "Derived"; }
      };
      
      int main() {
          Base *ptr = new Derived();
          ptr->display();
          delete ptr;
          return 0;
      }
      medium
      A. delete ptr causes memory leak
      B. Pointer ptr cannot point to Derived object
      C. Derived class must not redefine display()
      D. display() should be declared virtual in Base for polymorphism

      Solution

      1. Step 1: Check function overriding and polymorphism

        Without virtual, base class pointer calls base version even if pointing to derived object.
      2. Step 2: Identify missing virtual keyword

        To enable polymorphism, display() in Base must be declared virtual.
      3. Final Answer:

        display() should be declared virtual in Base for polymorphism -> Option D
      4. Quick Check:

        Missing virtual causes base method call [OK]
      Hint: Declare base methods virtual for polymorphism [OK]
      Common Mistakes:
      • Assuming pointer can't point to derived
      • Thinking delete causes leak here
      • Believing derived can't redefine base methods
      5. You have a base class Animal with a virtual function sound(). Two derived classes Dog and Cat override sound(). You want to store multiple animals in an array and call sound() on each. Which approach correctly uses base class pointers to achieve this?
      hard
      A. Create an array of Animal objects and assign Dog and Cat objects directly
      B. Create an array of Dog* and cast Cat* to Dog*
      C. Create an array of Animal*, store new Dog() and new Cat(), then loop and call sound()
      D. Use an array of void* pointers and cast to Animal* before calling sound()

      Solution

      1. Step 1: Understand polymorphic storage

        To store different derived objects, use an array of base class pointers (Animal*).
      2. Step 2: Store derived objects via pointers

        Store new Dog() and new Cat() in the Animal* array, then call sound() polymorphically.
      3. Final Answer:

        Create an array of Animal*, store new Dog() and new Cat(), then loop and call sound() -> Option C
      4. Quick Check:

        Base pointer array + virtual functions = polymorphism [OK]
      Hint: Use base class pointer array for polymorphic objects [OK]
      Common Mistakes:
      • Using object array causes slicing
      • Casting unrelated pointers unsafely
      • Using void* loses type safety and polymorphism
      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