2012-02-16 3 views
0

У меня есть код, который должен спросить пользователя два набора реальных и мнимых чисел.Сложение и вычитание сложных чисел с использованием класса в C++

#include <iostream> 

using namespace std; 

class Complex { 
    public: 
     double r; 
     double i; 
    public: 
     Complex(); 
     void add(Complex, Complex); 
     void subtract(Complex, Complex); 
     void print(); 
}; 



Complex::Complex() { 
    r = i = 0; 
} 

void Complex::add (Complex op1, Complex op2) { 
    r = op1.r+op2.r; 
    i = op1.i+op2.i; 
} 

void Complex::subtract (Complex op1, Complex op2) { 
    r = op1.r-op2.r; 
    i = op1.i-op2.i; 
} 

void Complex::print() { 
    cout << r << i; 
} 

int main() { 
    Complex operand1, operand2, result; 
    cout << "Input real part for operand one: " << endl; 
    cin >> operand1.r; 
    cout << "Input imaginary part for operand one: " << endl; 
    cin >> operand1.i; 
    cout << "Input real part for operand two: " << endl; 
    cin >> operand2.r; 
    cout << "Input imaginary part for operand two: " << endl; 
    cin >> operand2.i; 
    result.add(operand1, operand2); 
    cout << "The sum is " << result.add << endl; 
    result.subtract(operand1, operand2); 
    cout << "The difference is " << result.subtract << endl; 
} 

Однако, когда я составил программу, много ошибок отображаются (станд :: basic_ostream), который я даже не получаю.

Еще одна проблема, которая возникает у меня в функции void :: Комплексная печать. Внутри cout должно быть условие. Нет, если-еще. Но я понятия не имею, что делать.
Программа должны работать так:
Input вещественной части для операнда одного: 5
ввода мнимой части для операнда одного: 2 (я для мнимые не должен быть написано)
Input действительной части для операнда два: 8
Входной мнимая часть для операнда два: 1 (опять же, я не должен быть введен)
/, то он будет печатать ввод (ред) числа/
(5, 2i) // на этот раз с I
(8, 1i)
/затем ответы/
Сумма составляет 13 + 3i.
Разница -3, 1i. // или -3, i

Пожалуйста, помогите! Я новичок в C++ и здесь, в stackoverflow, и ваша помощь будет очень оценена. Большое спасибо!

+0

Это ваша домашняя домашняя работа? – penartur

+0

Прочтите дополнительную информацию о перегрузке оператора, и вы сможете правильно писать свои функции добавления и вычитания. – Alexander

+0

Да, penartur. Я думаю, что сделал все, что мог, но моих знаний все еще не хватает. Мне нужно руководство. –

ответ

0

В основном после вызова result.add вы помещаете ту же функцию в поток cout, когда она ничего не возвращает. Я думаю, вы хотели написать cout < < "сумма" < < result.print();

2

Линия

< < соиЬ "Сумма является" < < < < result.add Endl;

неверно, так как add является метод так result.add будет указатель на этот метод, и cout не знает, как справиться с этим - что делает слюну компилятор его.

Измените строку на

cout << "The sum is "; 
result.print(); 
cout << endl; 

Вы должны сделать то же самое для линии

cout << "The difference is " << result.subtract << endl; 

Как стиль кодирования, оба метода overwrting существующего комплексного числа. Возможно, имеющий функцию, как это было бы лучше

Complex &Complex::add (const Complex &op) { 
    r += op.r; 
    i += op.i; 
    return *this; 
} 

Это позволит вам цепи дополнений вместе, а также просто добавить комплексное число к существующему комплексного числа.

Кроме того, вы можете сделать переменные класса r и i частным.Для этого потребуется альтернативный конструктор:

Complex:Complex(double real, double imaginary) : r(real), i(imaginary) {}; 

Наконец, вы, возможно, пожелает рассмотреть вопрос о перегрузке оператора - Я уверен, что вы можете Google, что найти разумный учебник.

0

Попробуйте снова с небольшими исправлениями

#include <iostream.h> 
    class Complex { 
     public: 
     double r; //real part 
     double i; //imaginary part 
     public: 
     void add(Complex, Complex); 
     void subtract(Complex, Complex); 
     void print(); 
    }; 

    void Complex::add (Complex op1, Complex op2) { 
     r = op1.r + op2.r; 
     i = op1.i + op2.i; 
    } 

    void Complex::subtract (Complex op1, Complex op2) { 
     r = op1.r - op2.r; 
     i = op1.i - op2.i; 
    } 

    void Complex::print() { 
     cout << "("<<r<<", " << i <<")"; 
    } 

    void main() { 
     Complex operand1, operand2, result; 
     cout << "\nInput real part for operand one: " << endl; 
     cin >> operand1.r; 
     cout << "Input imaginary part for operand one: " << endl; 
     cin >> operand1.i; 
     cout << "Input real part for operand two: " << endl; 
     cin >> operand2.r; 
     cout << "Input imaginary part for operand two: " << endl; 
     cin >> operand2.i; 
     cout << "\nThe sum is "; 
     result.add(operand1, operand2); 
     result.print(); 
     cout << "\nThe difference is "; 
     result.subtract(operand1, operand2); 
     result.print(); 
    } 
Смежные вопросы