为什么都是错? (操作符重载)小的不才,大虾们帮忙看看

minijazz 2003-05-31 10:12:02
//Complex.h
class Complex
{
public:
Complex();
Complex(float n1,float n2);
Complex operator+ (const Complex &S)const;
Complex operator- (const Complex &S)const;
Complex operator* (float n)const;
Complex operator~ ();
friend Complex operator * (float n,const Complex &S2);
friend Complex operator * (const Complex &S1,const Complex &S2);
friend Complex operator / (const Complex &S1,const Complex &S2);
friend Complex operator >> (istream &is,const Complex &S);
friend Complex & operator << (ostream &os,const Complex &S);
private:
float real;
float imaginary;
};

//Complex.cpp
#include<iostream.h>
#include<math.h>
#include"Complex.h"

Complex::Complex()
{real=imaginary=0.0;}

Complex::Complex(float n1,float n2)
{real=n1;
imaginary=n2;
}

Complex Complex::operator +(const Complex &S)const
{return Complex(real+S.real,imaginary+S.imaginary);
}

Complex Complex::operator -(const Complex &S)const
{return Complex(real-S.real,imaginary-S.imaginary);
}

Complex Complex::operator *(float n)const
{return Complex(real*n,imaginary*n);
}

Complex Complex::operator~ ()
{
return Complex(real,-imaginary);
}

//friend
Complex operator *(float n,Complex &S)
{
return S*n;
}

Complex operator *(Complex &S1,Complex &S2)
{
float n1=S1.real*S2.real-S1.imaginary*S2.imaginary;
float n2=S1.real*S2.imaginary+S1.imaginary*S2.real;
Complex result(n1,n2);

return result;
}

Complex operator /(Complex &S1,Complex &S2)
{float n1=(S1.real*S2.real+S1.imaginary*S2.imaginary)/(S2.real*S2.real+S2.imaginary*S2.imaginary);
float n2=(-S1.real*S2.imaginary+S1.imaginary*S2.real)/(S2.real*S2.real+S2.imaginary*S2.imaginary);
Complex result(n1,n2);
return result;
}

istream operator >> (istream & is,const Complex & S)
{
cout<<"real: ";
is>>S.real;
cout<<endl;
cout<"imaginary: ";
is>>S.imaginary;
cout<<endl;
}

ostream & operator << (ostream & os,const Complex & S)
{
os <<"( "<<S.real<<" ,"<<S.imaginary<<"i"<<" )" ;
return os;
}

//user.cpp
#include<iostream.h>
//using namespace std;
#include "Complex.h"
int main()
{
Complex a(3.0,4.0);
Complex c;
cout<<"Enter a complex number(q to quit):\n";
while(cin>>c)
{
cout <<" c is "<< c<<endl;
cout <<"complex conjugate is"<< ~c<<endl;
cout <<"a is"<< a<< endl;
cout <<"a+c is"<< a+c<< endl;
cout <<"a-c is"<< a-c<< endl;
cout <<"a*c is"<< a*c<< endl;
cout <<"a*2 is"<< a*2<< endl;
cout <<"2*c is"<< 2*c<< endl;
cout <<"a/c is"<< a/c<< endl;
cout <<"Enter a complex number(q to quit):\n";
}
cout <<"Done!\n";
return 0;
}
错误提示只是考了一部分:
e:\zm\mycomplex\complex.cpp(43) : error C2248: 'real' : cannot access private member declared in class 'Complex'
e:\zm\mycomplex\complex.h(16) : see declaration of 'real'
e:\zm\mycomplex\complex.cpp(43) : error C2248: 'real' : cannot access private member declared in class 'Complex'
e:\zm\mycomplex\complex.h(16) : see declaration of 'real'
e:\zm\mycomplex\complex.cpp(43) : error C2248: 'real' : cannot access private member declared in class 'Complex'
e:\zm\mycomplex\complex.h(16) : see declaration of 'real'
e:\zm\mycomplex\complex.cpp(43) : error C2248: 'imaginary' : cannot access private member declared in class 'Complex'
e:\zm\mycomplex\complex.h(17) : see declaration of 'imaginary'
e:\zm\mycomplex\complex.cpp(43) : error C2248: 'imaginary' : cannot access private member declared in class 'Complex'
e:\zm\mycomplex\complex.h(17) : see declaration of 'imaginary'
e:\zm\mycomplex\complex.cpp(44) : error C2248: 'imaginary' : cannot access private member declared in class 'Complex'
e:\zm\mycomplex\complex.h(17) : see declaration of 'imaginary'
e:\zm\mycomplex\complex.cpp(44) : error C2248: 'real' : cannot access private member declared in class 'Complex'
e:\zm\mycomplex\complex.h(16) : see declaration of 'real'
...全文
26 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
snipersu 2003-06-02
  • 打赏
  • 举报
