我的教科书说,虚拟赋值运算符“在教程范围之外打开了一个新的问题”。
虚拟化赋值运算符是可能的。然而,与析构函数的情况不同,在那里虚拟化总是一个好主意,虚拟化赋值运算符确实会打开一个充满许多高级主题的问题,并超出了本教程的范围。因此,我们建议您现在将您的赋值操作保持为非虚拟化,以简化起见。
这是什么意思?你能用一个小例子解释一下这本书所指的问题吗?为什么虚拟赋值运算符特别呢?
我的教科书说,虚拟赋值运算符“在教程范围之外打开了一个新的问题”。
虚拟化赋值运算符是可能的。然而,与析构函数的情况不同,在那里虚拟化总是一个好主意,虚拟化赋值运算符确实会打开一个充满许多高级主题的问题,并超出了本教程的范围。因此,我们建议您现在将您的赋值操作保持为非虚拟化,以简化起见。
这是什么意思?你能用一个小例子解释一下这本书所指的问题吗?为什么虚拟赋值运算符特别呢?
class Shape
{
public: virtual bool operator==(const Shape & s) const = 0;
};
class Rectangle : public Shape
{
public: bool operator==(const Shape & s) const
{ /*...*/ }
};
class Circle : public Shape
{
public: bool operator==(const Shape & s) const
{ /*...*/ }
};
Rectangle r;
Circle c;
Shape * p_shape1 = &r; // This is legal.
Shape * p_shape2 = &c; // So is this.
// What happens here????
if (r == *p_shape2)
{
//...
}
Shape const&
参数,它只能假设这一点。编写虚拟等号运算符通常涉及到 dynamic_cast
。无论如何,OP 是在询问赋值运算符。 - Sneftel