これも、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); }
};
これも、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); }
};