复杂数字类的构造函数的难度。

时间:2014-03-08 01:08:51

标签: constructor

我正在从事编程工作。赋值是为复数创建一个类,将数字表示为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()

1 个答案:

答案 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 ++因错位的分号错误而更容易被捕获。