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

julia9311

New member
01.07.2012
0
0
#1
заголовочный файл 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"
 
W

Whatka

#2
вы не те функции перегружаете)

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

rrrFer

#3
complexExt operator+(Complex &); // Перегрузка оператора сложения
//...
complexExt complexExt::eek:perator+( complexExt &fp1)

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

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

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

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