Base class pointers let you use a pointer of a parent class to point to objects of child classes. This helps write flexible and reusable code.
Base class pointers in C++
BaseClass *pointerName; pointerName = &childObject;
The pointer is declared as the base class type.
It can point to any object of the base class or its derived classes.
class Animal { public: void speak() { std::cout << "Animal sound" << std::endl; } }; class Dog : public Animal { public: void speak() { std::cout << "Bark" << std::endl; } }; int main() { Dog d; Animal *ptr = &d; ptr->speak(); return 0; }
class Animal { public: virtual void speak() { std::cout << "Animal sound" << std::endl; } }; class Dog : public Animal { public: void speak() override { std::cout << "Bark" << std::endl; } }; int main() { Dog d; Animal *ptr = &d; ptr->speak(); return 0; }
This program shows a base class pointer pointing to different child objects. It calls the correct speak function for each child thanks to virtual functions.
#include <iostream> class Animal { public: virtual ~Animal() {} virtual void speak() { std::cout << "Animal sound" << std::endl; } }; class Dog : public Animal { public: void speak() override { std::cout << "Bark" << std::endl; } }; class Cat : public Animal { public: void speak() override { std::cout << "Meow" << std::endl; } }; int main() { Dog dog; Cat cat; Animal *ptr; ptr = &dog; ptr->speak(); // Calls Dog's speak ptr = &cat; ptr->speak(); // Calls Cat's speak return 0; }
Without virtual, the base class function is called even if the pointer points to a child object.
Base class pointers allow writing code that works with many child types easily.
Remember to use virtual destructors in base classes when using base class pointers to avoid memory issues.
Base class pointers can point to objects of derived classes.
They enable polymorphism when used with virtual functions.
This helps write flexible and reusable code that works with related classes.
Practice
Solution
Step 1: Understand base and derived classes
A base class is a general class, and derived classes extend it with more features.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.Final Answer:
Point to objects of derived classes -> Option BQuick Check:
Base pointer can point to derived objects [OK]
- Thinking base pointers only point to base objects
- Confusing pointers with references
- Assuming base pointers can't access derived objects
ptr for a class Base?Solution
Step 1: Recall pointer declaration syntax
In C++, a pointer to a type is declared asType *pointerName;.Step 2: Apply to Base class
For classBase, the pointer declaration isBase *ptr;.Final Answer:
Base *ptr; -> Option AQuick Check:
Pointer syntax = Type *name [OK]
- Placing * after variable name incorrectly
- Swapping type and variable name
- Using invalid syntax like *Base ptr
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?
Solution
Step 1: Understand virtual function behavior
Theshow()function is virtual inBase, so calls use the actual object's method.Step 2: Pointer points to Derived object
The pointerptrpoints to aDerivedobject, soDerived::show()is called.Final Answer:
Derived -> Option AQuick Check:
Virtual function calls Derived method [OK]
- Ignoring virtual keyword and expecting Base output
- Confusing pointer type with object type
- Assuming compilation or runtime error
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;
}Solution
Step 1: Check function overriding and polymorphism
Withoutvirtual, base class pointer calls base version even if pointing to derived object.Step 2: Identify missing virtual keyword
To enable polymorphism,display()inBasemust be declaredvirtual.Final Answer:
display() should be declared virtual in Base for polymorphism -> Option DQuick Check:
Missing virtual causes base method call [OK]
- Assuming pointer can't point to derived
- Thinking delete causes leak here
- Believing derived can't redefine base methods
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?Solution
Step 1: Understand polymorphic storage
To store different derived objects, use an array of base class pointers (Animal*).Step 2: Store derived objects via pointers
Storenew Dog()andnew Cat()in theAnimal*array, then callsound()polymorphically.Final Answer:
Create an array of Animal*, store new Dog() and new Cat(), then loop and call sound() -> Option CQuick Check:
Base pointer array + virtual functions = polymorphism [OK]
- Using object array causes slicing
- Casting unrelated pointers unsafely
- Using void* loses type safety and polymorphism
Ready to prove it?
Pass the test and this pattern moves unknown
