Family and vehicles example using the strategy pattern
In "modern C++" it is unusual to see (and use) RAW pointers.

class Family
{
public:
    Vehicle *myVehicle;


Here you have a pointer to a vehicle. But there is no indication of who owns the vehicle. Does the family member own the vehicle or is a shared resource? Can a family member have no vehicle in which case what is the appropriate response to driveVehicle()? Maybe with no vehicle they default to walking?

Anyway. Don't use pointers. In terms of memory management they do not indicate who the owner of the pointed at object is; Note: it is the responsibility of the owner to delete the object. If you don't know who should delete it you have memory leaks (and there is a lot in your code).

Also by default pointers are not set to NULL. So if you do not explicitly initialize them in a constructor you have a random value (so initialize them).

What happens if myVehicle is NULL here?

void driveVehicle()
{
    myVehicle-&gt;useVehicle();
}


You should mark virtual implementations as override

void display() override  // indicates this is the implementation
                         // of a virtual function.
{
    std::cout &lt;&lt; "I am Daughter" &lt;&lt; std::endl;
}


Never use dynamic memory memory management when local variables will do.

Family *fam = new Father();

// This should be:

Father father;