Читайте <a href=http://ru.wikipedia.org/wiki/Виртуальная%20функция>здесь</a> о различиях виртуальных и невиртуальных функций.В том коде, который у вас есть, никакого различия не будет.Получая некий элемент списка, вы заранее не знаете, какого он типа, поэтому объект (указатель) вы сохраняете в переменную базового типа Place.Если ф-ия в базовом классе виртуальная, то произойдет определение типа во время исполнения (RTTI) и вызовется функция объекта именно того типа, которого на самом деле является данный объект. А если невиртуальная, то вызовется Place->метод, несмотря на то, что вы сохраняли только объекты типов Town и Area. Add для всех типов одинаковая, а вот Show - нет. Допишите свой код, а в Show вставьте что-дь простое типа printf("I‘m a Town") и printf("I‘m an Area"). И попробуйте оба типа функций для базового класса - виртуальные и невиртуальные.Тем не менее, Add объявить в базовом классе все равно придется. Если ее не объявлять вообще, то код из последнего вашего ответа на строкеobj1->Add();заглючит.Где тут "тупое кодирование", если вам надо только заголовок ф-ии определить в базовом классе?