何故必要ないのか?

 そもそも、何故C++ではヘッダファイル(.h)と実装ファイル(.cpp)が分離されているのでしょうか? 入門書の中には「実装を隠蔽してインターフェイスを公開する為」とか書いているかもしれません。これは「嘘」です。少なくとも、後付けの理屈であることは間違いありません。

 何故、嘘なのか? 簡単な話です。隠蔽が目的なのであれば、privateメンバ(=公開されてはならないメンバ)がインターフェイスに含まれてはならない筈です。これについての合理的な説明はありません。C++では実装の完全な隠蔽は不可能なのです。

 これについては、「インターフェイスクラスを用意すればいい」「pimpleイディオムを利用すればいい」という反論もあると思います。ですが、どちらも言語仕様の不備をテクニックで補っているにすぎません。また、根本的な問題を解決していません。

 では、実装の隠蔽を目的としていないなら、何故ファイルが分かれているのでしょうか? Effective C ++から引用します。

 ……と思ったらEffective C ++には該当するコラムがありませんでした。メイヤー先生ごめんなさい(爆)。みはえるの予測でしゃべらせていただきますとですね(突然卑屈に)、分割コンパイルを実現する為なのですよ。C++言語が発表された当時、山のようなソースファイルをいっぺんにコンパイルする為にはマシンスペックが足りませんでした。

 そこで、ソースファイルを個別にコンパイルし、後でつなげるというアイデアが採用されました(ホントか?)。これを実現する為には、インクルードするファイルは最小限である事が望ましい。よって、ヘッダファイルにはオブジェクトファイルを生成するのに最低限必要な情報、つまりクラス宣言だけを記述するようになっているのです。

 おわかりでしょうか。つまり、少なくともC++におけるヘッダファイルという考え方は、低速、小容量、小メモリ環境において、現実的なコンパイル速度を叩く為に必要だった物であり、現在は無用の長物なのです。てゆーかいちいち.hと.cpp切り替えるのめんどくさいんだよまぢでっ!