Ho letto un articolo sulle interfacce C++ (http://accu.org/index.php/journals/233) e sono completamente perso nella parte in cui si dice che tutte le funzioni dei membri virtuali dovrebbero essere rese private (la sezione intitolata "Rafforzare la separazione "). Non ha proprio senso per me.domande su un articolo che introduce l'interfaccia C++
Secondo l'autore, il codice è come questo:
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);
//...
};
Così abbiamo una funzione di pura virtuale che è pubblico, e la sua attuazione (nella classe di linea) che è privato.
Qualcuno potrebbe spiegare come si può chiamare la funzione move_x? Il suo specificatore di accesso è privata, che porterà a un errore se provo a fare questo:
line my_line(point(0,0), point(1,2));
my_line.move_x(-1); // does not compile
Allo stesso modo è corretto dire che l'interfaccia di disegno (vedi in precedenza in questo articolo) non può accedere a queste funzioni sia?
Grazie.
Ho appena provato a compilare il codice e non riesce a compilare perché il distruttore è privato ... – Patrick