c – 允许operator =仅在同一类的对象之间使用?
作者:互联网
我有一个类层次结构,我想禁止这样做:
Foo *f = new Foo();
Bar *b = new Bar();
f = b;
其中Foo是Bar的超类.这样做会切割对象的Bar部分.我知道你可以通过使operator = private来解决这个问题,但是如果它们属于不同的类型,是否可以禁止使用赋值运算符?
就像使operator = private但仍允许这样:
Bar *b1 = new Bar();
Bar *b2 = new Bar();
b1 = b2;
假设也将对Bar进行子类化.
解决方法:
既然你在谈论切片,我假设你实际上想要阻止的是:
Foo f;
Bar b;
f = b;
在这种情况下,是的,您可以通过使适当的operator = private来阻止分配.
您无法阻止指针分配,但请注意,指针分配不会导致切片.
标签:object-slicing,c,assignment-operator,inheritance,private-methods 来源: https://codeday.me/bug/20190826/1724765.html