質問: C++にて、抽象クラスのインスタンス生成は禁止されていますが、ポインタを介したアクセスが許されているのは何故ですか? 純粋仮想関数が呼ばれるとまずいので、抽象クラスそのもののインスタンス化は禁止し、ポインタは許可。抽象クラスのインスタンス化が禁止されている以上、ポインタの参照先は具象クラスのインスタンスという保証があります。そして、型の観点からすると疎結合を維持できると。そういう認識でいたのですが合ってますか?
回答: お詫び:回答してはみたのですが質問者さんが気にしているポイントをはずしてしまってました。 失礼しました。 Chironianさんと同じことを言っているだけだとは思うのですが、 「抽象クラスに対して直接インスタンスが生成できない」というのは「未定義のものがあるのに実体化できてしまうと矛盾」なので自然な仕様に思います。 「抽象クラスのポインターを通じてその抽象クラスでvirtualなメソッドへアクセス」というのは以下のように考えるとこれまた自然に思えます。 * 抽象クラスへのポインターには何かの実体(インスタンス)のアドレスが入るはず * 抽象クラスに直接newして実体は生成できない * ということはその抽象クラスを継承した具象クラスが実体を生成したはずである * であれば抽象クラスのvirtualメンバーはかならず具象クラスで定義されているはずである * ということは抽象クラスへのポインターを介してvitualメンバーへアクセスできることは至極妥当である