>640
Data内で使用しているFileのメンバのシグネチャを変えても
Dataに一切影響がないようにするには、>541のような隠蔽だけでは
不十分です。
例えばopen に引数が追加されたら、Data::openも変更が必要です。
一方、Fileの派生クラスまたはラッパークラスを用意し、そちらに定義しておけば
シグネチャ変更の余波は、Dataに到達する前に止められます。

 例:
 class DataFile : public File { /*省略*/ };
 class Data {
  public: void SaveToFile(){
   m_pFile->open();
   m_pFile->write();
   m_pFile->close();
  }
  private: DataFile* m_pFile;
 };

このように、「別クラスに抽出」して「隠蔽」する事をカプセル化と言うのであり、
単に隠蔽するだけをカプセル化と言うのじゃありません。
多くの解説書でアクセス制御=カプセル化として説明してますから
誤解するのも無理は無いと思いますがね。