Я читал статью об интерфейсах C ++ (http://accu.org/index.php/journals/233)), и я полностью потерян в той части, где говорится, что все виртуальные функции-члены должны быть приватными (раздел под названием «Усиление разделения»). Это просто не имеет смысла для меня вообще.
По словам автора, код выглядит так:
class shape {
public:
virtual ~shape();
virtual void move_x(distance x) = 0;
virtual void move_y(distance y) = 0;
virtual void rotate(angle rotation) = 0;
//...
};
class line : public shape {
public:
line(point end_point_1, point end_point_2);
//...
private:
virtual ~line();
virtual void move_x(distance x);
virtual void move_y(distance y);
virtual void rotate(angle rotation);
//...
};
Итак, у нас есть чисто виртуальная функция, которая является публичной, и ее реализация (в классе строки), которая является приватной.
Может кто-нибудь объяснить, как можно вызывать функцию move_x? Его спецификатор доступа является приватным, и если я попытаюсь сделать это, он приведет к ошибке:
line my_line(point(0,0), point(1,2));
my_line.move_x(-1); // does not compile
Точно так же правильно сказать, что интерфейс рисования (см. Ранее в статье) также не может получить доступ к этим функциям?
Спасибо.