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

Fau*_*ult 3 c++ inheritance templates operator-overloading

只是一个简单的问题,如果我有一个模板类:

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

}
Run Code Online (Sandbox Code Playgroud)

然后我继承了所说的课程:

template <typename T>
class bar : public foo<T> {
    //...
}
Run Code Online (Sandbox Code Playgroud)

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

for (bar<int> i(baz); i != bar<int>(); i++) {}
Run Code Online (Sandbox Code Playgroud)

++运算符在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]
Run Code Online (Sandbox Code Playgroud)

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

Ada*_*wen 6

您的运算符定义不太正确:

bool operator!=(foo& other) const {
    //...
}
Run Code Online (Sandbox Code Playgroud)

应该

bool operator!=(const foo& other) const {
    //...
}
Run Code Online (Sandbox Code Playgroud)

因为你试图比较一个临时的,只能绑定到一个const引用.