Child is a derived class of Base , but Child* not a derived class of Base* .
If the compiler allowed you to automatically convert pointers to pointers, you will get the following incorrect example (adapted from fooobar.com/questions/434366 / ... ):
Child *c = new Child; Base **bb = &c; *bb = new Base;
c now points to a Base , not Child .
source share