PDA

Показать полную графическую версию : Сравнение структур в языке 'С'


t0lkman
19-04-2008, 09:23
Почему две структуры можно переписать обычным присвоением structA=structB, а вот сравнить нельзя if(structA==structB)
?

pva
21-04-2008, 14:30
на С присвоить тоже нельзя. На 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;}




© OSzone.net 2001-2012