【发布时间】:2012-12-08 05:50:23
【问题描述】:
我有一个类层次结构,我想禁止这样做:
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。
【问题讨论】:
-
operator=声明在哪里? -
在此示例中,您没有分配
Foo或Bar对象。您正在将 指针 分配给Foo或Bar。您的示例与您的问题不符。不,您不能禁止指针分配。 -
如果您同时需要
Foo和Bar对象,是否可以不使用继承而使用接口? -
哦,我明白了,所以如果我强制使用指针我不会有这个问题?
-
我注意到您问的是防止切片,但由于您的左侧已经是一个已知为父大小的对象,您遇到的真正问题是什么试图解决?在您的情况下是否总是不希望分配不同的类型?
标签: c++ inheritance assignment-operator private-methods object-slicing