Модераторы: bsa
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Как правильно перегрузить логические операции? 
:(
    Опции темы
Julia9311
Дата 14.1.2013, 23:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 39
Регистрация: 6.12.2012

Репутация: нет
Всего: нет



Как правильно перегрузить логические операции? Помогите, пожалуйста!)

заголовочный файл

Код

#include <iostream>
#include <iostream>
#include <conio.h>
#include <math.h>
using namespace std;
 
class Complex // класс компелексных чисел
{
   double re, im; // целая и мнимая части
   
// создаем конструкторы   
public:
   
   Complex() {};
   
   Complex (double r) // конструктор по умолчанию
   {
      re = r; 
      im = 0;
   }
   
   Complex (double r, double i) // конструктор по умолчанию
   {
      re = r; 
      im = i;
   } 
   
   Complex (Complex &c) // конструктор копирования
   {
      re = c.re; 
      im = c.im;
   }
   
   ~Complex() {}
   
   float abs() // Модуль комплексного числа
   {
      return sqrt(re * re - im * im);
   }     
 
   void print(Complex &c)
   {
       if(c.im>0) printf("%f + %f i\n",c.re,c.im);
       else printf("%f  %f i\n",c.re,c.im);
 
   }
 
 
   Complex & operator = (Complex &c) // перегрузка оператора присваивания
   {
      re = c.re;
      im = c.im;
 
      return (*this);
   }
 
   Complex Complex::operator + (Complex &c) // перегрузка оператора сложения
   {
      Complex temp;
 
      temp.re = re + c.re;
      temp.im = im + c.re;
 
      return temp;
   }
 
   Complex Complex::operator - (Complex &c) // перегрузка оператора вычитания
   {
      Complex temp;
 
      temp.re = re - c.re;
      temp.im = im - c.re;
    
      return temp;
   }
 
   Complex Complex::operator * (Complex &c) // перегрузка оператора умножения
   {
      Complex temp;
 
      temp.re = re*c.re;
      temp.im = re*c.im;
 
      return temp;
   }
 
    
 
   Complex Complex::operator / (Complex &c) // перегрузка оператора деления
   {
      Complex temp;
 
      double r = c.re * c.re + c.im * c.im;
      temp.re = (re * c.re + im * c.im) / r;
      temp.re = (im * c.re - re * c.im) / r;
 
      return temp;
   }   
 
   friend ostream &operator<<(ostream &, Complex &); // перегрузка оператора <<
   friend istream &operator>>(istream &, Complex &); // перегрузка оператора >>
 
};
 
ostream &operator<<(ostream &out, Complex &c)
{
   if (c.im>0)
    
    out << "" << c.re << " + "<<c.im<<" i" <<"\n";
   else out << "" << c.re << " "<<c.im<<" i" <<"\n";
   
   return out;
}
 
istream &operator>>(istream &in, Complex &c)
{
   in >> c.re >> c.im;
   
   return in;
}



файл исходного кода

Код

#include "complex.h"
#include "iostream"
using namespace std;
 
int main()
{
    Complex u(5,2); 
    Complex v(3,-3);
    Complex x1(5);
    Complex x2(2.3);
    Complex x3(3);
    Complex x4(1);
    Complex x5(1.5);
    Complex x6(-5,2);
    
    cout << u << " " << v << endl;
 
    // вывод числа двумя функциями
    u.print(u);
    cout<<u<<endl;
    
    cout << x6 << endl; 
    cout << x4 - u << endl; 
    cout << u + v << endl;
    
    cout << u - v << endl;
    
    cout << u * v << endl;
    
    cout << x1*u+x2*v << endl;   //5u + 2.3v
     
    cout << (x3+u*v)/(u+(x4-v)) << endl;   //(3+uv)/(u+(x4-v))
 
    cout << x4/(u+x5*v) << endl;   //(u+1.5v)-1
    
    u = v;
    
    cout << u << " = " << v << endl;
    
   int i;
    cin>>i;
 
cout << "true  && false: " <<  ( u && v )   << endl;
cout << "true  || false: " << ( u || v )   << endl;
cout << "!true: " << ( ! u ) << endl<< "!false: "<<  ( ! v ) << endl;
        return 0;
}

PM MAIL   Вверх
dershokus
Дата 15.1.2013, 10:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 82
Регистрация: 7.8.2011

Репутация: нет
Всего: 1



А что именно надо сделать? 
Нужно реализовать это?
Код

    As member of T            Outside class definitions
R T::operator ==(S b);     R operator ==(S a, T b);
R T::operator !=(S b);      R operator !=(S a, T b);
R T::operator >(S b);       R operator >(S a, T b);
R T::operator <(S b);       R operator <(S a, T b);
R T::operator >=(S b);     R operator >=(S a, T b);
R T::operator <=(S b);     R operator <=(S a, T b);

Если да, то что в методе реализации не понятно?
PM MAIL   Вверх
bsa
Дата 15.1.2013, 10:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 9185
Регистрация: 6.4.2006
Где: Москва, Россия

Репутация: 85
Всего: 196



Julia9311, логические операции применимы только к целочисленным данным. Так как 0.0000000000000000000000000000001 - это не нуль с точки зрения машины. Может речь идет про операции сравнения (больше, меньше)?

Кстати, сигнатура операции operator<< должна быть следующей: 
Код
std::ostream& operator<<(std::ostream &stream, const Complex &value); //обрати внимание на const
Тоже самое касается всех методов, где ты принимаешь значение по ссылке, но не меняешь его:
Код
Complex operator+(const Complex &other) const //обрати внимание на const - их два неспроста!

Но по-хорошему, ты должна была сделать членами только операторы: -(унарный), =, +=, -=, *=, /=; а все остальные делать в виде внешних функций:
Код
...
Complex& Complex::operator+=(const Complex &other)
{
   re += other.re;
   im += other.im;
   return *this;
}
...
Complex operator+(const Complex &c1, const Complex &c2)
{
   Complex ret(c1);
   return ret += c2;
}
...

PM   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Для новичков"
JackYF
bsa

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, bsa.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.0448 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.