Я проходил курс Python, и появилась идея использовать переопределенную функцию родителей для сравнения родительских и дочерних классов.В основном:
class A(object):
def __init__(self,a):
self.a = a
def __lt__(self,other):
return self.a < other.a
class B(A):
def __init__(self,a,b):
self.a = a
self.b = b
def __lt__(self,other):
return self.b < other.b
a = A(2)
b = B(1,3)
print(a < b)
#print(b < a) # AttributeError: 'A' object has no attribuite 'b'
print(A.__lt__(b,a)) # so we call this instead
Теперь я хотел бы сделать то же самое в C ++
class A{
int a;
public:
A(int a) : a(a) {}
bool operator<(A t){ return a < t.a; }
};
class B: public A{
int b;
public:
B(int a, int b) : A(a), b(b) {}
bool operator<(B t){ return b < t.b; }
};
int main()
{
A a(2);
B b(3,1);
std::cout << (a < b) << std::endl;
//std::cout << (b < a); // error, A has no b attribute
//std::cout << A::operator<(dynamic_cast<A&>(b),a); // basically what I would like to happen
std::cout << a.operator<(dynamic_cast<A&>(b)) << std::endl; // here I would like to reverse a and b
return 0;
}
Должен быть способ сделать это, я не знаю, просто ли этонедостаточное знание методов в C ++.
Я знаю, что вместо этого я мог бы просто перегрузить оператор> =, но это не главное, сравнение здесь только пример.