Non riesco a capire perche` un metodo dichiarato privato nella classe derivata sia accessibile trammite puntatore alla classe base ! ... sto dimenticando qualcosa sulla Vtable ?

codice:
# include <iostream>

using namespace std;

class Base {
	public:
	virtual void print() = 0;
};

class X : public Base {
	private:
	void print() { cout << "private X::print()" << endl ;}
};



int main(){

  Base* bp = new X ;

  bp->print();

  return 0;
}