Я прочитал это , но это обсуждение только о сравнении оператора, который принимает базовый или производный класс в качестве параметра.В моем случае я хотел бы унаследовать виртуальный оператор для совершенно другого параметра (в данном случае std :: string), и я не смог найти даже обсуждения по этой теме.
Так что в моем случае у меня есть следующий код:
#include <string>
#include <iostream>
class Base {
public:
Base(std::string s) : str(s) {}
virtual bool operator==(const std::string& s) const { return s == str; };
protected:
std::string str;
};
class Derived : public Base {
public:
Derived(std::string s) : Base(s) {}
//bool operator==(const std::string& s) const override { return s == str; };
//bool operator==(const double& d) const { return d == doub; };
protected:
double doub;
};
int main() {
std::string foo = "foo";
Derived object(foo);
if (object == foo)
std::cout << "equal" << std::endl;
}
Оператор для строки правильно выведен (код компилируется) в этом случае.Но если я хотел бы определить другой оператор для типа double (раскомментируя второй комментарий), код не компилируется, так как компилятор не видит оператор для строки, определенной в базовом классе.Раскомментирование первого комментария, то есть явное переопределение оператора базы, снова работает.
Может кто-нибудь объяснить такое поведение?