Форум: Форум C++Разное
Новые темы: 00
Самоучитель MySQL 5. Авторы: Кузнецов М.В., Симдянов И.В. Объектно-ориентированное программирование на PHP. Авторы: Кузнецов М.В., Симдянов И.В. PHP Puzzles. Авторы: Кузнецов М.В., Симдянов И.В. C++. Мастер-класс в задачах и примерах. Авторы: Кузнецов М.В., Симдянов И.В. Программирование. Ступени успешной карьеры. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум C++

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Перегрузка == при наследовании
 
 автор: Trix   (15.06.2008 в 20:21)   письмо автору
 
 

Помогите сделать перегрузку оператора ==, не могу разобраться как сделать перегрузку при наследовании

Есть 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;
}

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования