Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 15.01.2013, 00:19   #1
julia9311
Пользователь
 
Регистрация: 23.06.2012
Сообщений: 69
По умолчанию Как правильно перегрузить логические операции?

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

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

Код:
#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;
}
julia9311 вне форума Ответить с цитированием
Старый 15.01.2013, 02:02   #2
Blind Guard
Форумчанин
 
Регистрация: 14.03.2012
Сообщений: 139
По умолчанию

Ну так ведь всё правильно.
Вопросы мб какие-нибудь были?)
Blind Guard вне форума Ответить с цитированием
Старый 15.01.2013, 02:12   #3
Ezhik Kihze
Форумчанин
 
Регистрация: 24.12.2012
Сообщений: 639
По умолчанию

Цитата:
Ну так ведь всё правильно.
Вы увидели хоть одну перегруженную логическую операцию?
ICQ: 677936656 Gmail: ekEmbed@gmail.com
Ezhik Kihze вне форума Ответить с цитированием
Старый 15.01.2013, 02:12   #4
julia9311
Пользователь
 
Регистрация: 23.06.2012
Сообщений: 69
По умолчанию

просто выдаются ошибки

1>c:\users\1\documents\visual studio 2010\projects\орпа\орпа\dfgbhnjk.cp p(43): error C2676: бинарный "&&": "Complex" не определяет этот оператор или преобразование к типу приемлемо к встроенному оператору
1>c:\users\1\documents\visual studio 2010\projects\орпа\орпа\dfgbhnjk.cp p(44): error C2676: бинарный "||": "Complex" не определяет этот оператор или преобразование к типу приемлемо к встроенному оператору
1>c:\users\1\documents\visual studio 2010\projects\орпа\орпа\dfgbhnjk.cp p(45): error C2675: унарный "!": "Complex" не определяет этот оператор или преобразование к типу приемлемо к встроенному оператору
1>c:\users\1\documents\visual studio 2010\projects\орпа\орпа\dfgbhnjk.cp p(45): error C2675: унарный "!": "Complex" не определяет этот оператор или преобразование к типу приемлемо к встроенному оператору
========== Построение: успешно: 0, с ошибками: 1, без изменений: 0, пропущено: 0 ==========

на одном форуме сказали, что нужно перегрузить операторы)
julia9311 вне форума Ответить с цитированием
Старый 15.01.2013, 02:15   #5
EUGY
Форумчанин
 
Аватар для EUGY
 
Регистрация: 11.07.2010
Сообщений: 914
По умолчанию

Цитата:
Ну так ведь всё правильно.
Вопросы мб какие-нибудь были?)
ТС хочет видеть нутро этих операторов:
Код:
	bool operator || (Complex &)
	{
		return false;
	}

	bool operator && (Complex &)
	{
		return false;
	}
Я вот не соображу, что они должны делать?
EUGY вне форума Ответить с цитированием
Старый 15.01.2013, 02:21   #6
julia9311
Пользователь
 
Регистрация: 23.06.2012
Сообщений: 69
По умолчанию

мне нужно вычислить логические значения выражений
julia9311 вне форума Ответить с цитированием
Старый 15.01.2013, 02:25   #7
netrino
Участник клуба
 
Аватар для netrino
 
Регистрация: 15.07.2008
Сообщений: 1,933
По умолчанию

Цитата:
Сообщение от julia9311 Посмотреть сообщение
мне нужно вычислить логические значения выражений
Так у Вас же и спрашивают, каков должен быть результат применения вышеперечисленных логических операций к комплексным числам?
Что должны вернуть вот такие выражения:
Код:
Complex(1, 3) && Complex(-3, 3);  // = ?
Complex(0, 0) || Complex(1, 2);   // = ?
!Complex(1, 2);                   // = ?
Или, быть может, есть конкретное отображение комплексных чисел на булевы значения? Например 0 - ложь, не 0 - истина? Тогда будет достаточно перегрузить единственный оператор приведения к типу bool.
netrino вне форума Ответить с цитированием
Старый 15.01.2013, 02:39   #8
julia9311
Пользователь
 
Регистрация: 23.06.2012
Сообщений: 69
По умолчанию

я думаю, должно быть примерно так:

если u + v и u-v не равно нулю, то 1 - правда, 0 - ложь,
не u * v равно 5, то 1 - правда, 0 - ложь,
u/v или u+v не равно нулю, то 1 - правда, 0 - ложь,
julia9311 вне форума Ответить с цитированием
Старый 15.01.2013, 13:44   #9
Blind Guard
Форумчанин
 
Регистрация: 14.03.2012
Сообщений: 139
По умолчанию

Цитата:
Сообщение от Ezhik Kihze Посмотреть сообщение
Вы увидели хоть одну перегруженную логическую операцию?
Ах вот в чём дело. Прошу прощения
Blind Guard вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Логические операции Ebon Помощь студентам 3 16.12.2011 11:36
Логические операции _-Re@l-_ Помощь студентам 16 04.11.2010 13:24
логические операции yk92 Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 2 28.10.2010 09:38
Есть код,как правильно перегрузить конструктор -ushёl- Общие вопросы C/C++ 9 08.07.2010 10:32
Логические операции тотошкин Помощь студентам 1 23.01.2010 21:52