我正在尝试编写一个带有一些纯虚拟二元运算符的抽象类,这些运算符应该由派生类实现以实现运算符多态性。这是一个简化的示例:
class Base {
public:
virtual const Base& operator+ (const Base&) const = 0;
};
class Derived : public Base {
public:
const Derived& operator+ (const Derived&) const;
};
const Derived& Derived::operator+ (const Derived& rvalue) const {
return Derived();
}
现在操作符做什么并不重要,重要的是它返回什么:它返回一个临时 Derived 对象,或者对其的引用。现在,如果我尝试编译,我会得到:
test.cpp: In member function ‘virtual const Derived& Derived::operator+(const Derived&) const’:
test.cpp:12:17: error: cannot allocate an object of abstract type ‘Derived’
test.cpp:6:7: note: because the following virtual functions are pure within ‘Derived’:
test.cpp:3:22: note: virtual const Base& Base::operator+(const Base&) const
怎么了?难道operator+(Base中唯一的纯虚函数)没有被重写吗?为什么 Derived 也应该是抽象的?
虽然返回类型在Derived
可以与基本类型共变,但不能对参数类型执行相同的操作。即,重写函数应该如下所示:
class Derived : public Base
{
public:
const Derived& operator+ (const Base&) const;
};
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)