Оператор сравнения == в С++

227
07 декабря 2017, 00:56

Как реализовать сравнение двух переменных, чтобы получить значение типа bool, говорящее, равны они или нет.
Что надо изменять? Написал вроде бы правильно, но нет никакой реакции на p2==p;, нет даже вывода в консоль ни нуля, ни единички.

И как реализовать операторы >, >= и подобные?

#include<stdio.h>
#include<math.h>
#include <iostream>
using namespace std;
class abstact
 {
public:
virtual void input () = 0;
virtual void output () = 0;
virtual void rachet () = 0;
};

class racheti:public abstact
{
private:
    float ksi;
    float speed;
    float alfa;
    float ro;
    float Relson;
    float nu;
    float f;
    float S;
    float test;
public:
    friend bool operator==(racheti &a, racheti &b);
      void input()
    {
        ro=1.29;
        speed=8;
        alfa=1e-3;
        nu=1.73e-5;
        cout << "S =";
        cin  >> S;
    }
    void output()
    {
        cout << "F = " << f << " Relson = " << Relson << " S = " << S << " KSI = "<< ksi << endl;
    }
    void rachet()
    {
        Relson=(speed*alfa*ro)/nu;
        if(Relson<=2)
        {
            ksi=24/Relson;
        }
        else if(Relson>2 && Relson<=500)
        {
            ksi=18.5/(pow(Relson,0.6));
        }
        else if(Relson>500){ksi = 0.44;}
        f=ksi*S*((ro*pow(speed,2))/2);
    }

};
int main()
{
    int a;
   abstact *p = new racheti; // * В покажчик р на базовий клас заноситься адреса, виділена під об'єкт похідного класу crug * /
    p ->input();
    p ->rachet();
    p ->output();
    cout << endl;
    abstact *p2 = new racheti;
    p2 ->input();
    p2 ->rachet();
    p2 ->output();
    p2==p;
    return 0;
}
bool operator==(racheti &a, racheti &b)
    {
        if(a==b)
          return 1;
        else return 0;
    }
Answer 1

Что? Требуется сравнить a и b? Нет вопросов! Смотрим типы... ага! вот он, оператор сравнения a и b! Поехали...

bool operator==(racheti &a, racheti &b)
{
    if(a==b) return 1;

Что? Требуется сравнить a и b? Нет вопросов! Смотрим типы... ага! Вот он -

bool operator==(racheti &a, racheti &b)
{
    if(a==b) return 1;

Что? Требуется сравнить a и b? Нет вопросов! Смотрим типы... ага! Вот он - ...

Ну, вы поняли, что въехали в бесконечную рекурсию?...

А вот если встретится

    if(a.ksi   != b.ksi) return 0;
    if(a.speed != b.speed) return 0;
    ...

то будет примерно так - ага, тут нас просят сравнить два float. Нет вопросов - это встроенный оператор сравнения, вызываем его.

READ ALSO
Аргумент функции в виде объекта класса

Аргумент функции в виде объекта класса

У меня есть класс для значений давленийВ приведенном ниже коде вылезает ошибка:

286
Ошибка ERROR_ACCESS_DENIED при открытии файла

Ошибка ERROR_ACCESS_DENIED при открытии файла

Доброго времени сутокСуть вопроса такова:

188
Не могу записать числовые данные в текстовый файл

Не могу записать числовые данные в текстовый файл

Подскажите пожалуйста, почему я могу считывать данные с файла, но значения переменных dblx, dblResult не записываются в файлНе могу найти ошибку

208