其他分享
首页 > 其他分享> > c – 允许operator =仅在同一类的对象之间使用?

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