クラス階層があり、これを禁止したい:
Foo *f = new Foo();
Bar *b = new Bar();
f = b;
はFooのスーパークラスですBar。Barこれを行うと、オブジェクトの一部がスライスされます。プライベートにすることでこれを解決できることは知っていますがoperator=、型が異なる場合にのみ代入演算子の使用を禁止することは可能ですか?
非公開にするのと同じoperator=ですが、これを許可します:
Bar *b1 = new Bar();
Bar *b2 = new Bar();
b1 = b2;
サブクラスも作成されると仮定Barします。