回答ありがとうございます。考え方に問題がありそうなのはわかったのですが、
下記のようなコードに対してどんな形で対応すればよいのでしょう。
というか、そもそも具象クラスの情報はどこが持つのが
良い設計なのかわからなくなってきました。
class A {
  A();
  virtual ~A();
};
class B : public A {
  B();
  virtual ~B();
};
class C : public A {
  C();
  virtual ~C();
};
void D(class A *p) {
}
int main() {
  // Dを呼び出す際にはB or Cの型情報が必要?
  D(new B());
  return 0;
}