回复
istream & operator >> (istream & is, const Complex & S)
//const Complex & S是不对的,不能用const 因为你要改写S的内容。
minijazz 2003-06-01
  • 打赏
  • 举报
回复
在这谢谢各位了,用分略表心意!
minijazz 2003-06-01
  • 打赏
  • 举报
回复
结帖了依然有分!
minijazz 2003-06-01
  • 打赏
  • 举报
回复
//Complex.h
class Complex
{
public:
Complex();
Complex(float n1,float n2);
Complex operator+ (const Complex &S)const;
Complex operator- (const Complex &S)const;
Complex operator* (float n)const;
Complex operator~ ();
friend Complex operator * (float n,const Complex &S2);
friend Complex operator * (const Complex &S1,const Complex &S2);
friend Complex operator / (const Complex &S1,const Complex &S2);
friend istream & operator >> (istream & is,const Complex & S);
friend ostream & operator << (ostream & os,const Complex & S);
private:
float real;
float imaginary;
};
//Complex.cpp
#include<iostream>
#include<cmath>
using namespace std;
#include"Complex.h"

Complex::Complex()
{real=imaginary=0.0;}

Complex::Complex(float n1,float n2)
{real=n1;
imaginary=n2;
}

Complex Complex::operator +(const Complex &S)const
{return Complex(real+S.real,imaginary+S.imaginary);
}

Complex Complex::operator -(const Complex &S)const
{return Complex(real-S.real,imaginary-S.imaginary);
}

Complex Complex::operator *(float n)const
{return Complex(real*n,imaginary*n);
}

Complex Complex::operator~ ()
{
return Complex(real,-imaginary);
}

//friend
Complex operator *(float n,Complex &S)
{
return S*n;
}

Complex operator *(const Complex &S1,const Complex &S2)
{
float n1=S1.real*S2.real-S1.imaginary*S2.imaginary;
float n2=S1.real*S2.imaginary+S1.imaginary*S2.real;
Complex result(n1,n2);

return result;
}

Complex operator /(const Complex &S1,const Complex &S2)
{float n1=(S1.real*S2.real+S1.imaginary*S2.imaginary)/(S2.real*S2.real+S2.imaginary*S2.imaginary);
float n2=(-S1.real*S2.imaginary+S1.imaginary*S2.real)/(S2.real*S2.real+S2.imaginary*S2.imaginary);
Complex result(n1,n2);
return result;
}

istream & operator >> (istream & is, const Complex & S)
{
cout<<"real: ";
is>>S.real;
cout<<endl;
cout<<"imaginary: ";
is>>S.imaginary;
cout<<endl;
return is;
}

ostream & operator << (ostream & os,const Complex & S)
{
os <<"( "<<S.real<<" ,"<<S.imaginary<<"i"<<" )" ;
return os;
}

//user.cpp
#include<iostream>
using namespace std;
#include "Complex.h"
int main()
{
Complex a(3.0,4.0);
Complex c;
cout<<"Enter a complex number(q to quit):\n";
while(cin>>c)
{
cout <<" c is "<< c<<endl;
cout <<"complex conjugate is"<< ~c<<endl;
cout <<"a is"<< a<< endl;
cout <<"a+c is"<< a+c<< endl;
cout <<"a-c is"<< a-c<< endl;
cout <<"a*c is"<< a*c<< endl;
cout <<"a*2 is"<< a*2<< endl;
cout <<"2*c is"<< 2*c<< endl;
cout <<"a/c is"<< a/c<< endl;
cout <<"Enter a complex number(q to quit):\n";
}
cout <<"Done!\n";
return 0;
}

怎么还是在重载〈〈和〉〉中有问题啊?
snipersu 2003-05-31
  • 打赏
  • 举报
