Указатели базового класса используются, когда у вас есть несколько производных классов, но вы хотите абстрагироваться от типа производного класса. Это может быть очень полезно, например, в таких ситуациях:
class Animal {
Animal();
}
class Dog : public Animal {
Dog();
}
class Cat : public Animal {
Cat();
}
Как видите, в этом примере у вас есть базовый класс (Animal) и два производных класса (Cat и Dog). Скажем теперь, что вы управляете зоопарком (в котором есть только кошки и собаки :)), и вам нужно вести список своих животных. Вы можете просто создать два отдельных списка, один для кошек и другой для собак. Однако, если вы считаете, что кошки и собаки - это просто животные, вы можете создать список с указателями на животных.
Таким образом, абстрагируясь от типа производного класса, вы можете работать с различными производными классами, имея простой указатель на базовый класс.
Указатели на производные классы совершенно разные, поскольку они могут только "представлять" тип производного класса.