Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  

Показать сообщение отдельно
pva pva вне форума

Аватара для pva

Ветеран


Сообщения: 1180
Благодарности: 279

Профиль | Отправить PM | Цитировать


на С присвоить тоже нельзя. На 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;}
Это сообщение посчитали полезным следующие участники:

Отправлено: 14:30, 21-04-2008 | #2