Я не совсем понял последнюю часть примера, с членами классов int i - так было задумано - что в каждом классе именно свой int i?
Насколько мне кажется такое приведение (base)ob.i; не законно. И опять же не понятно для меня - зачем такое использование? Хотя в жизни каких только задач не возникает
Вот такой пример применения абстрактного базового класса мне лично более понятен...
Берем твой класс base и несколько дочерних классов child1...child9, например. В каждом дочернем конечно же своя функция get(), которая делает что-нить ну очень уникальное для своего класса.
Создаем массив указателей на base класс
base * p[9];
и спихиваем в него указатели на объекты дочерних классов, приводя их к типу указателя на базовый класс
что-то типа p[5]=(base *) new child5(...);
Теперь перебирая элементы массива спокойно по указателю вызываем функцию get(), а она уже делает абсольтно разные - но конкретные для своего класса вещи