Ошибки В Программе

Тема в разделе "Общие вопросы по С и С++", создана пользователем julia9311, 3 янв 2013.

  1. julia9311

    julia9311 New Member

    Регистрация:
    1 июл 2012
    Сообщения:
    0
    Симпатии:
    0
    заголовочный файл clas_s.h
    Код (C++):
    #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() {}

    double abs() // Модуль комплексного числа
    {
    return sqrt(re * re - im * 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)
    {
    out << "(" << c.re << ") + I (" << c.im << "\n";

    return out;
    }

    istream &operator>>(istream &in, Complex &c)
    {
    in >> c.re >> c.im;

    return in;
    }

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

    Код (C++):
    #include "StdAfx.h"
    #include "clas_s.h"
    #include <iostream>
    #include <conio.h>
    #include <math.h>
    using namespace std;

    class complexExt: public Complex
    {
    private:
    double real;    // Действительная часть
    double image;  // Мнимая часть
    public:
    complexExt () {};  // Конструктор по умолчанию
    complexExt (double r) { real = r; image = 0; } // Конструктор
    complexExt (double r, double i) { real = r, image = i; }    // Конструктор
    ~ complexExt () {} // Деструктор
    double abs()  // Модуль комплексного числа
    {
    return sqrt(real * real - image * image);
    }

    complexExt operator+(Complex &);    // Перегрузка оператора сложения
    complexExt operator-(Complex &);    // Перегрузка оператора вычитания
    complexExt operator*(Complex &);    // Перегрузка оператора умножения
    complexExt operator/(Complex &);    // Перегрузка оператора деления

    // Перегрузка функции-оператора << для вывода класса complexExt
    friend ostream &operator<<(ostream &, complexExt &);

    // Перегрузка функции-оператора >> для ввода класса complexExt
    friend istream &operator>>(istream &, complexExt &);
    };

    // Перегрузка +
    complexExt complexExt::operator+( complexExt &fp1)
    {
    fp1.real = real + fp1.real;
    fp1.image = image + fp1.image;
    return fp1;
    }

    // Перегрузка -
    complexExt complexExt::operator-( complexExt &fp1)
    {
    fp1.real = real - fp1.real;
    fp1.image = image - fp1.image;
    return fp1;
    }

    // Перегрузка *
    complexExt complexExt::operator*( complexExt &fp1)
    {
    double i, j;
    i = real * fp1.real - image * fp1.image;
    j = real * fp1.image + fp1.real * image;
    fp1.real = i;
    fp1.image = j;
    return fp1;
    }

    // Перегрузка /
    complexExt complexExt::operator/( complexExt &fp1)
    {
    double k, i, j;
    k = fp1.real * fp1.real + fp1.image * fp1.image;
    i = (real * fp1.real + image * fp1.image) / k;
    j = (fp1.real * image - real * fp1.image) / k;
    fp1.real = i;
    fp1.image = j;
    return fp1;
    }

    // Перегрузка оператора <<
    ostream &operator<< (ostream &fo, complexExt &fp)
    {
    if (fp.image < 0) fo << fp.real << "+i(" << fp.image << ")\n";
    else fo << fp.real << "+i" << fp.image << "\n";

    return fo;
    }

    // Перегрузка оператора >>
    istream &operator>>(istream &fi, complexExt &fp)
    {
    cout << "Введите действительную часть: ";
    fi >> fp.real;
    cout << "Введите мнимую часть: ";
    fi >> fp.image;
    return fi;
    }


    int main()
    {


    // Комплексные числа
    complexExt c1, c2, c3, c4, c5;

    // Ввод комплексных чисел
    cin >> c1;
    cin >> c2;
    cin >> c3;
    cin >> c4;
    cin >> c5;

    // Вывод комплексных чисел
    cout << "\nc1 = " << c1;
    cout << "c2 = " << c2;
    cout << "c3 = " << c3;
    cout << "c4 = " << c4;
    cout << "c5 = " << c5 << '\n';

    cout << "Модуль c1: " << c1.abs() << "\n\n";

    // Вывод результатов операций
    cout << "c1 + c2 = " << (c1 + c2);
    cout << "c1 - c3 = " << (c1 - c3);
    cout << "c1 * c4 = " << (c1 * c4);
    cout << "c1 / c5 = " << (c1 / c5);

    getch();

    return 0;
    }
    появляются ошибки

    1>c:\users\1\desktop\доработка8154\1\consoleapplication3\consoleapplication3\consoleapplication3.cpp(39): error C2511: complexExt complexExt::eek:perator +(complexExt &): перегруженная функция-член не найдена в "complexExt"
    1> c:\users\1\desktop\доработка8154\1\consoleapplication3\consoleapplication3\consoleapplication3.cpp(10): см. объявление "complexExt"
    1>c:\users\1\desktop\доработка8154\1\consoleapplication3\consoleapplication3\consoleapplication3.cpp(47): error C2511: complexExt complexExt::eek:perator -(complexExt &): перегруженная функция-член не найдена в "complexExt"
    1> c:\users\1\desktop\доработка8154\1\consoleapplication3\consoleapplication3\consoleapplication3.cpp(10): см. объявление "complexExt"
    1>c:\users\1\desktop\доработка8154\1\consoleapplication3\consoleapplication3\consoleapplication3.cpp(55): error C2511: complexExt complexExt::eek:perator *(complexExt &): перегруженная функция-член не найдена в "complexExt"
    1> c:\users\1\desktop\доработка8154\1\consoleapplication3\consoleapplication3\consoleapplication3.cpp(10): см. объявление "complexExt"
    1>c:\users\1\desktop\доработка8154\1\consoleapplication3\consoleapplication3\consoleapplication3.cpp(66): error C2511: complexExt complexExt::eek:perator /(complexExt &): перегруженная функция-член не найдена в "complexExt"
    1> c:\users\1\desktop\доработка8154\1\consoleapplication3\consoleapplication3\consoleapplication3.cpp(10): см. объявление "complexExt"
     
  2. Whatka

    Whatka Well-Known Member

    Регистрация:
    9 окт 2011
    Сообщения:
    433
    Симпатии:
    4
    вы не те функции перегружаете)

    у вас в классе объявлены функции,принимающие в качестве параметра объект типа Complex
    а в описании функции принимают в качестве параметра объекты другого типа
     
  3. rrrFer

    rrrFer Well-Known Member
    Команда форума C\C++ Team

    Регистрация:
    6 сен 2011
    Сообщения:
    1.324
    Симпатии:
    36
    complexExt operator+(Complex &); // Перегрузка оператора сложения
    //...
    complexExt complexExt::eek:perator+( complexExt &fp1)

    объявила один оператор, реализовала - другой

    Добавлено: не заметил вяткин ответ.

    Код (Text):
    complexExt complexExt::operator+( complexExt &fp1)
    {
    fp1.real = real + fp1.real;
    fp1.image = image + fp1.image;
    return fp1;
    }
    это очень странный код

    если я пишу
    а = 1, б = 2, с = а + б, д = б + с.
    то по-любому я ожидаю в Д получить 5, а вы мне возвращаете 6
     
Загрузка...

Поделиться этой страницей