![](/img/trans.png)
[英]C++ designing a class for big integer addition and subtraction using linked list, template and stack
[英]Addition and subtraction of complex numbers using class in 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;
}
但是,當我編譯程序時,會顯示很多錯誤(std :: basic_ostream),我什至沒有得到。
我遇到的另一個問題是函數void :: Complex print。 cout本身內部應該有條件。 不,如果不是。 但是我不知道該怎么辦。
該程序必須像這樣運行:
輸入操作數一的實數部分:5
輸入操作數一的虛部:2(虛部的i不應該寫)
輸入操作數二的實數部分:8
輸入操作數二的虛部:1(再次,我不應輸入)
/ 然后將打印輸入的數字 /
(5,2i)//這次是一個i
(8,1i)
/ 然后答案 /
總和是13 + 3i。
區別是-3,1i。 //或-3,我
請幫我! 我是C ++和Stackoverflow的新手,我們將非常感謝您的幫助。 非常感謝你!
線
cout <<“總和為” << result.add << endl;
是不正確的,因為add
是一種方法,所以result.add
將是該方法的指針,而cout
不知道如何處理它-這會使編譯器將其吐出。
將行更改為
cout << "The sum is ";
result.print();
cout << endl;
您需要為生產線做同樣的事情
cout << "The difference is " << result.subtract << endl;
關於編碼樣式,這兩種方法都覆蓋了現有的復數。 也許具有這樣的功能會更好
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上找到合適的教程。
請稍做修正再試一次
#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();
}
您已經在使用std ::名稱空間。 只需在其中使用復數庫即可,如以下答案所示: 使用類添加復數
我也在使用Complex Numbers,這是我的ComplexNumbers.h文件:
#include <iostream> // for std namespace
class ComplexNumber
{
public:
ComplexNumber();
ComplexNumber(float RealPart, float ImaginaryPart);
ComplexNumber(ComplexNumber &NewComplexNumber);
void SetRealPart(float RealPart);
void SetImaginaryPart(float ImaginaryPart);
friend ComplexNumber operator+(const ComplexNumber Complex1, const ComplexNumber Complex2);
friend ComplexNumber operator-(const ComplexNumber Complex1, const ComplexNumber Complex2);
friend std::ostream & operator<<(std::ostream &output, const ComplexNumber &NumberToDsiplay);
friend std::istream & operator >>(std::istream &input, ComplexNumber &NumberToInput);
bool operator==(const ComplexNumber Complex);
bool operator!=(const ComplexNumber Complex);
private:
float RealPart;
float ImaginaryPart;
};
.cpp文件是這樣的:
#include "Complex Numbers.h"
ComplexNumber::ComplexNumber()
{
RealPart = 0;
ImaginaryPart = 0;
}
ComplexNumber::ComplexNumber(float RealPart, float ImaginaryPart)
{
SetRealPart(RealPart);
SetImaginaryPart(ImaginaryPart);
}
ComplexNumber::ComplexNumber(ComplexNumber &NewComplexNumber)
{
RealPart = NewComplexNumber.RealPart;
ImaginaryPart = NewComplexNumber.ImaginaryPart;
}
void ComplexNumber::SetRealPart(float RealPart)
{
this->RealPart=RealPart;
}
void ComplexNumber::SetImaginaryPart(float ImaginaryPart)
{
this->ImaginaryPart=ImaginaryPart;
}
ComplexNumber operator+(const ComplexNumber Complex1, const ComplexNumber Complex2)
{
ComplexNumber TemporaryComplexNumber;
TemporaryComplexNumber.RealPart = Complex1.RealPart + Complex2.RealPart;
TemporaryComplexNumber.ImaginaryPart = Complex1.ImaginaryPart + Complex2.ImaginaryPart;
return TemporaryComplexNumber;
}
ComplexNumber operator-(const ComplexNumber Complex1, const ComplexNumber Complex2)
{
ComplexNumber TemporaryComplexNumber;
TemporaryComplexNumber.RealPart = Complex1.RealPart - Complex2.RealPart;
TemporaryComplexNumber.ImaginaryPart = Complex1.ImaginaryPart - Complex2.ImaginaryPart;
return TemporaryComplexNumber;
}
std::ostream & operator<<(std::ostream &output, const ComplexNumber &NumberToDsiplay)
{
if(NumberToDsiplay.ImaginaryPart > 0)
output << NumberToDsiplay.RealPart << "+" << NumberToDsiplay.ImaginaryPart << "i";
else if(NumberToDsiplay.ImaginaryPart < 0)
output << NumberToDsiplay.RealPart << "" << NumberToDsiplay.ImaginaryPart << "i";
else
output << NumberToDsiplay.RealPart << "+" << NumberToDsiplay.ImaginaryPart << "i";
return output;
}
std::istream & operator >>(std::istream &input, ComplexNumber &NumberToInput)
{
std::cout << "Enter the real part: ";
input >> NumberToInput.RealPart;
std::cout << "Enter the imaginary part: ";
input >> NumberToInput.ImaginaryPart;
}
bool ComplexNumber::operator==(const ComplexNumber Complex)
{
return RealPart==Complex.RealPart && ImaginaryPart==Complex.ImaginaryPart;
}
bool ComplexNumber::operator!=(const ComplexNumber Complex)
{
if(RealPart != Complex.RealPart && ImaginaryPart != Complex.ImaginaryPart)
return true;
else if(RealPart != Complex.RealPart && (!(ImaginaryPart != Complex.ImaginaryPart)))
return true;
else if(ImaginaryPart != Complex.ImaginaryPart && (!(RealPart != Complex.RealPart)))
return true;
return false;
}
在main中,調用result.add之后,如果不返回任何內容,則將相同的函數放入cout流中。 我想你是想寫cout <<“總和” << result.print();
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.