Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Программирование и базы данных (http://forum.oszone.net/forumdisplay.php?f=21)
-   -   Сравнение структур в языке 'С' (http://forum.oszone.net/showthread.php?t=105332)

t0lkman 19-04-2008 09:23 784621

Сравнение структур в языке 'С'
 
Почему две структуры можно переписать обычным присвоением structA=structB, а вот сравнить нельзя if(structA==structB)
?

pva 21-04-2008 14:30 786063

на С присвоить тоже нельзя. На 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.

Время: 10:59.
© OSzone.net 2001-