Динамическая привязка требует, чтобы виртуальная функция имела тот же список параметров в базовом классе и его производном классе. Это заставляет меня задаться вопросом, может ли оператор> динамически ограничиваться? Следующая демонстрация, похоже, доказывает, что она не может.Можно ли динамически связывать оператор>?
#include <iostream>
using namespace std;
struct B
{
B(int b = 0):m_b(b){}
virtual bool operator>(const B& rhs)const {cout << "B::operator>" << endl;return m_b > rhs.m_b;}
int m_b;
};
struct D: public B
{
D(int b = 0, long d = 0):B(b),m_d(d){}
virtual bool operator>(const D& rhs)const {cout << "D::operator>" << endl; return m_d > rhs.m_d;}
long m_d;
};
int main()
{
D d1(0,0),d2(1,-1);
B& b1(d1),b2(d2);
cout << (b1 > b2) << endl;
cout << "------------" << endl;
cout << (d1 > d2) << endl;
return 0;
}
выход:
B::operator>
0
------------
D::operator>
1
Подписи не совпадают, вы не переопределяете базовую функцию (подсказка: используйте 'override' для проверки). Операторы - это просто функции и поэтому могут быть «виртуальными». – user657267