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

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

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

Восстановить пароль
Повторная активизация e-mail

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

Ответ
 
Опции темы Поиск в этой теме
Старый 10.04.2012, 21:33   #1
collider
Новичок
Джуниор
 
Регистрация: 20.09.2011
Сообщений: 2
По умолчанию переопределение операций (комплексные числа)

не получается откомпилировать программу:
Код:
#include <iostream.h>
#include <conio.h>
#include <math.h>
struct Complex{
       double re, im;
       };
       double cmod(Complex x){
              return sqrt(x.re*x.re+x.im*x.im);
              }
       Complex operator+(const Complex x, const Complex y){
               Complex z;
               z.re=x.re+y.re;
               z.im=x.im+y.im;
               return z;
               }
       Complex operator-(const Complex x, const Complex y){
               Complex z;
               z.re=x.re-y.re;
               z.im=x.im-y.im;
               return z;
               }
       Complex operator*(const Complex x, const Complex y){
               Complex z;
               z.re=x.re*y.re-x.im*y.im;
               z.im=x.im*y.re+x.re*y.im;
               return z;
               }
        Complex operator/(const Complex x, const Complex y){
               Complex z={1e30, 1e30};
               double t=y.re*y.re+y.im*y.im;
               if (t<1e-6){
               z.re=(x.re*y.re+x.im*y.im)/t;
               z.im=(x.im*y.re-x.re*y.im)/t;
               }
               return z;
               }
        int operator==(const Complex x, const Complex y){
            return (x.re==y.re&&x.im==y.im)?1:0;
            }
        int operator!=(const Complex x, const Complex y){
            return (x.re==y.re&&x.im==y.im)?0:1;
            }
        Complex &operator=(const Complex &x, const Complex &y){
                x.re=y.re;
                x.im=y.im;
                return x;
                }
        Complex &operator+=(const Complex &x, const Complex &y){
                x.re+=y.re;
                x.im=+y.im;
                return x;
                }
        Complex &operator-=(const Complex &x, const Complex y){
                x.re-=y.re;
                x.im-=y.im;
                return x;
                }
         Complex &operator*=(const Complex &x, const Complex y){
                double t=x.re;
                x.re=x.re*y.re-x.im*y.im;
                x.im=x.im*y.re+t*y.im;
                return x;
                }
         Complex &operator/=(const Complex &x, const Complex y){
                 Complex z={1e30, 1e30};
                double t=y.re*y.re+y.im*y.im;
                if (t>1e-6){
                            double tmp=x.re;
                x.re=(x.re*y.re+x.im*y.im)/t;
                x.im=(x.im*y.re-tmp*y.im)/t;
                else x=z;
                return x;
                }
         main() {
                Complex e={1.0, 0.0}, i={0.0,1.0} a, b, c;
                a=e+i;
                b=e*i;
                cout<<a<<b;
         getch();
         return 1;
         }
ошибки начинаются с выделенной (43) строки. как это можно исправить?
collider вне форума Ответить с цитированием
Старый 10.04.2012, 22:20   #2
Granus
С++
Форумчанин
 
Аватар для Granus
 
Регистрация: 22.09.2008
Сообщений: 791
По умолчанию

Операторы (), [], ->, = (и все вида +=) и преобразования типа нельзя переопределять как внешние функции - они должны быть методами класса.
Код:
struct Complex {
  double re, im;
  Complex & operator = (const Complex y) {
    re = y.re;
    im = y.im;
    return *this;
  }
};
и так для всех операторов присваивания

к слову, сам оператор присваивания переопределять не обязательно, по умолчанию будет создат в точности такой же, как вы написали
Форматируйте код, будьте людьми.

Последний раз редактировалось Granus; 10.04.2012 в 22:24.
Granus вне форума Ответить с цитированием
Старый 11.04.2012, 11:44   #3
collider
Новичок
Джуниор
 
Регистрация: 20.09.2011
Сообщений: 2
По умолчанию

Granus, спасибо!
collider вне форума Ответить с цитированием
Ответ


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

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Комплексные числа Программер Михаил Общие вопросы C/C++ 7 28.11.2012 00:03
Комплексные числа 777UFO777 Общие вопросы Delphi 0 21.12.2008 23:48
Переопределение операций(сложение,вычитание...) master_root Общие вопросы Delphi 3 18.06.2008 20:20
Переопределение операций toeman Общие вопросы C/C++ 2 20.11.2007 11:21