【发布时间】:2020-08-01 03:48:09
【问题描述】:
我有一个基类 A 和两个派生类 B 和 C。B 定义了 = 运算符,以基类 A 作为参数。
在 B 类上调用 = 时,有时会调用基类 A 的运算符而不是 B 中的运算符。
class A {
public:
void operator=(A &) {
printf("A =\n");
};
};
class B : public A {
public:
void operator=(A &s) {
printf("B =\n");
};
};
class C : public A {
};
int main()
{
B b1, b2;
C c;
b1 = b2;
b1 = c;
}
输出是:
A =
B =
为什么第一个赋值没有调用 B::operator=()?
为什么第二个赋值也不调用 A::operator=(),因为它也是从 A 派生的?
我该怎么做才能让 B::operator=() 每次都被调用?
当我看到这个时,我感到非常惊讶。我注意到它只是因为我在 A 类中删除了 operator=() ("operator=() = delete"),导致编译器错误。
【问题讨论】:
-
B::operator=是否应该使用A而不是B?
标签: c++ inheritance assignment-operator