t0lkman |
19-04-2008 09:23 784621 |
Сравнение структур в языке 'С'
Почему две структуры можно переписать обычным присвоением structA=structB, а вот сравнить нельзя if(structA==structB)
?
|
на С присвоить тоже нельзя. На C++ можно и присвоить и сравнить. Дело в том, что по правилам если не указано конструкторов, то автоматически генерируются следующие:
Код:
struct A
{
~A() выполняет для всех членов member деструктор ~member()
A() выполняет для всех членов member неявный конструктор без параметров member()
A(const A&) то же самое, для всех членов
A& operator=(const A&) то же самое, для всех членов
}
а вот operator== не определён, потому что сравнивать можете с чем угодно. Например:
Код:
struct A
{
bool operator==(int n) {return n==0;}
bool operator==(const double& n) {return n<0.;}
friend bool operator==(const A&, const A&) {return false;}
}
A a, b;
// будет работать:
if (a==b || a==1 || b==-0.5) {...}
// не будет работать, т.к. оператор не определён:
// if (a!=b || a!=1 || b!=-0.5) {...}
Если вы хотите добавить возможность сравнения к уже готовым структурам, например POINT, которая определена в windows.h, напишите:
Код:
bool operator==(const POINT& a, const POINT& b) {return a.x==b.x && a.y==b.y;}
|
Время: 10:59.
© OSzone.net 2001-