Форум С++

 

Ответить на сообщение

Вернуться к теме

Вы отвечаете на сообщение:

Автор: Карсен   (27.08.2008 в 17:56)
Операцию сравнения (как и многие другие) можно перегрузить виртуально:

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;
}


Ваше имя:

Пароль:

Цитировать

Используйте тэги для выделения текста:
Код: [code][/code]
Жирный: [b][/b]
Наклонный: [i][/i]
URL: [url][/url]

Сообщение:

Прикрепить: