c ++类继承和运算符重载;运算符重载是否继承?

时间:2011-10-12 09:55:12

标签: c++ templates inheritance operator-overloading

如果我有模板类,请快速提问:

template <typename T>
class foo {
public:
    bool operator!=(foo& other) const {
        //...
    }

}

然后我继承了上课:

template <typename T>
class bar : public foo<T> {
    //...
}

运算符重载是否继承?如果没有,我将如何实现它以便它... ...因为目前在我的测试类中,这会带来错误:

for (bar<int> i(baz); i != bar<int>(); i++) {}

++运算符在bar类中实现,因此可行,但!=运算符显然不会被继承。错误消息是:

error: no match for 'operator!=' in 'i != bar<int>(0u, 0u)'
note: candidate is: bool foo<T>::operator!=(foo<T>&) const [with T = int]

这几乎总结了我遇到的问题,所以我只是想知道如何继承运算符重载。

1 个答案:

答案 0 :(得分:6)

您的操作员定义不太正确:

bool operator!=(foo& other) const {
    //...
}

应该是

bool operator!=(const foo& other) const {
    //...
}

因为您正在尝试与临时进行比较,而临时只能绑定到const引用。