回复
operator+ - * / 都应该是2元操作符。给你一个2元了。
class Complex
{
private:
double real;
double imaginary;
public:
Complex():real(0),imaginary(0)
{
}
Complex(double r,double i):real(r),imaginary(i)
{
}
friend Complex operator+(const Complex& lhs,const Complex& rhs)
{
return Complex((lhs.real+rhs.real),lhs.imaginary+rhs.imaginary);
}
friend Complex operator-(const Complex& lhs,const Complex& rhs)
{
return Complex((lhs.real-rhs.real),lhs.imaginary-rhs.imaginary);
}
friend Complex operator*(const Complex& lhs,const Complex& rhs)
{
return Complex((lhs.real*rhs.real-lhs.imaginary*rhs.imaginary),(lhs.real*rhs.imaginary+lhs.imaginary*rhs.real));
}
friend Complex operator/(const Complex& lhs,const Complex& rhs)
{
return Complex((lhs.real*rhs.real+lhs.imaginary*rhs.imaginary)/(rhs.real*rhs.real+rhs.imaginary*rhs.imaginary),
(lhs.imaginary*rhs.real-lhs.real*rhs.imaginary)/(rhs.real*rhs.real+rhs.imaginary*rhs.imaginary));
}
friend ostream& operator<<(ostream& os,const Complex& c)
{
cout<<c.real;
if(c.imaginary<0)
{
os<<c.imaginary<<"i"<<endl;
}
else if(c.imaginary>0)
{
os<<"+"<<c.imaginary<<"i"<<endl;
}
return os;
}
};
lifanxi 2003-05-31
  • 打赏
  • 举报
回复
改好了:
#include<iostream>
#include<cmath>
using namespace std;

class Complex
{
public:
Complex();
Complex(float n1,float n2);
Complex operator+ (const Complex &S)const;
Complex operator- (const Complex &S)const;
Complex operator* (float n)const;
Complex operator~ ();
friend Complex operator * (float n,const Complex &S2);
friend Complex operator * (const Complex &S1,const Complex &S2);
friend Complex operator / (const Complex &S1,const Complex &S2);
friend istream & operator >> (istream &is, Complex &S);
friend ostream & operator << (ostream &os,const Complex &S);
private:
float real;
float imaginary;
};

//Complex.cpp



Complex::Complex()
{real=imaginary=0.0;}

Complex::Complex(float n1,float n2)
{real=n1;
imaginary=n2;
}

Complex Complex::operator +(const Complex &S)const
{return Complex(real+S.real,imaginary+S.imaginary);
}

Complex Complex::operator -(const Complex &S)const
{return Complex(real-S.real,imaginary-S.imaginary);
}

Complex Complex::operator *(float n)const
{return Complex(real*n,imaginary*n);
}

Complex Complex::operator~ ()
{
return Complex(real,-imaginary);
}

//friend
Complex operator *(float n,Complex &S)
{
return S*n;
}

Complex operator *(const Complex &S1,const Complex &S2)
{
float n1=S1.real*S2.real-S1.imaginary*S2.imaginary;
float n2=S1.real*S2.imaginary+S1.imaginary*S2.real;
Complex result(n1,n2);

return result;
}

Complex operator /(const Complex &S1,const Complex &S2)
{float n1=(S1.real*S2.real+S1.imaginary*S2.imaginary)/(S2.real*S2.real+S2.imaginary*S2.imaginary);
float n2=(-S1.real*S2.imaginary+S1.imaginary*S2.real)/(S2.real*S2.real+S2.imaginary*S2.imaginary);
Complex result(n1,n2);
return result;
}

istream& operator >> (istream & is, Complex & S)
{
cout<<"real: ";
is>>S.real;
cout<<endl;
cout<<"imaginary: ";
is>>S.imaginary;
cout<<endl;
return is;
}

ostream & operator << (ostream & os,const Complex & S)
{
os <<"( "<<S.real<<" ,"<<S.imaginary<<"i"<<" )" ;
return os;
}

int main()
{
Complex a(3.0,4.0);
Complex c;
cout<<"Enter a complex number(q to quit):\n";
while(cin>>c)
{
cout <<" c is "<< c<<endl;
cout <<"complex conjugate is"<< ~c<<endl;
cout <<"a is"<< a<< endl;
cout <<"a+c is"<< a+c<< endl;
cout <<"a-c is"<< a-c<< endl;
cout <<"a*c is"<< a*c<< endl;
cout <<"a*2 is"<< a*2<< endl;
cout <<"2*c is"<< 2*c<< endl;
cout <<"a/c is"<< a/c<< endl;
cout <<"Enter a complex number(q to quit):\n";
}
cout <<"Done!\n";
return 0;
}
lifanxi 2003-05-31
  • 打赏
  • 举报
回复
您有好几个友员函数的声明与定义不致,如少了const之类,您可以参考出错提示再调试一下。

69,371

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