オーバライドでリターンタイプの緩和

これも、C++の設計と進化を読んで知った。

C++では、オーバライド関数の返値は、ベースクラスの関数と正確に一致しなくても良い。

BがDのアクセス可能なベースクラスであるときには、B*をD*で、そしてB&をD&でオーバライドできるようにした。

class B {
  virtual B* clone() { return new B(*this); }
};
class D : public B {
  D* clone() { return new D(*this); }
};

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください