|
|
|
| Помогите сделать перегрузку оператора ==, не могу разобраться как сделать перегрузку при наследовании
Есть 2 класса А базовый и B дочерний. В классе B нужно перегрузить оператор == методом функции
//Класс А
class A{
public:
...
friend bool operator == (const A &ref,const A &ref2)
{
return (ref.m_var== ref2.m_var );
}
//Класс B
class B:public A{
...
friend bool operator == (const B &ref,const B &ref2)
{
return (ref.var == ref2.var );
}
|
Соответственно чтобы корректно работало, видимо нужно и в базовом классе сделать аналогичную перегрузку, но как ! virtual тут не поставить.
Т.е. вопрос: как при наследовании корректно перегрузить оператор == методом функции ?
Приведенное выше решение не работает, пишет, что:
error C2678: binary '==' : no operator found which takes a left-hand operand of type 'const A' | |
|
|
|
|
автор: Карсен (27.08.2008 в 17:56) |
|
|
для: Trix
(15.06.2008 в 20:21)
| | Операцию сравнения (как и многие другие) можно перегрузить виртуально:
class A
{
public:
int a;
public:
A(): a(0) {}
A(int _a): a(_a) {}
A(const A& _ao) { a = _ao.a; }
A(const char* ss) { a = ss[0] - '0'; }
~A() { a = -1; }
virtual bool operator==(const A& _ao);
};
bool A::operator==(const A& _ao)
{
return a == _ao.a;
}
class B: public A
{
private:
int b;
public:
B(): A(0), b(0) {}
B(int _a, int _b): A(_a), b(_b) {}
B(const B& _bo): A(_bo) { b = _bo.b; }
B(const char* ss): A(ss) { b = ss[1] - '0'; }
~B() { b = -1; }
bool operator==(const A& _bo);
};
bool B::operator==(const A& _ao)
{
const B& bo = static_cast<const B&>(_ao);
return ( a == _ao.a ) && ( b == bo.b );
}
bool ff(A& ao1, A& ao2)
{
return ao1 == ao2;
}
int main()
{
A a1(1), a2(2);
B b1(1,2), b2(3,4);
bool bb = ff(a1, a2);
bb = ff(b1, b2);
return 0;
} | |
|
|
|