В C ++ вы можете иметь абстрактный класс, который имеет не чисто виртуальные методы.В этом случае и в зависимости от конструкции может иметь смысл иметь закрытые члены:
class base {
std::string name;
public:
base( std::string const & n ) : name(n) {}
std::string const & getName() const { return name; }
virtual void foo() = 0;
};
Этот код гарантирует, что каждый объект, производный от базы, имеет имя, которое задается во время построения и никогда не изменяется во времявремя жизни объекта.
РЕДАКТИРОВАТЬ : Для завершения после того, как Чарльз Бейли напомнил мне об этом в своем ответе
Вы также можете определить чисто виртуальные функции, и в этом случае частные атрибуты также могут иметь смысл:
// with the above definition of base
void base::foo() {
std::cout << "My name is " << name << std::endl;
}