我正在从事编程工作。赋值是为复数创建一个类,将数字表示为double类型的两个变量。我应该重载+, - ,*,<<<<>>>符号。我正在努力完成这项任务。我的代码到处都是,我所做的每一个更改都会增加编译器错误的数量。关于我做错了什么以及尽可能改进的方法的许多建议将不胜感激。先感谢您。我的混乱代码如下:
class Complex
{
public:
Complex();
Complex(double& realNumber, double& imaginaryNumber);
Complex(double realPart);
void input();
void output();
double getReal() const;
double getImaginary() const;
friend const Complex operator +(const Complex& num1, const Complex& num2);
friend const Complex operator -(const Complex& num1, const Complex& num2);
const Complex operator *(const Complex& num1, const Complex& num2);
bool Complex operator ==(const Complex& num1, const Complex& num2);
private:
double real, imaginary;
const Complex i(0, 1);
};
Complex::Complex(double& realPart);
Complex::Complex(double& realNumber, double& imaginaryNumber) : 0(realNumber),0*i(imaginaryNumber)
const Complex operator +(const Complex& num1, const Complex& num2);
const Complex operator -(const Complex& num1, const Complex& num2);
const Complex operator *(const Complex& num1, const Complex& num2);
bool Complex operator ==(const Complex& num1, const Complex& num2);
//------------------------------------------------
#include <iostream>
#include <cstdlib>
#include <cmath>
using namespace std;
int main()
{
Complex number1, number2, number3;
const double i = sqrt(-1);
Complex::Complex(double& realPart) : realPart(realPart + 0*i)
Complex::Complex(double& realNumber, double& imaginaryNumber) : 0(realNumber),0*i(imaginaryNumber)
const Complex operator +(const Complex& num1, const Complex& num2)
{
Complex num3;
num3.real = num1.getReal() + num2.getReal();
num3.imaginary = (num1.getImaginary() + num2.getImaginary());
return number3;
}
const Complex operator -(const Complex& num1, const Complex& num2)
{
Complex num3;
num3.real = num1.getReal() - num2.getReal();
num3.imaginary = (num1.getImaginary() - num2.getImaginary());
return number3;
}
const Complex operator *(const Complex& num1, const Complex& num2)
{
complex num3;
num3.real =(num1.getReal * num2.getReal() - num1.getImaginary() * num2.getImaginary()) ;
num3.imaginary = (num1.getReal() * num2.getImaginary() + num1.getImaginary() *num2.getReal);
return number3;
}
bool Complex operator ==(const Complex& num1, const Complex& num2)
{
return ( (num1.getReal() == num2.getReal() ) && (num1.getImaginary() == num2.getImaginary() ));
}
number1.input();
cout<<"Now please repeat with the second imaginary number: \n"<<endl;
number2.input();
if (number1 == number2)
{
cout<<number1<<" is equal to "<<number2<<endl;
}
else if (number1 > number2)
{
cout<<number1<<"is greater than "<<number2<<endl;
}
else
{
cout<<number1<<"is less than "<<number2<<endl;
};
cout<<number1<<" + "<<number2<<" = "<<number1+number2<<endl;
cout<<number1<<" - "<<number2<<" = "<<number1 - number2<<endl;
cout<<number1<<" * "<<number2<<" = "<<number1*number2<<endl;
};
//----------------------------------------
void Complex::input()
{
cout<<"Enter the real number of your complex number: "<<endl;
cin>>real;
cout<<"Enter the imaginary number (the numeral before the 'i') of your complex number" <<endl;
cin>>imaginary;
};
//void Complex::output()
答案 0 :(得分:0)
temp.cpp:20:70: error: ‘const Complex Complex::operator*(const Complex&, const Complex&)’ must take either zero or one argument
const Complex operator *(const Complex& num1, const Complex& num2);
就错误而言,这是非常明确的:'二进制'(或两个参数)运算符不是类成员 - 并且您正确地将'二进制'运算符声明为朋友并再次在 global中正确定义它们范围稍后在代码中;
'一元'版本必须是类成员,操作中涉及的“其他”对象是'this',如,添加'this'复数和给定的一个并返回结果
'*'运算符是特殊的,因为它具有用于其他东西的无参数版本(...)
我知道编译器错误可能是压倒性的;所以注释掉代码(比如,除了你的类声明之外的所有代码)并按照每个错误的方式工作;然后取消注释等。尽早编译,经常编译。 C ++因错位的分号错误而更容易被捕获。